URI: 
       tFilter resize events - ledit - Text editor (WIP)
  HTML git clone git://lumidify.org/ledit.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/git/ledit.git (encrypted, but very slow)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 12a37bf84755943e32b70a7afca27f4928f684af
   DIR parent f9064673e6ced9b9d8a2c1461c108170c15a96bc
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Mon, 15 Nov 2021 09:59:49 +0100
       
       Filter resize events
       
       Diffstat:
         M buffer.c                            |       2 +-
         M config.h                            |      20 +++++++++++++++++---
         M ledit.c                             |      28 +++++++++++++++++++---------
         M search.c                            |       1 +
       
       4 files changed, 38 insertions(+), 13 deletions(-)
       ---
   DIR diff --git a/buffer.c b/buffer.c
       t@@ -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;
   DIR diff --git a/config.h b/config.h
       t@@ -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
   DIR diff --git a/ledit.c b/ledit.c
       t@@ -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) {
       t@@ -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 */
       t@@ -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;
   DIR diff --git a/search.c b/search.c
       t@@ -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;