diff options
| author | Alison Winters <alisonatwork@outlook.com> | 2021-02-27 15:18:45 -0800 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-01 14:26:36 +0100 |
| commit | 63d9da322f438a98bb654cc4976874fa89f1fa62 (patch) | |
| tree | 694857920f5e31495f34048079bc6b7c69db4c09 | |
| parent | 9b6bcfda0e11c0e73a966a77110f6c68425cff34 (diff) | |
| download | busybox-w32-63d9da322f438a98bb654cc4976874fa89f1fa62.tar.gz busybox-w32-63d9da322f438a98bb654cc4976874fa89f1fa62.tar.bz2 busybox-w32-63d9da322f438a98bb654cc4976874fa89f1fa62.zip | |
vi: restore 0 offset after :set noXXX command
Fixes bug where commands after the first noXXX command are ignored.
e.g. :set noic tabstop=4
While at it, stop recognizing "notabstop=NNN".
function old new delta
colon 2990 2965 -25
Signed-off-by: Alison Winters <alisonatwork@outlook.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | editors/vi.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/editors/vi.c b/editors/vi.c index 458ca6293..e77c348fb 100644 --- a/editors/vi.c +++ b/editors/vi.c | |||
| @@ -2709,7 +2709,6 @@ static void colon(char *buf) | |||
| 2709 | # if ENABLE_FEATURE_VI_SETOPTS | 2709 | # if ENABLE_FEATURE_VI_SETOPTS |
| 2710 | char *argp; | 2710 | char *argp; |
| 2711 | # endif | 2711 | # endif |
| 2712 | i = 0; // offset into args | ||
| 2713 | // only blank is regarded as args delimiter. What about tab '\t'? | 2712 | // only blank is regarded as args delimiter. What about tab '\t'? |
| 2714 | if (!args[0] || strcasecmp(args, "all") == 0) { | 2713 | if (!args[0] || strcasecmp(args, "all") == 0) { |
| 2715 | // print out values of all options | 2714 | // print out values of all options |
| @@ -2732,15 +2731,16 @@ static void colon(char *buf) | |||
| 2732 | # if ENABLE_FEATURE_VI_SETOPTS | 2731 | # if ENABLE_FEATURE_VI_SETOPTS |
| 2733 | argp = args; | 2732 | argp = args; |
| 2734 | while (*argp) { | 2733 | while (*argp) { |
| 2735 | if (strncmp(argp, "no", 2) == 0) | 2734 | i = 0; |
| 2736 | i = 2; // ":set noautoindent" | 2735 | if (argp[0] == 'n' && argp[1] == 'o') // "noXXX" |
| 2736 | i = 2; | ||
| 2737 | setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT); | 2737 | setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT); |
| 2738 | setops(argp, "flash " , i, "fl", VI_ERR_METHOD); | 2738 | setops(argp, "flash " , i, "fl", VI_ERR_METHOD); |
| 2739 | setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE); | 2739 | setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE); |
| 2740 | setops(argp, "showmatch " , i, "sm", VI_SHOWMATCH ); | 2740 | setops(argp, "showmatch " , i, "sm", VI_SHOWMATCH ); |
| 2741 | if (strncmp(argp + i, "tabstop=", 8) == 0) { | 2741 | if (strncmp(argp, "tabstop=", 8) == 0) { |
| 2742 | int t = 0; | 2742 | int t = 0; |
| 2743 | sscanf(argp + i+8, "%u", &t); | 2743 | sscanf(argp + 8, "%u", &t); |
| 2744 | if (t > 0 && t <= MAX_TABSTOP) | 2744 | if (t > 0 && t <= MAX_TABSTOP) |
| 2745 | tabstop = t; | 2745 | tabstop = t; |
| 2746 | } | 2746 | } |
