From acf067ec992e78e370f1101ba87d508774c32ed5 Mon Sep 17 00:00:00 2001 From: christos Date: Fri, 31 Jul 2015 08:57:13 +0000 Subject: [PATCH 1/5] typo in comment (lukem) --- sh.proc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh.proc.c b/sh.proc.c index aa2ee58..76eca3b 100644 --- a/sh.proc.c +++ b/sh.proc.c @@ -1003,7 +1003,7 @@ pprint(struct process *pp, int flag) tp = pp; status = reason = -1; jobflags = 0; - haderr = 1; /* Print statuc to stderr */ + haderr = 1; /* Print status to stderr */ do { #ifdef BACKPIPE /* -- 2.5.5 From e8eb0eba59a96e90e2a63952aaf7092b5e5569d2 Mon Sep 17 00:00:00 2001 From: christos Date: Fri, 31 Jul 2015 08:58:37 +0000 Subject: [PATCH 2/5] From lukem: run-fg-editor: don't prefix match $EDITOR, $VISUAL Fix comparison of $EDITOR or $VISUAL against names of background processes so that it doesn't just prefix match. Previously, if EDITOR=vi it would match any command starting with "vi". Move check for backgrounded jobs earlier to avoid unnecessary work. --- tc.func.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tc.func.c b/tc.func.c index 5a909d6..7ed32cf 100644 --- a/tc.func.c +++ b/tc.func.c @@ -520,6 +520,9 @@ find_stop_ed(void) struct varent *varp; Char **vv; + if (pcurrent == NULL) /* see if we have any jobs */ + return NULL; /* nope */ + if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ if ((p = strrchr(ep, '/')) != NULL) /* if it has a path */ ep = p + 1; /* then we want only the last part */ @@ -539,9 +542,6 @@ find_stop_ed(void) for (epl = 0; ep[epl] && !isspace((unsigned char)ep[epl]); epl++) continue; - if (pcurrent == NULL) /* see if we have any jobs */ - return NULL; /* nope */ - if ((varp = adrof(STReditors)) != NULL) vv = varp->vec; else @@ -572,9 +572,13 @@ find_stop_ed(void) else cp = p; /* else we get all of it */ - /* if we find either in the current name, fg it */ - if (strncmp(ep, cp, epl) == 0 || - strncmp(vp, cp, vpl) == 0 || findvv(vv, cp)) { + /* + * If we find the current name as $EDITOR or $VISUAL, + * or in $editors array, fg it + */ + if ((strncmp(ep, cp, epl) == 0 && cp[epl] == '\0') || + (strncmp(vp, cp, vpl) == 0 && cp[vpl] == '\0') || + findvv(vv, cp)) { /* * If there is a choice, then choose the current process if -- 2.5.5 From 39822a2b0d29d2314da10c7a94f7ad0cdaf80509 Mon Sep 17 00:00:00 2001 From: christos Date: Fri, 31 Jul 2015 08:59:53 +0000 Subject: [PATCH 3/5] Rework run-fg-editor to use $editors exclusively if its set, and ignore the use of $EDITOR (default "ed") and $VISUAL (default "vi"). If $editors is not set, fallback to the previous use of $EDITOR and $VISUAL. (from lukem) --- tc.func.c | 55 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/tc.func.c b/tc.func.c index 7ed32cf..9af4858 100644 --- a/tc.func.c +++ b/tc.func.c @@ -513,9 +513,9 @@ struct process * find_stop_ed(void) { struct process *pp, *retp; - const char *ep, *vp; + const char *ep = NULL, *vp = NULL; char *cp, *p; - size_t epl, vpl; + size_t epl = 0, vpl = 0; int pstatus; struct varent *varp; Char **vv; @@ -523,30 +523,32 @@ find_stop_ed(void) if (pcurrent == NULL) /* see if we have any jobs */ return NULL; /* nope */ - if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ - if ((p = strrchr(ep, '/')) != NULL) /* if it has a path */ - ep = p + 1; /* then we want only the last part */ - } - else - ep = "ed"; - - if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ - if ((p = strrchr(vp, '/')) != NULL) /* and it has a path */ - vp = p + 1; /* then we want only the last part */ - } - else - vp = "vi"; - - for (vpl = 0; vp[vpl] && !isspace((unsigned char)vp[vpl]); vpl++) - continue; - for (epl = 0; ep[epl] && !isspace((unsigned char)ep[epl]); epl++) - continue; - if ((varp = adrof(STReditors)) != NULL) vv = varp->vec; else vv = NULL; + if (! vv) { + if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ + if ((p = strrchr(ep, '/')) != NULL) /* if it has a path */ + ep = p + 1; /* then we want only the last part */ + } + else + ep = "ed"; + + if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ + if ((p = strrchr(vp, '/')) != NULL) /* and it has a path */ + vp = p + 1; /* then we want only the last part */ + } + else + vp = "vi"; + + for (vpl = 0; vp[vpl] && !isspace((unsigned char)vp[vpl]); vpl++) + continue; + for (epl = 0; ep[epl] && !isspace((unsigned char)ep[epl]); epl++) + continue; + } + retp = NULL; for (pp = proclist.p_next; pp; pp = pp->p_next) if (pp->p_procid == pp->p_jobid) { @@ -573,13 +575,12 @@ find_stop_ed(void) cp = p; /* else we get all of it */ /* - * If we find the current name as $EDITOR or $VISUAL, - * or in $editors array, fg it + * If we find the current name in the $editors array (if set) + * or as $EDITOR or $VISUAL (if $editors not set), fg it. */ - if ((strncmp(ep, cp, epl) == 0 && cp[epl] == '\0') || - (strncmp(vp, cp, vpl) == 0 && cp[vpl] == '\0') || - findvv(vv, cp)) { - + if ((vv && findvv(vv, cp)) || + (epl && strncmp(ep, cp, epl) == 0 && cp[epl] == '\0') || + (vpl && strncmp(vp, cp, vpl) == 0 && cp[vpl] == '\0')) { /* * If there is a choice, then choose the current process if * available, or the previous process otherwise, or else -- 2.5.5 From 6ca81f5b7730071db2a414167d3782ce955fb76b Mon Sep 17 00:00:00 2001 From: christos Date: Fri, 31 Jul 2015 09:00:14 +0000 Subject: [PATCH 4/5] Document the $editors support and this new behaviour. (It was originally added in tcsh 6.18.03 without notice). (from lukem) --- tcsh.man | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tcsh.man b/tcsh.man index 4fa59d2..1ad5529 100644 --- a/tcsh.man +++ b/tcsh.man @@ -77,7 +77,7 @@ .\" used here if you can. In particular, please don't use nroff commands .\" which aren't already used herein. .\" -.TH TCSH 1 "21 May 2015" "Astron 6.19.00" +.TH TCSH 1 "31 July 2015" "Astron 6.19.00" .SH NAME tcsh \- C shell with file name completion and command line editing .SH SYNOPSIS @@ -723,9 +723,13 @@ Toggles between input and overwrite modes. .TP 8 .B run-fg-editor \fR(M-^Z) Saves the current input line and -looks for a stopped job with a name equal to the last component of the -file name part of the \fBEDITOR\fR or \fBVISUAL\fR environment variables, -or, if neither is set, `ed' or `vi'. +looks for a stopped job where the file name portion of its first word +is found in the \fBeditors\fR shell variable. +If \fBeditors\fR is not set, then the file name portion of the +\fBEDITOR\fR environment variable (`ed' if unset) +and the +\fBVISUAL\fR environment variable (`vi' if unset) +will be used. If such a job is found, it is restarted as if `fg %\fIjob\fR' had been typed. This is used to toggle back and forth between an editor and the shell easily. Some people bind this command to `^Z' so they @@ -3884,6 +3888,11 @@ systems. If set, the command-line editor is used. Set by default in interactive shells. .TP 8 +.B editors \fR(+) +A list of command names for the \fIrun-fg-editor\fR editor command to match. +If not set, the \fBEDITOR\fR (`ed' if unset) and \fBVISUAL\fR (`vi' if unset) +environment variables will be used instead. +.TP 8 .B ellipsis \fR(+) If set, the `%c'/`%.' and `%C' prompt sequences (see the \fBprompt\fR shell variable) indicate skipped directories with an ellipsis (`...') @@ -4783,8 +4792,9 @@ If set, the shell does not set \fBautologout\fR (q.v.). .TP 8 .B EDITOR The pathname to a default editor. -See also the \fBVISUAL\fR environment variable -and the \fIrun-fg-editor\fR editor command. +Used by the \fIrun-fg-editor\fR editor command if the +the \fBeditors\fR shell variable is unset. +See also the \fBVISUAL\fR environment variable. .TP 8 .B GROUP \fR(+) Equivalent to the \fBgroup\fR shell variable. @@ -5020,8 +5030,9 @@ The vendor, as determined at compile time. .TP 8 .B VISUAL The pathname to a default full-screen editor. -See also the \fBEDITOR\fR environment variable -and the \fIrun-fg-editor\fR editor command. +Used by the \fIrun-fg-editor\fR editor command if the +the \fBeditors\fR shell variable is unset. +See also the \fBEDITOR\fR environment variable. .SH FILES .PD 0 .TP 16 -- 2.5.5 From a16fbf87a3459c7305755aa301d7e04fa806d2ec Mon Sep 17 00:00:00 2001 From: christos Date: Fri, 31 Jul 2015 09:01:17 +0000 Subject: [PATCH 5/5] mention run-fg-editor fixes --- Fixes | 1 + 1 file changed, 1 insertion(+) diff --git a/Fixes b/Fixes index 07afe71..e58d879 100644 --- a/Fixes +++ b/Fixes @@ -1,3 +1,4 @@ + 4. run-fg-editor improvements and documentation (Luke Mewburn) 3. Fix parsing of 'if (cond)then' (Fridolin Pokorny) 2. PR/437: Fix handling of invalid unicode characters. 1. PR/451: Fix error messages containing %c to be always '%c' -- 2.5.5