tShow status message that appears after first keypress after timeout of 5 s - ve - a minimal text editor (work in progress)
 (HTM) git clone git://src.adamsgaard.dk/ve
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4c6ac8b9eea3b516a5c0f7452d1b2fe4d1aa882f
 (DIR) parent 8ce8f682e8b6e18b5b095a372c929090036ea07b
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Tue,  6 Aug 2019 15:01:39 +0200
       
       Show status message that appears after first keypress after timeout of 5 s
       
       Diffstat:
         M main.c                              |       3 +++
         M output.c                            |      16 ++++++++++++++++
         M output.h                            |       1 +
         M terminal.c                          |       3 ++-
       
       4 files changed, 22 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/main.c b/main.c
       t@@ -2,6 +2,7 @@
        #include "output.h"
        #include "input.h"
        #include "io.h"
       +#include "output.h"
        
        int
        main(int argc, char* argv[])
       t@@ -13,6 +14,8 @@ main(int argc, char* argv[])
                        file_open(argv[1]);
                }
        
       +        editor_set_status_message("HELP: Ctrl-q to quit");
       +
                while (1) {
                        editor_refresh_screen();
                        editor_process_keypress();
 (DIR) diff --git a/output.c b/output.c
       t@@ -71,6 +71,21 @@ editor_draw_status(struct abuf *ab)
                                ab_append(ab, " ", 1);
                        ab_append(ab, right_status, right_status_len);
                }
       +        ab_append(ab, "\x1b[m", 3);
       +        ab_append(ab, "\r\n", 2);
       +}
       +
       +/* draw status message if as long as it is specified and it is not too old */
       +void
       +editor_draw_status_message(struct abuf *ab)
       +{
       +        int msglen;
       +        ab_append(ab, "\x1b[K", 3);
       +        msglen = strlen(E.status_msg);
       +        if (msglen > E.screen_columns)
       +                msglen = E.screen_columns;
       +        if (msglen && time(NULL) - E.status_msg_time < 5)
       +                ab_append(ab, E.status_msg, msglen);
        }
        
        /* navigate over tab-representative string as one character */
       t@@ -148,6 +163,7 @@ editor_refresh_screen()
                
                editor_draw_rows(&ab);
                editor_draw_status(&ab);
       +        editor_draw_status_message(&ab);
        
                char buf[32];
                snprintf(buf, sizeof(buf), "\x1b[%d;%dH",
 (DIR) diff --git a/output.h b/output.h
       t@@ -8,5 +8,6 @@ struct abuf {
        #define ABUF_INIT {NULL, 0}
        
        void editor_refresh_screen();
       +void editor_set_status_message(const char *fmt, ...);
        
        #endif
 (DIR) diff --git a/terminal.c b/terminal.c
       t@@ -123,5 +123,6 @@ init_editor() {
        
                if (get_window_size(&E.screen_rows, &E.screen_columns) == -1)
                        die("get_window_size");
       -        E.screen_rows -= 1;
       +        /* E.screen_rows -= 1; */
       +        E.screen_rows -= 2;
        }