diff options
author | Paul Fox <pgf@brightstareng.com> | 2008-02-14 01:17:01 +0000 |
---|---|---|
committer | Paul Fox <pgf@brightstareng.com> | 2008-02-14 01:17:01 +0000 |
commit | b5ee8db9b55eeeab542d6263d67aac12ffcb5e5b (patch) | |
tree | 75dd55fc5638d3389bbf9ccc519006f439ec072e | |
parent | 65eb550024a2d849951b7f0ac603fe4eedc5e3dd (diff) | |
download | busybox-w32-b5ee8db9b55eeeab542d6263d67aac12ffcb5e5b.tar.gz busybox-w32-b5ee8db9b55eeeab542d6263d67aac12ffcb5e5b.tar.bz2 busybox-w32-b5ee8db9b55eeeab542d6263d67aac12ffcb5e5b.zip |
add ',' and 'gg' commands (patch from Leo Jay)
-rw-r--r-- | editors/vi.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/editors/vi.c b/editors/vi.c index ce10a60a4..6f4bd06f2 100644 --- a/editors/vi.c +++ b/editors/vi.c | |||
@@ -3024,7 +3024,6 @@ static void do_cmd(char c) | |||
3024 | //case '(': // (- | 3024 | //case '(': // (- |
3025 | //case ')': // )- | 3025 | //case ')': // )- |
3026 | //case '*': // *- | 3026 | //case '*': // *- |
3027 | //case ',': // ,- | ||
3028 | //case '=': // =- | 3027 | //case '=': // =- |
3029 | //case '@': // @- | 3028 | //case '@': // @- |
3030 | //case 'F': // F- | 3029 | //case 'F': // F- |
@@ -3038,7 +3037,6 @@ static void do_cmd(char c) | |||
3038 | //case ']': // ]- | 3037 | //case ']': // ]- |
3039 | //case '_': // _- | 3038 | //case '_': // _- |
3040 | //case '`': // `- | 3039 | //case '`': // `- |
3041 | //case 'g': // g- | ||
3042 | //case 'u': // u- FIXME- there is no undo | 3040 | //case 'u': // u- FIXME- there is no undo |
3043 | //case 'v': // v- | 3041 | //case 'v': // v- |
3044 | default: // unrecognised command | 3042 | default: // unrecognised command |
@@ -3259,6 +3257,20 @@ static void do_cmd(char c) | |||
3259 | if (*q == last_forward_char) | 3257 | if (*q == last_forward_char) |
3260 | dot = q; | 3258 | dot = q; |
3261 | break; | 3259 | break; |
3260 | case ',': // repeat latest 'f' in opposite direction | ||
3261 | if (cmdcnt-- > 1) { | ||
3262 | do_cmd(','); | ||
3263 | } // repeat cnt | ||
3264 | if (last_forward_char == 0) | ||
3265 | break; | ||
3266 | q = dot - 1; | ||
3267 | while (q >= text && *q != '\n' && *q != last_forward_char) { | ||
3268 | q--; | ||
3269 | } | ||
3270 | if (q >= text && *q == last_forward_char) | ||
3271 | dot = q; | ||
3272 | break; | ||
3273 | |||
3262 | case '-': // -- goto prev line | 3274 | case '-': // -- goto prev line |
3263 | if (cmdcnt-- > 1) { | 3275 | if (cmdcnt-- > 1) { |
3264 | do_cmd(c); | 3276 | do_cmd(c); |
@@ -3491,6 +3503,19 @@ static void do_cmd(char c) | |||
3491 | end_cmd_q(); // stop adding to q | 3503 | end_cmd_q(); // stop adding to q |
3492 | #endif | 3504 | #endif |
3493 | break; | 3505 | break; |
3506 | case 'g': // 'gg' goto a line number (from vim) | ||
3507 | // (default to first line in file) | ||
3508 | c1 = get_one_char(); | ||
3509 | if (c1 != 'g') { | ||
3510 | buf[0] = 'g'; | ||
3511 | buf[1] = c1; | ||
3512 | buf[2] = '\0'; | ||
3513 | not_implemented(buf); | ||
3514 | break; | ||
3515 | } | ||
3516 | if (cmdcnt == 0) | ||
3517 | cmdcnt = 1; | ||
3518 | /* fall through */ | ||
3494 | case 'G': // G- goto to a line number (default= E-O-F) | 3519 | case 'G': // G- goto to a line number (default= E-O-F) |
3495 | dot = end - 1; // assume E-O-F | 3520 | dot = end - 1; // assume E-O-F |
3496 | if (cmdcnt > 0) { | 3521 | if (cmdcnt > 0) { |