]> git.neil.brown.name Git - edlib.git/commitdiff
render-lines: improve Move-Lines for forward motion.
authorNeilBrown <neil@brown.name>
Fri, 20 Nov 2015 23:31:33 +0000 (10:31 +1100)
committerNeilBrown <neil@brown.name>
Fri, 20 Nov 2015 23:31:33 +0000 (10:31 +1100)
Using mark_next to go from end of one line to start of next
is not very generic.
So do Move-EOL forward and extra time, and then Move-EOL backwards.

Signed-off-by: NeilBrown <neil@brown.name>
render-lines.c

index 9a7871497fae802b4ead253ee53f880ba0908cf0..0a1baaff3d2d666a1b6ea08aaef394e737a7b86e 100644 (file)
@@ -622,8 +622,7 @@ DEF_CMD(render_lines_follow_point)
                pane_damaged(p, DAMAGED_CONTENT);
                rl->ignore_point = 0;
        }
-       if (strcmp(ci->key, "Move-Line") != 0)
-               rl->target_x = -1;
+       rl->target_x = -1;
 
        /* Allow other handlers to complete the Replace */
        return 0;
@@ -782,10 +781,11 @@ DEF_CMD(render_lines_move_line)
        struct rl_data *rl = p->data;
        struct point **ptp = ci->pointp;
        struct cmd_info ci2 = {0};
-       struct mark *m;
        int target_x, target_y;
        int o = -1;
 
+       rl->ignore_point = 0;
+
        /* save target as it might get changed */
        target_x = rl->target_x;
        target_y = rl->target_y;
@@ -798,18 +798,22 @@ DEF_CMD(render_lines_move_line)
        ci2.numeric = RPT_NUM(ci);
        if (ci2.numeric < 0)
                ci2.numeric -= 1;
+       else
+               ci2.numeric += 1;
        ci2.mark = mark_of_point(*ptp);
        ci2.pointp = ci->pointp;
        if (!key_handle_focus(&ci2))
                return -1;
+       if (RPT_NUM(ci) > 0) {
+               /* at end of target line, move to start */
+               ci2.numeric = -1;
+               if (!key_handle_focus(&ci2))
+                       return -1;
+       }
 
        /* restore target: Move-EOL might have changed it */
        rl->target_x = target_x;
        rl->target_y = target_y;
-       m = ci2.mark;
-       if (RPT_NUM(ci) > 0)
-               /* Move-EOL left us at EOL */
-               mark_next((*ptp)->doc, m);
 
        if (target_x >= 0 || target_y >= 0) {
                struct rl_mark *start =