zsh-syntax-highlighting/changelog.md
2020-01-24 18:40:51 +00:00

16 KiB

Changes in version 0.7.0

Version 0.7.0 has not been released. This changelog is a work in progress.

This is a stable bugfix and feature release. Major new features and changes include:

  • Add ZSH_HIGHLIGHT_DIRS_BLACKLIST to disable "path" and "path prefix"
    highlighting for specific directories
    [#379]

  • Add the "regexp" highlighter, modelled after the pattern highlighter
    [4e6f60063f]

  • When a word uses globbing, only the globbing metacharacters will be highlighted as globbing:
    in : foo*bar, only the * will be blue.
    [e48af35753]

  • Highlight pasted quotes (e.g., : foo"bar")
    [dc1b2f6fa4]

  • Highlight command substitutions (: `ls`, : $(ls))
    [c0e64fe131 and parents, e86f75a840, et al]

  • Highlight process substitutions (: >(nl), : <(pwd), : =(git diff))
    [c0e64fe131 and parents, e86f75a840, et al]

  • Highlight command substitutions inside double quotes (: "`foo`")
    [f16e858f0c]

  • Highlight many precommands (e.g., nice, stdbuf, eatmydata;
    see $precommand_options in the source)

  • Highlight numeric globs (e.g., echo /lib<->)

  • Assorted improvement to aliases highlighting
    (e.g.,
    alias sudo_u='sudo -u'; sudo_u jrandom ls,
    alias x=y y=z z=nosuchcommand; x,
    alias ls='ls -l'; \ls)
    [f3410c5862, 57386f30ae, #544, and many others]

  • Highlight some more syntax errors
    [dea05e44e6, 298ef6a2fa]

  • New styles: named file descriptors, RC_QUOTES, and unclosed quotes (e.g., echo "foo<CURSOR>)
    [38c794a978, 25ae1c0121, 967335dfc5fd]

  • The 'brackets' highlighting no longer treats quotes specially.
    [ecdda36ef5]

Selected bugfixes include:

Known issues include:

  • A multiline alias that uses a simple command terminator (such as ;, |, &&)
    before a newline will incorrectly be highlighted as an error. See issue #677
    for examples and workarounds.
    [#677]

Changes in version 0.6.0

This is a stable release, featuring bugfixes and minor improvements.

Performance improvements:

(none)

Added highlighting of:

  • Possible history expansions in double-quoted strings.
    (76ea9e1df3)

  • Mismatched if/then/elif/else/fi.
    (73cb832702)

Fixed highlighting of:

  • 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)

API changes (for highlighter authors):

(none)

Developer-visible changes:

  • tests: Set the ALIAS_FUNC_DEF option for zsh 5.4 compatibility.
    (9523d6d49c)

Other changes:

  • docs: Added before/after screenshots.
    (cd9ec14a65ec..b7e277106b49)

  • docs: Link Fedora package.
    (3d74aa47e4, 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, 2dce602727, 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)

Changes in version 0.5.0

Performance improvements:

We thank Sebastian Gniazdowski and "m0viefreak" for significant contributions
in this area.

  • Optimize string operations in the main (default) highlighter.
    (#372/3cb58fd7d7b9, 02229ebd63, ef4bfe5bcc, #372/c6b6513ac0d6, #374/15461e7d21c3)

  • Command word highlighting: Use the zsh/parameter module to avoid forks.
    Memoize (cache) the results.
    (#298, 3ce01076b5, 2f18ba64e3, 12b879caf7a6; #320, 3b67e656bf)

  • Avoid forks in the driver and in the root highlighter.
    (b9112aec79, 38c8fbea2d)

Added highlighting of:

  • 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, 6cd39e7c70, 9a934d291e, 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, a7a7f8b422, 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.
    (a8a6384356, 02807f1826)

  • Mismatched parentheses and braces (in the main highlighter).
    (51b9d79c3b, 2fabf7ca64, a4196eda5e, 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 ("$$", "$#", "$*", "$@", "$?", "$-").
    (4afe670f7a, 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.
    (b4537a972e, bccc3dc269)

  • Escaped history expansions inside double quotes: : "\!"
    (28d7056a7a, et seq)

Fixed highlighting of:

  • 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, 6889ff6bd2, bfabffbf97, fc9c892a3f)

  • The non-SHORT_LOOPS form of repeat loops: repeat 42; do true; done.
    (#290, 4832f18c50, ef68f50c04, 6362c757b6)

  • Broken symlinks (are now highlighted as files).
    (#342, 95f7206a93, 53083da821)

  • Lines accepted from isearch mode.
    (#284; #257, #259, #288; 5bae621900, 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, 51614ca2c9, fdaeec4514, 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)

API changes (for highlighter authors):

Developer-visible changes:

Other changes:

  • 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, 6a634fac9f, 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.
    (e635f766be, 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.
    (9e569bb0fe, part of #288)

  • Make the driver reentrant, fixing possibility of infinite recursion
    under zsh≤5.2 under interaction with theoretical third-party code.
    (#305, d711563fe1, 295d62ec88, 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)

Changes in version 0.4.1

Fixes:

  • Arguments to widgets were not properly dash-escaped. Only matters for widgets
    that take arguments (i.e., that are invoked as zle ${widget} -- ${args}).
    (282c7134e8, reverts c808d2187a)

Changes in version 0.4.0

Added highlighting of:

  • incomplete sudo commands
    (a3047a9121, 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, a59f442d2d, 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
    

Fixed highlighting of:

  • precommand modifiers at non-command-word position
    (#209, 2c9f8c8c95)

    ls command foo
    
  • sudo commands with infix redirections
    (#221, be006aded5, 86e9249709)

    sudo -u >/tmp/foo.out user ls
    
  • subshells; anonymous functions
    (#166, #194, 0d1bfbcbfa, 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)

Removed features:

  • Removed highlighting of approximate paths (path_approx).
    (#187, 98aee7f8b9)

Other changes:

  • main highlighter refactored to use states rather than booleans.
    (2080a441ac, 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, b1619c0013, et seq)

  • docs: Improve 'main' highlighter's documentation.
    (00de155063, 7d4252f5f5)

  • docs: Moved to a new docs/ tree; assorted minor updates
    (c575f8f375, 5b34c23cfa, et seq)

  • docs: Split README.md into INSTALL.md
    (0b3183f6cb)

  • driver: Report $ZSH_HIGHLIGHT_REVISION when running from git
    (84734ba950)

Developer-visible changes:

Changes in version 0.3.0

Added highlighting of:

  • 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
    

Fixed highlighting of:

  • 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 \*
    

Other changes:

  • implemented compatibility with zsh's paste highlighting (issue #175)

  • $? propagated correctly to wrapped widgets

  • don't leak $REPLY into global scope

Developer-visible changes:

  • added makefile with install and test targets

  • set warn_create_global internally

  • document release process

Version 0.2.1

(Start of changelog.)