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);