summary refs log tree commit diff
path: root/bin/dash
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-12-22 18:45:30 -0500
committerJune McEnroe <june@causal.agency>2020-12-22 19:28:22 -0500
commitf5914bfec1ae91dbd0c8f8882bf5483496e91e7d (patch)
tree429d853bed90fb633d97777be295dce890bd02ec /bin/dash
parentBuild with libedit by default (diff)
downloadsrc-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 'bin/dash')
-rw-r--r--bin/dash/configure.ac1
-rw-r--r--bin/dash/src/histedit.c8
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;
e71c62ca07f6648b&follow=1'>cache: don't leave cache_slot fields uninitializedJohn Keeping 2014-01-10filter: split filter functions into their own fileJason A. Donenfeld 2014-01-10filter: make exit status localJason A. Donenfeld 2014-01-10parsing: fix header typoJason A. Donenfeld 2014-01-10cgit.c: Fix comment on bit mask hackLukas Fleischer 2014-01-10cgit.c: Use "else" for mutually exclusive branchesLukas Fleischer 2014-01-10ui-snapshot.c: Do not reinvent suffixcmp()Lukas Fleischer 2014-01-10Refactor cgit_parse_snapshots_mask()Lukas Fleischer 2014-01-10Disallow use of undocumented snapshot delimitersLukas Fleischer 2014-01-10Replace most uses of strncmp() with prefixcmp()Lukas Fleischer 2014-01-09README: Fix dependenciesLukas Fleischer 2014-01-08README: Spelling and formatting fixesLukas Fleischer 2014-01-08Fix UTF-8 with syntax-highlighting.pyPřemysl Janouch 2014-01-08Add a suggestion to the manpagePřemysl Janouch 2014-01-08Fix the example configurationPřemysl Janouch 2014-01-08Fix about-formatting.shPřemysl Janouch 2014-01-08Fix some spelling errorsPřemysl Janouch 2014-01-08filters: highlight.sh: add css comments for highlight 2.6 and 3.8Ferry Huberts