zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: completion list highlighting for suffix aliases
@ 2009-11-30 17:18 Peter Stephenson
  0 siblings, 0 replies; only message in thread
From: Peter Stephenson @ 2009-11-30 17:18 UTC (permalink / raw)
  To: Zsh hackers list

This adds the ability to highlight all files that have an associated suffix
alias.  Not that useful, since when you can actually use a suffix alias
they are highlighted by grouping, but it's a way of highlighting a lot of
"interesting" files in one go (without needing to specify highlighting
for individual suffixes).  Hence if you use zsh-mime-setup you get a
definition of "interesting" files for free.

Call me weird, but I also decided "filename" was a better variable name
for a filename than "n".

Index: Doc/Zsh/mod_complist.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/mod_complist.yo,v
retrieving revision 1.28
diff -u -r1.28 mod_complist.yo
--- Doc/Zsh/mod_complist.yo	1 Jul 2009 17:09:38 -0000	1.28
+++ Doc/Zsh/mod_complist.yo	30 Nov 2009 17:13:28 -0000
@@ -72,6 +72,10 @@
 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
 )
Index: Src/Zle/complist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/complist.c,v
retrieving revision 1.121
diff -u -r1.121 complist.c
--- Src/Zle/complist.c	1 Jul 2009 17:09:38 -0000	1.121
+++ Src/Zle/complist.c	30 Nov 2009 17:13:28 -0000
@@ -187,15 +187,16 @@
 #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 *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 @@
  * 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 @@
     }
 
     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;

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-11-30 17:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-11-30 17:18 PATCH: completion list highlighting for suffix aliases Peter Stephenson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).