summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-05-18 23:54:37 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2010-05-18 23:54:37 (GMT)
commit9f82d0be615540ffc1fe4551750e6cb0bc76f737 (patch)
treeeec308dd2aeeeb6c6ce3a8a00f47f95ccc01e4ed
parent92510141e24251a1d72fbdeef4e2ed2b2b25b433 (diff)
downloadbusybox-9f82d0be615540ffc1fe4551750e6cb0bc76f737.tar.gz
busybox-9f82d0be615540ffc1fe4551750e6cb0bc76f737.tar.bz2
vi: fix "set ic" command; code shrink while at it. closes bug 1765
function old new delta colon 2970 2848 -122 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/vi.c86
1 files changed, 37 insertions, 49 deletions
diff --git a/editors/vi.c b/editors/vi.c
index d9124fd..9b050e1 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -793,7 +793,7 @@ static void colon(char *buf)
//
if (!buf[0])
- goto vc1;
+ goto ret;
if (*buf == ':')
buf++; // move past the ':'
@@ -881,7 +881,7 @@ static void colon(char *buf)
// don't edit, if the current file has been modified
if (file_modified && !useforce) {
status_line_bold("No write since last change (:edit! overrides)");
- goto vc1;
+ goto ret;
}
if (args[0]) {
// the user supplied a file name
@@ -892,11 +892,11 @@ static void colon(char *buf)
} else {
// no user file name, no current name- punt
status_line_bold("No current filename");
- goto vc1;
+ goto ret;
}
if (init_text_buffer(fn) < 0)
- goto vc1;
+ goto ret;
#if ENABLE_FEATURE_VI_YANKMARK
if (Ureg >= 0 && Ureg < 28 && reg[Ureg] != 0) {
@@ -921,7 +921,7 @@ static void colon(char *buf)
} else if (strncmp(cmd, "file", i) == 0) { // what File is this
if (b != -1 || e != -1) {
status_line_bold("No address allowed on this command");
- goto vc1;
+ goto ret;
}
if (args[0]) {
// user wants a new filename
@@ -967,11 +967,8 @@ static void colon(char *buf)
if (c_is_no_print)
standout_end();
}
-#if ENABLE_FEATURE_VI_SET
- vc2:
-#endif
Hit_Return();
- } else if (strncmp(cmd, "quit", i) == 0 // Quit
+ } else if (strncmp(cmd, "quit", i) == 0 // quit
|| strncmp(cmd, "next", i) == 0 // edit next file
) {
int n;
@@ -981,30 +978,30 @@ static void colon(char *buf)
optind = save_argc;
}
editing = 0;
- goto vc1;
+ goto ret;
}
// don't exit if the file been modified
if (file_modified) {
status_line_bold("No write since last change (:%s! overrides)",
(*cmd == 'q' ? "quit" : "next"));
- goto vc1;
+ goto ret;
}
// are there other file to edit
n = save_argc - optind - 1;
if (*cmd == 'q' && n > 0) {
status_line_bold("%d more file(s) to edit", n);
- goto vc1;
+ goto ret;
}
if (*cmd == 'n' && n <= 0) {
status_line_bold("No more files to edit");
- goto vc1;
+ goto ret;
}
editing = 0;
} else if (strncmp(cmd, "read", i) == 0) { // read file into text[]
fn = args;
if (!fn[0]) {
status_line_bold("No filename given");
- goto vc1;
+ goto ret;
}
if (b < 0) { // no addr given- use defaults
q = begin_line(dot); // assume "dot"
@@ -1018,7 +1015,7 @@ static void colon(char *buf)
q = text + ofs;
}
if (ch < 0)
- goto vc1; // nothing was inserted
+ goto ret; // nothing was inserted
// how many lines in text[]?
li = count_lines(q, q + ch - 1);
status_line("\"%s\""
@@ -1049,25 +1046,21 @@ static void colon(char *buf)
// only blank is regarded as args delmiter. What about tab '\t' ?
if (!args[0] || strcasecmp(args, "all") == 0) {
// print out values of all options
- go_bottom_and_clear_to_eol();
- printf("----------------------------------------\r\n");
#if ENABLE_FEATURE_VI_SETOPTS
- if (!autoindent)
- printf("no");
- printf("autoindent ");
- if (!err_method)
- printf("no");
- printf("flash ");
- if (!ignorecase)
- printf("no");
- printf("ignorecase ");
- if (!showmatch)
- printf("no");
- printf("showmatch ");
- printf("tabstop=%d ", tabstop);
-#endif
- printf("\r\n");
- goto vc2;
+ status_line_bold(
+ "%sautoindent "
+ "%sflash "
+ "%signorecase "
+ "%sshowmatch "
+ "tabstop=%u",
+ autoindent ? "" : "no",
+ err_method ? "" : "no",
+ ignorecase ? "" : "no",
+ showmatch ? "" : "no",
+ tabstop
+ );
+#endif
+ goto ret;
}
#if ENABLE_FEATURE_VI_SETOPTS
argp = args;
@@ -1075,19 +1068,17 @@ static void colon(char *buf)
if (strncmp(argp, "no", 2) == 0)
i = 2; // ":set noautoindent"
setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT);
- setops(argp, "flash ", i, "fl", VI_ERR_METHOD);
+ setops(argp, "flash " , i, "fl", VI_ERR_METHOD);
setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE);
- setops(argp, "showmatch ", i, "ic", VI_SHOWMATCH);
- /* tabstopXXXX */
- if (strncmp(argp + i, "tabstop=%d ", 7) == 0) {
- sscanf(strchr(argp + i, '='), "tabstop=%d" + 7, &ch);
- if (ch > 0 && ch <= MAX_TABSTOP)
- tabstop = ch;
+ setops(argp, "showmatch " , i, "sm", VI_SHOWMATCH );
+ if (strncmp(argp + i, "tabstop=", 8) == 0) {
+ int t = 0;
+ sscanf(argp + i+8, "%u", &t);
+ if (t > 0 && t <= MAX_TABSTOP)
+ tabstop = t;
}
- while (*argp && *argp != ' ')
- argp++; // skip to arg delimiter (i.e. blank)
- while (*argp && *argp == ' ')
- argp++; // skip all delimiting blanks
+ argp = skip_non_whitespace(argp);
+ argp = skip_whitespace(argp);
}
#endif /* FEATURE_VI_SETOPTS */
#endif /* FEATURE_VI_SET */
@@ -1159,7 +1150,7 @@ static void colon(char *buf)
#if ENABLE_FEATURE_VI_READONLY
if (readonly_mode && !useforce) {
status_line_bold("\"%s\" File is read only", fn);
- goto vc3;
+ goto ret;
}
#endif
// how many lines in text[]?
@@ -1196,9 +1187,6 @@ static void colon(char *buf)
editing = 0;
}
}
-#if ENABLE_FEATURE_VI_READONLY
- vc3:;
-#endif
#if ENABLE_FEATURE_VI_YANKMARK
} else if (strncmp(cmd, "yank", i) == 0) { // yank lines
if (b < 0) { // no addr given- use defaults
@@ -1214,7 +1202,7 @@ static void colon(char *buf)
// cmd unknown
not_implemented(cmd);
}
- vc1:
+ ret:
dot = bound_dot(dot); // make sure "dot" is valid
return;
#if ENABLE_FEATURE_VI_SEARCH