tDraw status with left and right components and handle truncation - 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 b8e623a52f0e936fd1a85796f6ab7af8d030fac7
 (DIR) parent 87aab360fcdd4649b2d1f3349f589f51bc69976b
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Tue,  6 Aug 2019 10:27:40 +0200
       
       Draw status with left and right components and handle truncation
       
       Diffstat:
         M output.c                            |      38 +++++++++++++++++++++++--------
       
       1 file changed, 29 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/output.c b/output.c
       t@@ -25,16 +25,36 @@ ab_free(struct abuf *ab) {
                free(ab->b);
        }
        
       +/* draw status line consisting of left and right components.
       + * if the screen is narrower than both parts, just show the left status, 
       + * truncated, if necessary. */
        void
       -draw_status_string(struct abuf *ab)
       +draw_status(struct abuf *ab)
        {
       -        char status[80];
       -        int statuslen;
       -        statuslen = snprintf(status, sizeof(status),
       -                             "%s editor -- version %s", PROGNAME, VERSION);
       -        if (statuslen > E.screencols)
       -                statuslen = E.screencols;
       -        ab_append(ab, status, statuslen);
       +        char left_status[80], right_status[80];
       +        int left_status_len, right_status_len, padding;
       +        left_status_len = snprintf(left_status, sizeof(left_status),
       +                                   "%s editor -- version %s",
       +                                   PROGNAME, VERSION);
       +        right_status_len = snprintf(right_status, sizeof(right_status),
       +                                    "%s editor -- version %s",
       +                                    PROGNAME, VERSION);
       +
       +        if (left_status_len > E.screencols)
       +                left_status_len = E.screencols;
       +
       +        padding = E.screencols - left_status_len - right_status_len;
       +        if (padding < 0) {
       +                if (left_status_len < E.screencols)
       +                        ab_append(ab, left_status, left_status_len);
       +                else
       +                        ab_append(ab, left_status, E.screencols);
       +        } else {
       +                ab_append(ab, left_status, left_status_len);
       +                while (padding--)
       +                        ab_append(ab, " ", 1);
       +                ab_append(ab, right_status, right_status_len);
       +        }
        }
        
        /* draw editor screen.
       t@@ -46,7 +66,7 @@ editor_draw_rows(struct abuf *ab)
                for (y = -1; y < E.screenrows; ++y) {
        
                        if (y == E.screenrows-1)
       -                        draw_status_string(ab);
       +                        draw_status(ab);
                        else
                                ab_append(ab, "~", 1);