diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Doc/Zsh/mod_complist.yo | 4 | ||||
-rw-r--r-- | Src/Zle/complist.c | 30 |
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; |