mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-20 11:51:24 +01:00
27441: add "sa" for suffix alias completion highlighting
This commit is contained in:
parent
1d5a54270b
commit
c969dea22f
3 changed files with 32 additions and 7 deletions
|
@ -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 $
|
||||
*****************************************************
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue