tmot: word motions stop at empty lines - 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 5eaaf403f7dc6a08f434aea8825e692102bf258a
 (DIR) parent 979fba724b1590629fd7a6d45abdf68cc4f61490
 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
       Date:   Mon, 23 May 2016 14:34:27 +0430
       
       mot: word motions stop at empty lines
       
       Diffstat:
         M mot.c                               |      18 +++++++++++-------
       
       1 file changed, 11 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/mot.c b/mot.c
       t@@ -151,12 +151,13 @@ static int lbuf_wordlast(struct lbuf *lb, int kind, int dir, int *row, int *off)
        
        int lbuf_wordbeg(struct lbuf *lb, int big, int dir, int *row, int *off)
        {
       -        int nl = 0;
       +        int nl;
                lbuf_wordlast(lb, big ? 3 : uc_kind(lbuf_chr(lb, *row, *off)), dir, row, off);
       +        nl = uc_code(lbuf_chr(lb, *row, *off)) == '\n';
                if (lbuf_next(lb, dir, row, off))
                        return 1;
                while (uc_isspace(lbuf_chr(lb, *row, *off))) {
       -                nl = uc_code(lbuf_chr(lb, *row, *off)) == '\n' ? nl + 1 : 0;
       +                nl += uc_code(lbuf_chr(lb, *row, *off)) == '\n';
                        if (nl == 2)
                                return 0;
                        if (lbuf_next(lb, dir, row, off))
       t@@ -167,19 +168,22 @@ int lbuf_wordbeg(struct lbuf *lb, int big, int dir, int *row, int *off)
        
        int lbuf_wordend(struct lbuf *lb, int big, int dir, int *row, int *off)
        {
       -        int nl = uc_code(lbuf_chr(lb, *row, *off)) == '\n' ? -1 : 0;
       -        if (!uc_isspace(lbuf_chr(lb, *row, *off)))
       +        int nl = 0;
       +        if (!uc_isspace(lbuf_chr(lb, *row, *off))) {
                        if (lbuf_next(lb, dir, row, off))
                                return 1;
       +                nl = dir < 0 && uc_code(lbuf_chr(lb, *row, *off)) == '\n';
       +        }
       +        nl += dir > 0 && uc_code(lbuf_chr(lb, *row, *off)) == '\n';
                while (uc_isspace(lbuf_chr(lb, *row, *off))) {
       -                nl = uc_code(lbuf_chr(lb, *row, *off)) == '\n' ? nl + 1 : 0;
       +                if (lbuf_next(lb, dir, row, off))
       +                        return 1;
       +                nl += uc_code(lbuf_chr(lb, *row, *off)) == '\n';
                        if (nl == 2) {
                                if (dir < 0)
                                        lbuf_next(lb, -dir, row, off);
                                return 0;
                        }
       -                if (lbuf_next(lb, dir, row, off))
       -                        return 1;
                }
                if (lbuf_wordlast(lb, big ? 3 : uc_kind(lbuf_chr(lb, *row, *off)), dir, row, off))
                        return 1;