diff --git a/tcsh-6.19.00-010-fix-editor-and-visual-variables-and-its-behaviour.patch b/tcsh-6.19.00-010-fix-editor-and-visual-variables-and-its-behaviour.patch new file mode 100644 index 0000000..a386780 --- /dev/null +++ b/tcsh-6.19.00-010-fix-editor-and-visual-variables-and-its-behaviour.patch @@ -0,0 +1,290 @@ +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 + diff --git a/tcsh.spec b/tcsh.spec index f94cef3..ba9730e 100644 --- a/tcsh.spec +++ b/tcsh.spec @@ -38,6 +38,7 @@ Patch006: tcsh-6.19.00-006-_SIGWINCH-added.patch Patch007: tcsh-6.19.00-007-fix-handling-of-invalid-unicode-characters.patch Patch008: tcsh-6.19.00-008-fix-ln-1-completion.patch Patch009: tcsh-6.19.00-009-fix-parsing-of-if-statement.patch +Patch010: tcsh-6.19.00-010-fix-editor-and-visual-variables-and-its-behaviour.patch # Downstream patches -- these should be always included when doing rebase: @@ -168,6 +169,7 @@ fi tcsh-6.19.00-007-fix-handling-of-invalid-unicode-characters.patch tcsh-6.19.00-008-fix-ln-1-completion.patch tcsh-6.19.00-009-fix-parsing-of-if-statement.patch + tcsh-6.19.00-010-fix-editor-and-visual-variables-and-its-behaviour.patch * Thu Apr 21 2016 David Kaspar [Dee'Kej] - 6.19.00-6 - Drop tcsh-6.15.00-closem.patch - issue not reproducible, patch not accepted by upstream