vi: fix '' command (goto to prev context)

The '' command in vi doesn't currently work because after the first
apostrophe is read, the next character is converted to an integer
between 0 and 25 inclusive (for indexing the array of marks). The
comparison of the converted character with an apostrophe therefore never
succeeds, meaning that '' doesn't do anything.

Based on the patch by Francis Rounds <francis.rounds@4bridgeworks.com>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-09-28 16:23:05 +02:00
parent b09ab448b8
commit 61fcc8c781

View File

@ -2722,9 +2722,8 @@ static char *swap_context(char *p) // goto new context for '' command make this
// only swap context if other context is valid
if (text <= mark[27] && mark[27] <= end - 1) {
tmp = mark[27];
mark[27] = mark[26];
mark[26] = tmp;
p = mark[26]; // where we are going- previous context
mark[27] = p;
mark[26] = p = tmp;
context_start = prev_line(prev_line(prev_line(p)));
context_end = next_line(next_line(next_line(p)));
}
@ -3618,8 +3617,9 @@ static void do_cmd(int c)
}
break;
case '\'': // '- goto a specific mark
c1 = (get_one_char() | 0x20) - 'a';
if ((unsigned)c1 <= 25) { // a-z?
c1 = (get_one_char() | 0x20);
if ((unsigned)(c1 - 'a') <= 25) { // a-z?
c1 = (c1 - 'a');
// get the b-o-l
q = mark[c1];
if (text <= q && q < end) {