[PATCH] Add `set -o tabcomplete' to /bin/sh.
YONETANI Tomokazu
y0netan1 at dragonflybsd.org
Sat Feb 14 05:37:20 PST 2009
When set, it binds <tab> to the libedit filename completion function.
Taken-From: NetBSD
---
bin/sh/histedit.c | 6 ++++++
bin/sh/options.h | 4 +++-
bin/sh/sh.1 | 10 ++++++++++
3 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c
index 797685a..b0a8a6b 100644
--- a/bin/sh/histedit.c
+++ b/bin/sh/histedit.c
@@ -67,6 +67,7 @@ History *hist; /* history cookie */
EditLine *el; /* editline cookie */
int displayhist;
static FILE *el_in, *el_out, *el_err;
+unsigned char _el_fn_complete(EditLine *, int);
STATIC char *fc_replace(const char *, char *, char *);
@@ -124,6 +125,9 @@ histedit(void)
if (hist)
el_set(el, EL_HIST, history, hist);
el_set(el, EL_PROMPT, getprompt);
+ el_set(el, EL_ADDFN, "rl-complete",
+ "ReadLine compatible completion function",
+ _el_fn_complete);
} else {
bad:
out2str("sh: can't initialize editing\n");
@@ -140,6 +144,8 @@ bad:
el_set(el, EL_EDITOR, "vi");
else if (Eflag)
el_set(el, EL_EDITOR, "emacs");
+ el_set(el, EL_BIND, "^I",
+ tabcomplete ? "rl-complete" : "ed-insert", NULL);
el_source(el, NULL);
}
} else {
diff --git a/bin/sh/options.h b/bin/sh/options.h
index 3ca1c99..c8ee216 100644
--- a/bin/sh/options.h
+++ b/bin/sh/options.h
@@ -67,8 +67,9 @@ struct shparam {
#define privileged optlist[15].val
#define Tflag optlist[16].val
#define Pflag optlist[17].val
+#define tabcomplete optlist[18].val
-#define NOPTS 18
+#define NOPTS 19
struct optent {
const char *name;
@@ -96,6 +97,7 @@ struct optent optlist[NOPTS] = {
{ "privileged", 'p', 0 },
{ "trapsasync", 'T', 0 },
{ "physical", 'P', 0 },
+ { "tabcomplete", '\0', 0 },
};
#else
extern struct optent optlist[NOPTS];
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
index 19ca003..062c26e 100644
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -315,6 +315,12 @@ Write each command
variable)
to standard error before it is executed.
Useful for debugging.
+.It "\ \ " Em tabcomplete
+Enables filename completion in the command line editor.
+Typing a tab character will extend the current input word to match a
+filename.
+If more than one filename matches it is only extended to be the common prefix.
+Typing a second tab character will list all the matching names.
.El
.Pp
The
@@ -2279,3 +2285,7 @@ was originally written by
The
.Nm
utility does not recognize multibyte characters.
+.Pp
+The characters generated by filename completion should probably be quoted
+to ensure that the filename is still valid after the input line has been
+processed.
--
1.6.0.6
--k1lZvvs/B4yU6o8G--
More information about the Submit
mailing list