This is a stable release, featuring bugfixes and minor improvements.
(none)
isearch
and suffix
$zle_highlight
settings.
(79e4d3d12405, 15db71abd0cc, b56ee542d619; requires zsh 5.3 for $ISEARCHMATCH_ACTIVE
/ $SUFFIX_ACTIVE
support)Possible history expansions in double-quoted strings.
(76ea9e1df3
)
Mismatched if
/then
/elif
/else
/fi
.
(73cb832702
)
A comment line followed by a non-comment line.
(#385, 9396ad5c5f
)
An unquoted $*
(expands to the positional parameters).
(237f89ad62
)
history-incremental-pattern-search-backward under zsh 5.3.1.
(#407, #415, 462779629a
)
(none)
ALIAS_FUNC_DEF
option for zsh 5.4 compatibility.
(9523d6d49c
)docs: Added before/after screenshots. (cd9ec14a65ec..b7e277106b49)
docs: Link Fedora package.
(3d74aa47e4a7, 5feed23962
)
docs: Link FreeBSD port.
(626c034c68
)
docs: Link OpenSUSE Build Service packages
(#419, dea1fedc73
)
Prevent user-defined aliases from taking effect in z-sy-h's own code.
(#390, 2dce602727d7, 8d5afe47f774; and #392, #395, b8fa1b9dc9
)
docs: Update zplug installation instructions.
(#399, 4f49c4a35f
)
Improve "unhandled ZLE widget 'foo'" error message.
(#409, be083d7f37
)
Fix printing of "failed loading highlighters" error message.
(#426, ad522a0914
)
We thank Sebastian Gniazdowski and "m0viefreak" for significant contributions in this area.
Optimize string operations in the main
(default) highlighter.
(#372/3cb58fd7d7b9, 02229ebd6328, ef4bfe5bcc14, #372/c6b6513ac0d6, #374/15461e7d21c3)
Command word highlighting: Use the zsh/parameter
module to avoid forks.
Memoize (cache) the results.
(#298, 3ce01076b521, 2f18ba64e397, 12b879caf7a6; #320, 3b67e656bf
)
Avoid forks in the driver and in the root
highlighter.
(b9112aec798a, 38c8fbea2d
)
pkexec
(a precommand).
(#248, 4f3910cbba
)
Aliases that cannot be defined normally nor invoked normally (highlighted as an error).
(#263 (in part), 28932316cc
)
Path separators (/
) — the default behaviour remains to highlight path separators
and path components the same way.
(#136, #260, 6cd39e7c70d3, 9a934d291e7c, f3d3aaa00c
)
Assignments to individual positional arguments (42=foo
to assign to $42
).
(f4036a09ce
)
Linewise region (the visual-line-mode
widget, bound to V
in zsh's vi
keymap).
(#267, a7a7f8b42280, ee07588cfd
)
Command-lines recalled by isearch
mode; requires zsh≥5.3.
(#261 (in part); #257; 4ad311ec0a
)
Command-lines whilst the IGNORE_BRACES
or IGNORE_CLOSE_BRACES
option is in effect.
(a8a6384356af, 02807f1826
)
Mismatched parentheses and braces (in the main
highlighter).
(51b9d79c3bb6, 2fabf7ca64b7, a4196eda5e6f, and others)
Mismatched do
/done
keywords.
(b2733a64da
)
Mismatched foreach
/end
keywords.
(#96, 2bb8f0703d
)
In Bourne-style function definitions, when the MULTI_FUNC_DEF
option is set
(which is the default), highlight the first word in the function body as
a command word: f() { g "$@" }
.
(6f91850a01
)
always
blocks.
(#335, e5782e4ddf
)
Command substitutions inside double quotes, "$(echo foo)"
.
(#139 (in part), c3913e0d8e
)
Non-alphabetic parameters inside double quotes ("$$"
, "$#"
, "$*"
, "$@"
, "$?"
, "$-"
).
(4afe670f7a1b, 44ef6e38e5
)
Command words from future versions of zsh (forward compatibly).
This also adds an arg0
style that all other command word styles fall back to.
(b4537a972eed, bccc3dc269
)
Escaped history expansions inside double quotes: : "\!"
(28d7056a7a06, et seq)
Command separator tokens in syntactically-invalid positions.
(09c4114eb9
)
Redirections with a file descriptor number at command word.
(#238 (in part), 73ee7c1f6c
)
The select
prompt, $PS3
.
(#268, 451665cb2a
)
Values of variables in vared
.
(e500ca2462
)
!
as an argument (neither a history expansion nor a reserved word).
(4c23a2fd1b
)
"division by zero" error under the brackets
highlighter when $ZSH_HIGHLIGHT_STYLES
is empty.
(f73f3d53d3
)
Process substitutions, <(pwd)
and >(wc -l)
.
(#302, 6889ff6bd2ad, bfabffbf975c, fc9c892a3f
)
The non-SHORT_LOOPS
form of repeat
loops: repeat 42; do true; done
.
(#290, 4832f18c50a5, ef68f50c048f, 6362c757b6
)
Broken symlinks (are now highlighted as files).
(#342, 95f7206a9373, 53083da821
)
Lines accepted from isearch
mode.
(#284; #257, #259, #288; 5bae6219008b, a8fe22d422
)
Work around upstream bug that triggered when the command word was a relative path, that when interpreted relative to a $PATH directory denoted a command; the effect of that upstream bug was that the relative path was cached as a "valid external command name". (#354, #355, 51614ca2c994, fdaeec45146b, 7d38d07255e4; upstream fix slated to be released in 5.3 (workers/39104))
After accepting a line with the cursor on a bracket, the matching bracket
of the bracket under the cursor no longer remains highlighted (with the
brackets
highlighter).
(4c4baede51
)
The first word on a new line within an array assignment or initialization is no
longer considered a command position.
(8bf423d16d
)
Subshells that end at command position, (A=42)
, (true;)
.
(#231, 7fb6f9979121; #344, 4fc35362ee
)
Command word after array assignment, a=(lorem ipsum) pwd
.
(#330, 7fb6f99791
)
New interface _zsh_highlight_add_highlight
.
(341a3ae1f015, c346f6eb6f
)
tests: Specify the style key, not its value, in test expectations. (a830613467af, fd061b5730bf, eaa4335c3441, among others)
Module author documentation improvements. (#306 (in part), 217669270418, 0ff354b44b6e, 80148f6c8402, 364f206a547f, and others)
The driver no longer defines a _zsh_highlight_${highlighter}_highlighter_cache
variable, which is in the highlighters' namespace.
(3e59ab41b6b8, 80148f6c8402, f91a7b885e
)
Rename highlighter entry points. The old names remain supported for
backwards compatibility.
(a3d5dfcbdae9, c793e0dcea
)
tests: Add the "NONE" expectation.
(4da9889d1545, 13018f3dd735, d37c55c788
)
tests: consider a test that writes to stderr to have failed.
(#291, 1082067f93
)
Add make quiet-test
.
(9b64ad750f
)
test harness: Better quote replaceables in error messages.
(30d8f92df2
)
test harness: Fix exit code for XPASS.
(bb8d325c0c
)
Create HACKING.md.
(cef49752fd
)
tests: Emit a description for PASS test points.
(6aa57d60aa64, f0bae44b76
)
tests: Create a script that generates a test file.
(8013dc3b8db6, et seq; tests/generate.zsh
)
Under zsh≤5.2, widgets whose names start with a _
are no longer excluded
from highlighting.
(ed33d2cb1388; reverts part of 186d80054a
which was for #65)
Under zsh≤5.2, widgets implemented by a function named after the widget are
no longer excluded from highlighting.
(487b122c480d; reverts part of 776453cb5b
)
Under zsh≤5.2, shell-unsafe widget names can now be wrapped. (#278, 6a634fac9fb9, et seq)
Correct some test expectations.
(78290e043b
)
zsh-syntax-highlighting.plugin.zsh
: Convert from symlink to plain file
for msys2 compatibility.
(#292, d4f8edc9f3
)
Document installation under some plugin managers.
(e635f766bef9, 9cab566f53
)
Don't leak the PATH_DIRS
option.
(7b82b88a71
)
Don't require the FUNCTION_ARGZERO
option to be set.
(#338, 750aebc553
)
Under zsh≤5.2, support binding incomplete/nonexistent widgets. (9e569bb0fe04, part of #288)
Make the driver reentrant, fixing possibility of infinite recursion
under zsh≤5.2 under interaction with theoretical third-party code.
(#305, d711563fe1bf, 295d62ec888d, f3242cbd6a
)
Fix warnings when WARN_CREATE_GLOBAL
is set prior to sourcing zsh-syntax-highlighting.
(z-sy-h already sets WARN_CREATE_GLOBAL
internally.)
(da60234fb2
)
Warn only once, rather than once per keypress, when a highlighter is unavailable.
(0a9b347483
)
zle ${widget} -- ${args}
).
(282c7134e8ac, reverts c808d2187a
)incomplete sudo commands
(a3047a912100, 2f05620b19
)
sudo;
sudo -u;
command words following reserved words
(#207, #222, b397b12ac1
et seq, 6fbd2aa957
et seq, 8b4adbd991
)
if ls; then ls; else ls; fi
repeat 10 do ls; done
(The ls
are now highlighted as a command.)
comments (when INTERACTIVE_COMMENTS
is set)
(#163, #167, 693de99a90
)
echo Hello # comment
closing brackets of arithmetic expansion, subshells, and blocks (#226, a59f442d2d34, et seq)
(( foo ))
( foo )
{ foo }
command names enabled by the PATH_DIRS
option
(#228, 96ee5116b1
)
# When ~/bin/foo/bar exists, is executable, ~/bin is in $PATH,
# and 'setopt PATH_DIRS' is in effect
foo/bar
parameter expansions with braces inside double quotes
(#186, 6e3720f39d
)
echo "${foo}"
parameter expansions in command word
(#101, 4fcfb15913
)
x=/bin/ls
$x -l
the command separators '|&', '&!', '&|'
view file.pdf &! ls
precommand modifiers at non-command-word position
(#209, 2c9f8c8c95
)
ls command foo
sudo commands with infix redirections
(#221, be006aded590, 86e9249709
)
sudo -u >/tmp/foo.out user ls
subshells; anonymous functions
(#166, #194, 0d1bfbcbfa67, 9e178f9f39
)
(true)
() { true }
parameter assignment statements with no command
(#205, 01d7eeb3c7
)
A=1;
(The semicolon used to be highlighted as a mistake)
cursor highlighter: Remove the cursor highlighting when accepting a line.
(#109, 4f0c293fde
)
path_approx
).
(#187, 98aee7f8b9
)main highlighter refactored to use states rather than booleans. (2080a441ac49, et seq)
Fix initialization when sourcing zsh-syntax-highlighting.zsh
via a symlink
(083c47b007
)
docs: Add screenshot.
(57624bb9f6
)
widgets wrapping: Don't add '--' when invoking widgets.
(c808d2187a
) [reverted in 0.4.1]
Refresh highlighting upon accept-*
widgets (accept-line
et al).
(59fbdda64c
)
Stop leaking match/mbegin/mend to global scope (thanks to upstream
WARN_CREATE_GLOBAL
improvements).
(d3deffbf46
)
'make install': Permit setting $(SHARE_DIR)
from the environment.
(e1078a8b4c
)
driver: Tolerate KSH_ARRAYS being set in the calling context.
(#162, 8f19af6b31
)
'make install': Install documentation fully and properly. (#219, b1619c001390, et seq)
docs: Improve 'main' highlighter's documentation.
(00de155063f5, 7d4252f5f5
)
docs: Moved to a new docs/ tree; assorted minor updates (c575f8f37567, 5b34c23cfad5, et seq)
docs: Split README.md into INSTALL.md
(0b3183f6cb
)
driver: Report $ZSH_HIGHLIGHT_REVISION
when running from git
(84734ba950
)
Test harness converted to TAP format (d99aa58aaaef, et seq)
Run each test in a separate subprocess, isolating them from each other (d99aa58aaaef, et seq)
Fix test failure with nonexisting $HOME
(#216, b2ac98b981
)
Test output is now colorized.
(4d3da30f8b72, 6fe07c0961
)
Document make install
(a18a7427fd
)
tests: Allow specifying the zsh binary to use.
(557bb7e0c6
)
tests: Add 'make perf' target
(4513eaea71
)
tests: Run each test in a sandbox directory
(c015339202
)
suffix aliases (requires zsh 5.1.1 or newer):
alias -s png=display
foo.png
prefix redirections:
<foo.txt cat
redirection operators:
echo > foo.txt
arithmetic evaluations:
(( 42 ))
$'' strings, including \x/\octal/\u/\U escapes
: $'foo\u0040bar'
multiline strings:
% echo "line 1
line 2"
string literals that haven't been finished:
% echo "Hello, world
command words that involve tilde expansion:
% ~/bin/foo
quoted command words:
% \ls
backslash escapes in "" strings:
% echo "\x41"
noglob after command separator:
% :; noglob echo *
glob after command separator, when the first command starts with 'noglob':
% noglob true; echo *
the region (vi visual mode / set-mark-command) (issue #165)
redirection and command separators that would be highlighted as path_approx
% echo foo;‸
% echo <‸
(where ‸
represents the cursor location)
escaped globbing (outside quotes)
% echo \*
implemented compatibility with zsh's paste highlighting (issue #175)
$?
propagated correctly to wrapped widgets
don't leak $REPLY into global scope
added makefile with install
and test
targets
set warn_create_global
internally
document release process
(Start of changelog.)