vi: position cursor on last column of tab
No binary (build failed)
—
(log yok)
| @@ -826,21 +826,20 @@ static void sync_cursor(char *d, int *row, int *col) | |
| // find out what col "d" is on | |
| co = 0; | |
| - | while (tp < d) { // drive "co" to correct column |
| + | do { // drive "co" to correct column |
| if (*tp == '\n') //vda || *tp == '\0') | |
| break; | |
| if (*tp == '\t') { | |
| - | // handle tabs like real vi |
| - | if (d == tp && cmd_mode) { |
| - | break; |
| - | } |
| co = next_tabstop(co); | |
| } else if ((unsigned char)*tp < ' ' || *tp == 0x7f) { | |
| co++; // display as ^X, use 2 columns | |
| } | |
| - | co++; |
| - | tp++; |
| - | } |
| + | // inserting text before a tab, don't include its position |
| + | if (cmd_mode && tp == d - 1 && *d == '\t') { |
| + | co++; |
| + | break; |
| + | } |
| + | } while (tp++ < d && ++co); |
| // "co" is the column where "dot" is. | |
| // The screen has "columns" columns. | |
| @@ -1801,7 +1800,7 @@ static char *move_to_col(char *p, int l) | |
| p = begin_line(p); | |
| co = 0; | |
| - | while (co < l && p < end) { |
| + | do { |
| if (*p == '\n') //vda || *p == '\0') | |
| break; | |
| if (*p == '\t') { | |
| @@ -1809,9 +1808,7 @@ static char *move_to_col(char *p, int l) | |
| } else if (*p < ' ' || *p == 127) { | |
| co++; // display as ^X, use 2 columns | |
| } | |
| - | co++; |
| - | p++; |
| - | } |
| + | } while (++co <= l && p++ < end); |
| return p; | |
| } | |