ledit

Text editor (WIP)
git clone git://lumidify.org/ledit.git (fast, but not encrypted)
git clone https://lumidify.org/git/ledit.git (encrypted, but very slow)
Log | Files | Refs | README | LICENSE

commit 12a37bf84755943e32b70a7afca27f4928f684af
parent f9064673e6ced9b9d8a2c1461c108170c15a96bc
Author: lumidify <nobody@lumidify.org>
Date:   Mon, 15 Nov 2021 09:59:49 +0100

Filter resize events

Diffstat:
Mbuffer.c | 2+-
Mconfig.h | 20+++++++++++++++++---
Mledit.c | 28+++++++++++++++++++---------
Msearch.c | 1+
4 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/buffer.c b/buffer.c @@ -1810,7 +1810,7 @@ ledit_buffer_delete_range_base( *new_byte_ret = new_byte; } -/* FIXME */ +/* FIXME: always normalize lines */ void ledit_buffer_resize_textview(ledit_buffer *buffer) { buffer->total_height = 0; diff --git a/config.h b/config.h @@ -1,5 +1,19 @@ -/* minimum time between redraws (nanoseconds) */ +/* Note: These have to be less than one second */ + +/* + * minimum time between redraws (nanoseconds) + */ #define TICK (long long)20000000 -/* minimum time between processing of mouse events - - events inbetween are discarded (nanoseconds) */ + +/* + * minimum time between processing of mouse events - + * mouse movement events inbetween are discarded, + * scroll events are added up (nanoseconds) + */ #define MOUSE_TICK (long long)100000000 + +/* + * minimum time between processing of window resize + * events - events inbetween are discarded (nanoseconds) + */ +#define RESIZE_TICK (long long)200000000 diff --git a/ledit.c b/ledit.c @@ -108,12 +108,12 @@ mainloop(void) { /* store last time that a mouse event was processed in order to avoid sending too many mouse events to be processed */ /* also store last draw time so framerate can be limited */ - struct timespec now, elapsed, last, last_scroll, last_motion, sleep_time; + struct timespec now, elapsed, last, last_scroll, last_motion, last_resize, sleep_time; clock_gettime(CLOCK_MONOTONIC, &last); - last_scroll = last_motion = last; + last_scroll = last_motion = last_resize = last; sleep_time.tv_sec = 0; - XEvent last_scroll_event, last_motion_event; - int last_scroll_valid = 0, last_motion_valid = 0; + XEvent last_scroll_event, last_motion_event, last_resize_event; + int last_scroll_valid = 0, last_motion_valid = 0, last_resize_valid = 0; int scroll_num = 0; int scroll_delta = 0; while (running) { @@ -132,11 +132,8 @@ mainloop(void) { need_redraw = 1; break; case ConfigureNotify: - resize_window( - event.xconfigure.width, - event.xconfigure.height - ); - need_redraw = 1; + last_resize_event = event; + last_resize_valid = 1; break; case ButtonPress: /* FIXME: this is all a bit hacky */ @@ -201,6 +198,19 @@ mainloop(void) { last_scroll_valid = 0; } } + if (last_resize_valid) { + clock_gettime(CLOCK_MONOTONIC, &now); + ledit_timespecsub(&now, &last_resize, &elapsed); + if (elapsed.tv_sec > 0 || elapsed.tv_nsec >= RESIZE_TICK) { + resize_window( + last_resize_event.xconfigure.width, + last_resize_event.xconfigure.height + ); + last_resize = now; + last_resize_valid = 0; + need_redraw = 1; + } + } if (change_kbd) { change_kbd = 0; diff --git a/search.c b/search.c @@ -91,6 +91,7 @@ search_forward(ledit_buffer *buffer, int *line_ret, int *byte_ret) { } /* FIXME: this is insanely inefficient */ +/* FIXME: just go backwards char-by-char and compare */ static enum ledit_search_state search_backward(ledit_buffer *buffer, int *line_ret, int *byte_ret) { *line_ret = buffer->cur_line;