tvi: clean up motion commands in empty buffers - 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 c7b521883bfdca0555a45ddf6e2dcb4b1ca3966a
 (DIR) parent ba8b939c9468cb119218cf20df963e1cd59fdd44
 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
       Date:   Thu, 13 Oct 2016 10:18:33 +0330
       
       vi: clean up motion commands in empty buffers
       
       Diffstat:
         M vi.c                                |      19 ++++++-------------
       
       1 file changed, 6 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/vi.c b/vi.c
       t@@ -338,26 +338,17 @@ static int vi_motionln(int *row, int cmd)
                        *row = (vi_arg1 || vi_arg2) ? cnt - 1 : lbuf_len(xb) - 1;
                        break;
                case 'H':
       -                if (lbuf_len(xb))
       -                        *row = MIN(xtop + cnt - 1, lbuf_len(xb) - 1);
       -                else
       -                        *row = 0;
       +                *row = MIN(xtop + cnt - 1, lbuf_len(xb) - 1);
                        break;
                case 'L':
       -                if (lbuf_len(xb))
       -                        *row = MIN(xtop + xrows - 1 - cnt + 1, lbuf_len(xb) - 1);
       -                else
       -                        *row = 0;
       +                *row = MIN(xtop + xrows - 1 - cnt + 1, lbuf_len(xb) - 1);
                        break;
                case 'M':
       -                if (lbuf_len(xb))
       -                        *row = MIN(xtop + xrows / 2, lbuf_len(xb) - 1);
       -                else
       -                        *row = 0;
       +                *row = MIN(xtop + xrows / 2, lbuf_len(xb) - 1);
                        break;
                default:
                        if (c == cmd) {
       -                        *row = MAX(0, MIN(*row + cnt - 1, lbuf_len(xb) - 1));
       +                        *row = MIN(*row + cnt - 1, lbuf_len(xb) - 1);
                                break;
                        }
                        if (c == '%' && (vi_arg1 || vi_arg2)) {
       t@@ -369,6 +360,8 @@ static int vi_motionln(int *row, int cmd)
                        vi_back(c);
                        return 0;
                }
       +        if (*row < 0)
       +                *row = 0;
                return c;
        }