aboutsummaryrefslogtreecommitdiff
path: root/vis-cmds.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-11-15 13:56:35 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-01-13 23:03:49 +0100
commit6d86dc94cffee3fcda48f634fb05556cb861b0b5 (patch)
tree6d39cde4af5c4f0de02080046ced36fdfe1f402b /vis-cmds.c
parent5d54271403b1a90ed7ef81894ea0ff91d7a8c5f6 (diff)
downloadvis-6d86dc94cffee3fcda48f634fb05556cb861b0b5.tar.gz
vis-6d86dc94cffee3fcda48f634fb05556cb861b0b5.tar.xz
Implement command/search prompt history as a regular file
Diffstat (limited to 'vis-cmds.c')
-rw-r--r--vis-cmds.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/vis-cmds.c b/vis-cmds.c
index 065b9d3..8cc704b 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -443,13 +443,21 @@ static bool cmd_edit(Vis *vis, Filerange *range, enum CmdOpt opt, const char *ar
return vis->win != oldwin;
}
+static bool has_windows(Vis *vis) {
+ for (Win *win = vis->windows; win; win = win->next) {
+ if (!win->file->internal)
+ return true;
+ }
+ return false;
+}
+
static bool cmd_quit(Vis *vis, Filerange *range, enum CmdOpt opt, const char *argv[]) {
if (!(opt & CMD_OPT_FORCE) && !is_view_closeable(vis->win)) {
info_unsaved_changes(vis);
return false;
}
vis_window_close(vis->win);
- if (!vis->windows)
+ if (!has_windows(vis))
vis_exit(vis, EXIT_SUCCESS);
return true;
}
@@ -473,7 +481,7 @@ static bool cmd_bdelete(Vis *vis, Filerange *range, enum CmdOpt opt, const char
if (win->file->text == txt)
vis_window_close(win);
}
- if (!vis->windows)
+ if (!has_windows(vis))
vis_exit(vis, EXIT_SUCCESS);
return true;
}
@@ -484,7 +492,7 @@ static bool cmd_qall(Vis *vis, Filerange *range, enum CmdOpt opt, const char *ar
if (!text_modified(vis->win->file->text) || (opt & CMD_OPT_FORCE))
vis_window_close(win);
}
- if (!vis->windows)
+ if (!has_windows(vis))
vis_exit(vis, EXIT_SUCCESS);
else
info_unsaved_changes(vis);
@@ -1097,6 +1105,8 @@ static Command *lookup_cmd(Vis *vis, const char *name) {
bool vis_cmd(Vis *vis, const char *cmdline) {
enum CmdOpt opt = CMD_OPT_NONE;
+ while (*cmdline == ':')
+ cmdline++;
size_t len = strlen(cmdline);
char *line = malloc(len+2);
if (!line)