Module Name:    src
Committed By:   christos
Date:           Sun Jan 12 18:42:41 UTC 2020

Modified Files:
        src/bin/csh: set.c

Log Message:
Add file completion.


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/bin/csh/set.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/csh/set.c
diff -u src/bin/csh/set.c:1.36 src/bin/csh/set.c:1.37
--- src/bin/csh/set.c:1.36	Sat Jan 11 22:50:30 2020
+++ src/bin/csh/set.c	Sun Jan 12 13:42:41 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: set.c,v 1.36 2020/01/12 03:50:30 christos Exp $ */
+/* $NetBSD: set.c,v 1.37 2020/01/12 18:42:41 christos Exp $ */
 
 /*-
  * Copyright (c) 1980, 1991, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)set.c	8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: set.c,v 1.36 2020/01/12 03:50:30 christos Exp $");
+__RCSID("$NetBSD: set.c,v 1.37 2020/01/12 18:42:41 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -43,9 +43,7 @@ __RCSID("$NetBSD: set.c,v 1.36 2020/01/1
 #include <stdarg.h>
 #include <stdlib.h>
 
-#ifndef SHORT_STRINGS
 #include <string.h>
-#endif /* SHORT_STRINGS */
 
 #include "csh.h"
 #include "extern.h"
@@ -61,6 +59,41 @@ static void unsetv1(struct varent *);
 static void exportpath(Char **);
 static void balance(struct varent *, int, int);
 
+#ifdef EDIT
+static const char *
+alias_text(void *dummy __unused, const char *name)
+{
+	static char *buf;
+	struct varent *vp;
+	Char **av;
+	char *p;
+	size_t len;
+
+	vp = adrof1(str2short(name), &aliases);
+	if (vp == NULL)
+	    return NULL;
+
+	len = 0;
+	for (av = vp->vec; *av; av++) {
+	    len += strlen(vis_str(*av));
+	    if (av[1])
+		len++;
+	}
+	len++;
+	free(buf);
+	p = buf = xmalloc(len);
+	for (av = vp->vec; *av; av++) {
+	    const char *s = vis_str(*av);
+	    while ((*p++ = *s++) != '\0')
+		continue;
+	    if (av[1])
+		*p++ = ' ';
+	}
+	*p = '\0';
+	return buf;
+}
+#endif
+
 /*
  * C Shell
  */
@@ -124,6 +157,11 @@ update_vars(Char *vp)
 	    SHIN, SHOUT, SHERR);
 	el_set(el, EL_EDITOR, *vn ? short2str(vn) : "emacs");
 	el_set(el, EL_PROMPT, printpromptstr);
+	el_set(el, EL_ALIAS_TEXT, alias_text, NULL);
+	el_set(el, EL_ADDFN, "rl-complete",
+	    "ReadLine compatible completion function", _el_fn_complete);
+	el_set(el, EL_BIND, "^I", adrof(STRfilec) ? "rl-complete" : "ed-insert",
+	    NULL);
 	hi = history_init();
 	history(hi, &ev, H_SETSIZE, getn(value(STRhistory)));
 	loadhist(Histlist.Hnext);

Reply via email to