tvi: for ex messages use "---" filetype - neatvi - [fork] simple vi-type editor with UTF-8 support
 (HTM) git clone git://src.adamsgaard.dk/neatvi
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit d9562b264f00d015c0bcd75bd8fa3e4cece9eddb
 (DIR) parent 89738c4b7ea3a3d705c408090a85c14610158251
 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
       Date:   Fri, 10 Mar 2017 14:10:40 +0330
       
       vi: for ex messages use "---" filetype
       
       Diffstat:
         M led.c                               |      22 +++++++++++++++++++---
         M vi.c                                |       2 +-
         M vi.h                                |       1 +
       
       3 files changed, 21 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/led.c b/led.c
       t@@ -1,3 +1,4 @@
       +/* line editing and drawing */
        #include <ctype.h>
        #include <stdio.h>
        #include <string.h>
       t@@ -33,6 +34,7 @@ static int led_offdir(char **chrs, int *pos, int i)
                return 0;
        }
        
       +/* highlight text in reverse direction */
        static void led_markrev(int n, char **chrs, int *pos, int *att)
        {
                int i = 0, j;
       t@@ -51,7 +53,8 @@ static void led_markrev(int n, char **chrs, int *pos, int *att)
                }
        }
        
       -static char *led_render(char *s0, int cbeg, int cend)
       +/* render and highlight a line */
       +static char *led_render(char *s0, int cbeg, int cend, char *syn)
        {
                int n;
                int *pos;        /* pos[i]: the screen position of the i-th character */
       t@@ -75,7 +78,7 @@ static char *led_render(char *s0, int cbeg, int cend)
                                for (j = 0; j < curwid; j++)
                                        off[led_posctx(ctx, pos[i] + j, cbeg, cend)] = i;
                }
       -        att = syn_highlight(ex_filetype(), s0);
       +        att = syn_highlight(syn, s0);
                led_markrev(n, chrs, pos, att);
                out = sbuf_make();
                i = cbeg;
       t@@ -107,9 +110,20 @@ static char *led_render(char *s0, int cbeg, int cend)
                return sbuf_done(out);
        }
        
       +/* print a line on the screen */
        void led_print(char *s, int row)
        {
       -        char *r = led_render(s, xleft, xleft + xcols);
       +        char *r = led_render(s, xleft, xleft + xcols, ex_filetype());
       +        term_pos(row, 0);
       +        term_kill();
       +        term_str(r);
       +        free(r);
       +}
       +
       +/* print a line on the screen; for ex messages */
       +void led_printmsg(char *s, int row)
       +{
       +        char *r = led_render(s, xleft, xleft + xcols, "---");
                term_pos(row, 0);
                term_kill();
                term_str(r);
       t@@ -199,6 +213,7 @@ static char *led_readchar(int c, char *kmap)
                return kmap_map(kmap, c);
        }
        
       +/* read a character from the terminal */
        char *led_read(char **kmap)
        {
                int c = term_read();
       t@@ -218,6 +233,7 @@ char *led_read(char **kmap)
                return NULL;
        }
        
       +/* read a line from the terminal */
        static char *led_line(char *pref, char *post, char *ai, int ai_max, int *key, char **kmap)
        {
                struct sbuf *sb;
 (DIR) diff --git a/vi.c b/vi.c
       t@@ -45,7 +45,7 @@ static void vi_drawmsg(void)
        {
                int oleft = xleft;
                xleft = 0;
       -        led_print(vi_msg, xrows);
       +        led_printmsg(vi_msg, xrows);
                vi_msg[0] = '\0';
                xleft = oleft;
        }
 (DIR) diff --git a/vi.h b/vi.h
       t@@ -133,6 +133,7 @@ char *led_prompt(char *pref, char *post, char **kmap);
        char *led_input(char *pref, char *post, char **kmap);
        char *led_read(char **kmap);
        void led_print(char *msg, int row);
       +void led_printmsg(char *s, int row);
        int led_pos(char *s, int pos);
        
        /* ex commands */