diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | Doc/Zsh/zle.yo | 14 | ||||
-rw-r--r-- | Src/Zle/zle_refresh.c | 16 |
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)) { |