summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Doc/Zsh/zle.yo14
-rw-r--r--Src/Zle/zle_refresh.c16
3 files changed, 35 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index e6fe30cf0..561b065e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 2009-12-05  Peter Stephenson  <p.w.stephenson@ntlworld.com>
 
-	* frank: 27450: b/Completion/Unix/Command/_tmux: another
+	* 27466: Doc/Zsh/zle.yo: document 27453.
+
+	* Mikael: 27453: Src/Zle/zle_refresh.c: highlighting
+	of removable completions suffixes.
+
+	* Frank: 27450: b/Completion/Unix/Command/_tmux: another
 	update.
 
 2009-12-05  Clint Adams  <clint@zsh.org>
@@ -12446,5 +12451,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4834 $
+* $Revision: 1.4835 $
 *****************************************************
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index 224023752..91c13a563 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -2163,6 +2163,17 @@ Individual characters that have no direct printable
 representation but are shown in a special manner by the line editor.
 These characters are described below.
 )
+cindex(completion removable suffix, highlighting)
+cindex(suffix, highlighting removable, in completion)
+cindex(removable suffix, highlighting in completino)
+item(tt(suffix))(
+This context is used in completion for characters that are
+marked as suffixes that will be removed if the completion ends
+at that point, the most obvious example being a slash (tt(/)) after
+a directory name.  Note that suffix removal is configurable; the
+circumstances under which the suffix will be removed may differ
+for different completions.
+)
 enditem()
 
 tt(zle_highlight) may contain additional fields for controlling how
@@ -2235,6 +2246,7 @@ not usually affected by the bold attribute.
 )
 item(tt(bold))(
 The characters in the given context are shown in a bold font.
+Not all terminals distinguish bold fonts.
 )
 item(tt(standout))(
 The characters in the given context are shown in the terminal's standout
@@ -2280,7 +2292,7 @@ If tt(zle_highlight) is not set or no value applies to a particular
 context, the defaults applied are equivalent to
 
 example(zle_highlight=LPAR()region:standout special:standout
-isearch:underline+RPAR())
+suffix:bold isearch:underline+RPAR())
 
 i.e. both the region and special characters are shown in standout mode.
 
diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index c61abb48f..8604317f3 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -247,8 +247,9 @@ struct region_highlight *region_highlights;
  * for the first few elements of region_highlights.
  * 0: region between point and mark
  * 1: isearch region
+ * 2: suffix
  */
-#define N_SPECIAL_HIGHLIGHTS	(2)
+#define N_SPECIAL_HIGHLIGHTS	(3)
 /*
  * Number of elements in region_highlights.
  * This includes the special elements above.
@@ -340,6 +341,7 @@ zle_set_highlight(void)
     int special_atr_on_set = 0;
     int region_atr_on_set = 0;
     int isearch_atr_on_set = 0;
+    int suffix_atr_on_set = 0;
     struct region_highlight *rhp;
 
     special_atr_on = default_atr_on = 0;
@@ -373,6 +375,9 @@ zle_set_highlight(void)
 	    } else if (strpfx("isearch:", *atrs)) {
 		match_highlight(*atrs + 8, &(region_highlights[1].atr));
 		isearch_atr_on_set = 1;
+	    } else if (strpfx("suffix:", *atrs)) {
+		match_highlight(*atrs + 7, &(region_highlights[2].atr));
+		suffix_atr_on_set = 1;
 	    }
 	}
     }
@@ -384,6 +389,8 @@ zle_set_highlight(void)
 	region_highlights->atr = TXTSTANDOUT;
     if (!isearch_atr_on_set)
 	region_highlights[1].atr = TXTUNDERLINE;
+    if (!suffix_atr_on_set)
+	region_highlights[2].atr = TXTBOLDFACE;
 
     allocate_colour_buffer();
 }
@@ -1060,6 +1067,13 @@ zrefresh(void)
     } else {
 	region_highlights[1].start = region_highlights[1].end = -1;
     }
+    /* check for an active completion suffix */
+    if (suffixnoinslen) {
+	region_highlights[2].start = zlecs - suffixnoinslen;
+	region_highlights[2].end = zlecs;
+    } else {
+	region_highlights[2].start = region_highlights[2].end = -1;
+    }
 
     if (clearlist && listshown > 0) {
 	if (tccan(TCCLEAREOD)) {