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>
This commit is contained in:
parent
92510141e2
commit
9f82d0be61
84
editors/vi.c
84
editors/vi.c
@ -793,7 +793,7 @@ static void colon(char *buf)
|
|||||||
//
|
//
|
||||||
|
|
||||||
if (!buf[0])
|
if (!buf[0])
|
||||||
goto vc1;
|
goto ret;
|
||||||
if (*buf == ':')
|
if (*buf == ':')
|
||||||
buf++; // move past the ':'
|
buf++; // move past the ':'
|
||||||
|
|
||||||
@ -881,7 +881,7 @@ static void colon(char *buf)
|
|||||||
// don't edit, if the current file has been modified
|
// don't edit, if the current file has been modified
|
||||||
if (file_modified && !useforce) {
|
if (file_modified && !useforce) {
|
||||||
status_line_bold("No write since last change (:edit! overrides)");
|
status_line_bold("No write since last change (:edit! overrides)");
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
if (args[0]) {
|
if (args[0]) {
|
||||||
// the user supplied a file name
|
// the user supplied a file name
|
||||||
@ -892,11 +892,11 @@ static void colon(char *buf)
|
|||||||
} else {
|
} else {
|
||||||
// no user file name, no current name- punt
|
// no user file name, no current name- punt
|
||||||
status_line_bold("No current filename");
|
status_line_bold("No current filename");
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (init_text_buffer(fn) < 0)
|
if (init_text_buffer(fn) < 0)
|
||||||
goto vc1;
|
goto ret;
|
||||||
|
|
||||||
#if ENABLE_FEATURE_VI_YANKMARK
|
#if ENABLE_FEATURE_VI_YANKMARK
|
||||||
if (Ureg >= 0 && Ureg < 28 && reg[Ureg] != 0) {
|
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
|
} else if (strncmp(cmd, "file", i) == 0) { // what File is this
|
||||||
if (b != -1 || e != -1) {
|
if (b != -1 || e != -1) {
|
||||||
status_line_bold("No address allowed on this command");
|
status_line_bold("No address allowed on this command");
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
if (args[0]) {
|
if (args[0]) {
|
||||||
// user wants a new filename
|
// user wants a new filename
|
||||||
@ -967,11 +967,8 @@ static void colon(char *buf)
|
|||||||
if (c_is_no_print)
|
if (c_is_no_print)
|
||||||
standout_end();
|
standout_end();
|
||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_VI_SET
|
|
||||||
vc2:
|
|
||||||
#endif
|
|
||||||
Hit_Return();
|
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
|
|| strncmp(cmd, "next", i) == 0 // edit next file
|
||||||
) {
|
) {
|
||||||
int n;
|
int n;
|
||||||
@ -981,30 +978,30 @@ static void colon(char *buf)
|
|||||||
optind = save_argc;
|
optind = save_argc;
|
||||||
}
|
}
|
||||||
editing = 0;
|
editing = 0;
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
// don't exit if the file been modified
|
// don't exit if the file been modified
|
||||||
if (file_modified) {
|
if (file_modified) {
|
||||||
status_line_bold("No write since last change (:%s! overrides)",
|
status_line_bold("No write since last change (:%s! overrides)",
|
||||||
(*cmd == 'q' ? "quit" : "next"));
|
(*cmd == 'q' ? "quit" : "next"));
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
// are there other file to edit
|
// are there other file to edit
|
||||||
n = save_argc - optind - 1;
|
n = save_argc - optind - 1;
|
||||||
if (*cmd == 'q' && n > 0) {
|
if (*cmd == 'q' && n > 0) {
|
||||||
status_line_bold("%d more file(s) to edit", n);
|
status_line_bold("%d more file(s) to edit", n);
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
if (*cmd == 'n' && n <= 0) {
|
if (*cmd == 'n' && n <= 0) {
|
||||||
status_line_bold("No more files to edit");
|
status_line_bold("No more files to edit");
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
editing = 0;
|
editing = 0;
|
||||||
} else if (strncmp(cmd, "read", i) == 0) { // read file into text[]
|
} else if (strncmp(cmd, "read", i) == 0) { // read file into text[]
|
||||||
fn = args;
|
fn = args;
|
||||||
if (!fn[0]) {
|
if (!fn[0]) {
|
||||||
status_line_bold("No filename given");
|
status_line_bold("No filename given");
|
||||||
goto vc1;
|
goto ret;
|
||||||
}
|
}
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
q = begin_line(dot); // assume "dot"
|
q = begin_line(dot); // assume "dot"
|
||||||
@ -1018,7 +1015,7 @@ static void colon(char *buf)
|
|||||||
q = text + ofs;
|
q = text + ofs;
|
||||||
}
|
}
|
||||||
if (ch < 0)
|
if (ch < 0)
|
||||||
goto vc1; // nothing was inserted
|
goto ret; // nothing was inserted
|
||||||
// how many lines in text[]?
|
// how many lines in text[]?
|
||||||
li = count_lines(q, q + ch - 1);
|
li = count_lines(q, q + ch - 1);
|
||||||
status_line("\"%s\""
|
status_line("\"%s\""
|
||||||
@ -1049,25 +1046,21 @@ static void colon(char *buf)
|
|||||||
// only blank is regarded as args delmiter. What about tab '\t' ?
|
// only blank is regarded as args delmiter. What about tab '\t' ?
|
||||||
if (!args[0] || strcasecmp(args, "all") == 0) {
|
if (!args[0] || strcasecmp(args, "all") == 0) {
|
||||||
// print out values of all options
|
// print out values of all options
|
||||||
go_bottom_and_clear_to_eol();
|
|
||||||
printf("----------------------------------------\r\n");
|
|
||||||
#if ENABLE_FEATURE_VI_SETOPTS
|
#if ENABLE_FEATURE_VI_SETOPTS
|
||||||
if (!autoindent)
|
status_line_bold(
|
||||||
printf("no");
|
"%sautoindent "
|
||||||
printf("autoindent ");
|
"%sflash "
|
||||||
if (!err_method)
|
"%signorecase "
|
||||||
printf("no");
|
"%sshowmatch "
|
||||||
printf("flash ");
|
"tabstop=%u",
|
||||||
if (!ignorecase)
|
autoindent ? "" : "no",
|
||||||
printf("no");
|
err_method ? "" : "no",
|
||||||
printf("ignorecase ");
|
ignorecase ? "" : "no",
|
||||||
if (!showmatch)
|
showmatch ? "" : "no",
|
||||||
printf("no");
|
tabstop
|
||||||
printf("showmatch ");
|
);
|
||||||
printf("tabstop=%d ", tabstop);
|
|
||||||
#endif
|
#endif
|
||||||
printf("\r\n");
|
goto ret;
|
||||||
goto vc2;
|
|
||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_VI_SETOPTS
|
#if ENABLE_FEATURE_VI_SETOPTS
|
||||||
argp = args;
|
argp = args;
|
||||||
@ -1075,19 +1068,17 @@ static void colon(char *buf)
|
|||||||
if (strncmp(argp, "no", 2) == 0)
|
if (strncmp(argp, "no", 2) == 0)
|
||||||
i = 2; // ":set noautoindent"
|
i = 2; // ":set noautoindent"
|
||||||
setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT);
|
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, "ignorecase ", i, "ic", VI_IGNORECASE);
|
||||||
setops(argp, "showmatch ", i, "ic", VI_SHOWMATCH);
|
setops(argp, "showmatch " , i, "sm", VI_SHOWMATCH );
|
||||||
/* tabstopXXXX */
|
if (strncmp(argp + i, "tabstop=", 8) == 0) {
|
||||||
if (strncmp(argp + i, "tabstop=%d ", 7) == 0) {
|
int t = 0;
|
||||||
sscanf(strchr(argp + i, '='), "tabstop=%d" + 7, &ch);
|
sscanf(argp + i+8, "%u", &t);
|
||||||
if (ch > 0 && ch <= MAX_TABSTOP)
|
if (t > 0 && t <= MAX_TABSTOP)
|
||||||
tabstop = ch;
|
tabstop = t;
|
||||||
}
|
}
|
||||||
while (*argp && *argp != ' ')
|
argp = skip_non_whitespace(argp);
|
||||||
argp++; // skip to arg delimiter (i.e. blank)
|
argp = skip_whitespace(argp);
|
||||||
while (*argp && *argp == ' ')
|
|
||||||
argp++; // skip all delimiting blanks
|
|
||||||
}
|
}
|
||||||
#endif /* FEATURE_VI_SETOPTS */
|
#endif /* FEATURE_VI_SETOPTS */
|
||||||
#endif /* FEATURE_VI_SET */
|
#endif /* FEATURE_VI_SET */
|
||||||
@ -1159,7 +1150,7 @@ static void colon(char *buf)
|
|||||||
#if ENABLE_FEATURE_VI_READONLY
|
#if ENABLE_FEATURE_VI_READONLY
|
||||||
if (readonly_mode && !useforce) {
|
if (readonly_mode && !useforce) {
|
||||||
status_line_bold("\"%s\" File is read only", fn);
|
status_line_bold("\"%s\" File is read only", fn);
|
||||||
goto vc3;
|
goto ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// how many lines in text[]?
|
// how many lines in text[]?
|
||||||
@ -1196,9 +1187,6 @@ static void colon(char *buf)
|
|||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_VI_READONLY
|
|
||||||
vc3:;
|
|
||||||
#endif
|
|
||||||
#if ENABLE_FEATURE_VI_YANKMARK
|
#if ENABLE_FEATURE_VI_YANKMARK
|
||||||
} else if (strncmp(cmd, "yank", i) == 0) { // yank lines
|
} else if (strncmp(cmd, "yank", i) == 0) { // yank lines
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
@ -1214,7 +1202,7 @@ static void colon(char *buf)
|
|||||||
// cmd unknown
|
// cmd unknown
|
||||||
not_implemented(cmd);
|
not_implemented(cmd);
|
||||||
}
|
}
|
||||||
vc1:
|
ret:
|
||||||
dot = bound_dot(dot); // make sure "dot" is valid
|
dot = bound_dot(dot); // make sure "dot" is valid
|
||||||
return;
|
return;
|
||||||
#if ENABLE_FEATURE_VI_SEARCH
|
#if ENABLE_FEATURE_VI_SEARCH
|
||||||
|
Loading…
x
Reference in New Issue
Block a user