summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Doc/Zsh/mod_complist.yo4
-rw-r--r--Src/Zle/complist.c30
3 files changed, 32 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 29599a59f..37f83e653 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2009-11-30 Peter Stephenson <pws@csr.com>
+ * 27441: Doc/Zsh/mod_complist.yo, Src/Zle/complist.c: add "sa"
+ highlight code for suffix aliases.
+
* Richard Hartmann: 27440: Src/Modules/cap.c, Src/Modules/zftp.c:
typos in warnings.
@@ -12401,5 +12404,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4825 $
+* $Revision: 1.4826 $
*****************************************************
diff --git a/Doc/Zsh/mod_complist.yo b/Doc/Zsh/mod_complist.yo
index 0599b4738..ce9eb48d9 100644
--- a/Doc/Zsh/mod_complist.yo
+++ b/Doc/Zsh/mod_complist.yo
@@ -72,6 +72,10 @@ for world writable directories with sticky bit set
item(tt(ow 34;43))(
for world writable directories without sticky bit set
)
+item(tt(sa) var(none))(
+for files with an associated suffix alias; this is only tested
+after specific suffixes, as described below
+)
item(tt(st 37;44))(
for directories with sticky bit set but not world writable
)
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
index da7a8ce08..bac072ec3 100644
--- a/Src/Zle/complist.c
+++ b/Src/Zle/complist.c
@@ -187,15 +187,16 @@ static Keymap mskeymap, lskeymap;
#define COL_MA 21
#define COL_HI 22
#define COL_DU 23
+#define COL_SA 24
-#define NUM_COLS 24
+#define NUM_COLS 25
/* Names of the terminal strings. */
static char *colnames[] = {
"no", "fi", "di", "ln", "pi", "so", "bd", "cd", "or", "mi",
"su", "sg", "tw", "ow", "st", "ex",
- "lc", "rc", "ec", "tc", "sp", "ma", "hi", "du", NULL
+ "lc", "rc", "ec", "tc", "sp", "ma", "hi", "du", "sa", NULL
};
/* Default values. */
@@ -203,7 +204,7 @@ static char *colnames[] = {
static char *defcols[] = {
"0", "0", "1;31", "1;36", "33", "1;35", "1;33", "1;33", NULL, NULL,
"37;41", "30;43", "30;42", "34;42", "37;44", "1;32",
- "\033[", "m", NULL, "0", "0", "7", NULL, NULL
+ "\033[", "m", NULL, "0", "0", "7", NULL, NULL, "0"
};
/* This describes a terminal string for a file type. */
@@ -872,17 +873,18 @@ putmatchcol(char *group, char *n)
* file modes. */
static int
-putfilecol(char *group, char *n, mode_t m, int special)
+putfilecol(char *group, char *filename, mode_t m, int special)
{
int colour = -1;
Extcol ec;
Patcol pc;
+ int len;
nrefs = MAX_POS - 1;
for (pc = mcolors.pats; pc; pc = pc->next)
if ((!pc->prog || !group || pattry(pc->prog, group)) &&
- pattryrefs(pc->pat, n, -1, -1, 0, &nrefs, begpos, endpos)) {
+ pattryrefs(pc->pat, filename, -1, -1, 0, &nrefs, begpos, endpos)) {
if (pc->cols[1]) {
patcols = pc->cols;
@@ -928,13 +930,29 @@ putfilecol(char *group, char *n, mode_t m, int special)
}
for (ec = mcolors.exts; ec; ec = ec->next)
- if (strsfx(ec->ext, n) &&
+ if (strsfx(ec->ext, filename) &&
(!ec->prog || !group || pattry(ec->prog, group))) {
zlrputs(ec->col);
return 0;
}
+ /* Check for suffix alias */
+ len = strlen(filename);
+ /* shortest valid suffix format is a.b */
+ if (len > 2) {
+ char *suf = filename + len - 1;
+ while (suf > filename+1) {
+ if (suf[-1] == '.') {
+ if (sufaliastab->getnode(sufaliastab, suf)) {
+ zcputs(group, COL_SA);
+ return 0;
+ }
+ break;
+ }
+ suf--;
+ }
+ }
zcputs(group, COL_FI);
return 0;