diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-09-25 10:57:01 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-09-25 11:53:12 +0200 |
| commit | c3bbd835fca0ba184f191b270d9aebfc2466be82 (patch) | |
| tree | 956502573e1e83d7bf39ec04c11cb8c1131a413c /main.c | |
| parent | d3798ba58d3f8ebef9a024c8d538d7bebb0b6931 (diff) | |
| download | vis-c3bbd835fca0ba184f191b270d9aebfc2466be82.tar.gz vis-c3bbd835fca0ba184f191b270d9aebfc2466be82.tar.xz | |
vis: move file name and word completion logic to a shell script
The shell script should be reviewed for quoting issues, currently
it allows command injections as in:
$ vis-complete "'; rm -f some-file; echo "
However it is intended for interactive usage and from within vis
it is only ever called with a valid completion prefix.
The file name completion logic now supports nested directories.
Close #347
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -2131,8 +2131,7 @@ static const char *complete_word(Vis *vis, const char *keys, const Arg *arg) { Buffer cmd; buffer_init(&cmd); char *prefix = get_completion_prefix(vis); - if (prefix && buffer_printf(&cmd, "tr -cs '[:alnum:]_' '\n' | grep '^%s.' | sort -u | " - VIS_MENU " -b | sed 's/^%s//' | tr -d '\n'", prefix, prefix)) { + if (prefix && buffer_printf(&cmd, VIS_COMPLETE " --word '%s'", prefix)) { Filerange all = text_range_new(0, text_size(txt)); insert_dialog_selection(vis, &all, (const char*[]){ buffer_content0(&cmd), NULL }); } @@ -2145,8 +2144,7 @@ static const char *complete_filename(Vis *vis, const char *keys, const Arg *arg) Buffer cmd; buffer_init(&cmd); char *prefix = get_completion_prefix(vis); - if (prefix && buffer_printf(&cmd, "ls -1 | grep '^%s.' | sort | " - VIS_MENU " -b | sed 's/^%s//' | tr -d '\n'", prefix, prefix)) { + if (prefix && buffer_printf(&cmd, VIS_COMPLETE " --file '%s'", prefix)) { Filerange empty = text_range_new(0, 0); insert_dialog_selection(vis, &empty, (const char*[]){ buffer_content0(&cmd), NULL }); } |
