From 72ec8e997beac9551685b7939dda34b024a41d29 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 21 Jan 2022 21:48:05 -0500 Subject: dash: 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. --- src/histedit.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/histedit.c') diff --git a/src/histedit.c b/src/histedit.c index f5c90ab..3525e02 100644 --- a/src/histedit.c +++ b/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; -- cgit 1.4.1