diff options
author | June McEnroe <june@causal.agency> | 2020-12-22 18:45:30 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-12-22 19:28:22 -0500 |
commit | f5914bfec1ae91dbd0c8f8882bf5483496e91e7d (patch) | |
tree | 429d853bed90fb633d97777be295dce890bd02ec /bin/dash | |
parent | Build with libedit by default (diff) | |
download | src-f5914bfec1ae91dbd0c8f8882bf5483496e91e7d.tar.gz src-f5914bfec1ae91dbd0c8f8882bf5483496e91e7d.zip |
Bind libedit's secret filename completion function
Check if the FreeBSD (and by extension macOS) _el_fn_sh_complete version of the function exists, which does shell escaping of completed filenames before _el_fn_complete learned to. Tab is bound after calling el_set() and el_source() since the default bindings set tab to something else, and it should always be filename completion in the shell.
Diffstat (limited to '')
-rw-r--r-- | bin/dash/configure.ac | 1 | ||||
-rw-r--r-- | bin/dash/src/histedit.c | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/bin/dash/configure.ac b/bin/dash/configure.ac index 43e71efd..1edc45b8 100644 --- a/bin/dash/configure.ac +++ b/bin/dash/configure.ac @@ -183,6 +183,7 @@ if test "$use_libedit" != "yes"; then AC_DEFINE([SMALL], 1, [Define if you build with -DSMALL]) else export LIBS="$LIBS -ledit" + AC_CHECK_FUNCS(_el_fn_sh_complete) fi AC_ARG_ENABLE(lineno, AS_HELP_STRING(--disable-lineno, \ [Disable LINENO support])) diff --git a/bin/dash/src/histedit.c b/bin/dash/src/histedit.c index f5c90aba..3525e028 100644 --- a/bin/dash/src/histedit.c +++ b/bin/dash/src/histedit.c @@ -116,6 +116,13 @@ histedit(void) if (hist) el_set(el, EL_HIST, history, hist); el_set(el, EL_PROMPT, getprompt); +#ifdef HAVE__EL_FN_SH_COMPLETE + el_set(el, EL_ADDFN, "sh-complete", "Filename completion", + _el_fn_sh_complete); +#else + el_set(el, EL_ADDFN, "sh-complete", "Filename completion", + _el_fn_complete); +#endif } else { bad: out2str("sh: can't initialize editing\n"); @@ -133,6 +140,7 @@ bad: else if (Eflag) el_set(el, EL_EDITOR, "emacs"); el_source(el, NULL); + el_set(el, EL_BIND, "^I", "sh-complete", NULL); } } else { INTOFF; |