alloc big buffers on heap
This commit is contained in:
24
src/unix.c
24
src/unix.c
@@ -15,7 +15,7 @@ void tim_write_str(cstr s, i32 size) {
|
||||
|
||||
void signal_handler(i32 signal) {
|
||||
// signals are written into a fifo pipe and read by event loop
|
||||
ssize_t _ = write(tim.signal_pipe[1], &signal, sizeof(signal));
|
||||
ssize_t _ = write(tim->signal_pipe[1], &signal, sizeof(signal));
|
||||
(void)_; // remove unused-result warning
|
||||
}
|
||||
|
||||
@@ -27,16 +27,16 @@ void tim_update_screen_size(void) {
|
||||
}
|
||||
i32 w = ws.ws_col;
|
||||
i32 h = ws.ws_row;
|
||||
tim.resized = (u32)(w * h) <= TIM_MAX_CELLS && (w != tim.w || h != tim.h);
|
||||
if (tim.resized) {
|
||||
tim.w = tim.scopes[0].w = w;
|
||||
tim.h = tim.scopes[0].h = h;
|
||||
tim->resized = (u32)(w * h) <= TIM_MAX_CELLS && (w != tim->w || h != tim->h);
|
||||
if (tim->resized) {
|
||||
tim->w = tim->scopes[0].w = w;
|
||||
tim->h = tim->scopes[0].h = h;
|
||||
}
|
||||
}
|
||||
|
||||
void tim_init_terminal(void) {
|
||||
tcgetattr(STDOUT_FILENO, &tim.attr); // store attributes
|
||||
struct termios attr = tim.attr; //
|
||||
tcgetattr(STDOUT_FILENO, &tim->attr); // store attributes
|
||||
struct termios attr = tim->attr; //
|
||||
cfmakeraw(&attr); // configure raw mode
|
||||
tcsetattr(STDOUT_FILENO, TCSADRAIN, &attr); // set new attributes
|
||||
tim_write_str(S("\33[?2004l")); // reset bracketed paste mode
|
||||
@@ -46,14 +46,14 @@ void tim_init_terminal(void) {
|
||||
tim_write_str(S("\33[?1002h")); // enable button events
|
||||
tim_write_str(S("\33[?1006h")); // use mouse sgr protocol
|
||||
tim_update_screen_size(); // get terminal size
|
||||
i32 err = pipe(tim.signal_pipe); // create signal pipe
|
||||
i32 err = pipe(tim->signal_pipe); // create signal pipe
|
||||
if (!err) { //
|
||||
signal(SIGWINCH, signal_handler); // terminal size changed
|
||||
}
|
||||
}
|
||||
|
||||
void tim_reset_terminal(void) {
|
||||
tcsetattr(STDOUT_FILENO, TCSADRAIN, &tim.attr); // restore attributes
|
||||
tcsetattr(STDOUT_FILENO, TCSADRAIN, &tim->attr); // restore attributes
|
||||
tim_write_str(S("\33[?1000l")); // disable mouse
|
||||
tim_write_str(S("\33[?1002l")); // disable mouse
|
||||
tim_write_str(S("\33[m")); // reset colors
|
||||
@@ -120,10 +120,10 @@ bool parse_input(event* restrict e, i32 n) {
|
||||
}
|
||||
|
||||
void tim_read_event(i32 timeout_ms) {
|
||||
event* e = &tim.event;
|
||||
event* e = &tim->event;
|
||||
|
||||
struct pollfd pfd[2] = {
|
||||
{.fd = tim.signal_pipe[0], .events = POLLIN},
|
||||
{.fd = tim->signal_pipe[0], .events = POLLIN},
|
||||
{.fd = STDIN_FILENO, .events = POLLIN},
|
||||
};
|
||||
|
||||
@@ -143,7 +143,7 @@ void tim_read_event(i32 timeout_ms) {
|
||||
if (pfd[0].revents & POLLIN) {
|
||||
// received signal
|
||||
i32 sig = 0;
|
||||
i32 n = read(tim.signal_pipe[0], &sig, sizeof(sig));
|
||||
i32 n = read(tim->signal_pipe[0], &sig, sizeof(sig));
|
||||
if (n > 0 && sig == SIGWINCH) {
|
||||
// screen size changed
|
||||
e->type = TimEvent_Draw;
|
||||
|
||||
Reference in New Issue
Block a user