From ba0fff16fbfe49907fc19ad45ab3a3db8ac645f8 Mon Sep 17 00:00:00 2001 From: Tovi Jaeschke-Rogers Date: Sun, 13 Jun 2021 10:48:02 +0930 Subject: [PATCH] Use fast syntax highlighting --- .zsh/fsh/.editorconfig | 15 - .zsh/fsh/.fast-make-targets | 98 + .zsh/fsh/.fast-read-ini-file | 30 + .zsh/fsh/.fast-run-command | 37 + .zsh/fsh/.fast-run-git-command | 60 + .zsh/fsh/.fast-zts-read-all | 17 + .zsh/fsh/.gitattributes | 1 - .zsh/fsh/.github/FUNDING.yml | 5 + .zsh/fsh/.github/workflows/test.yml | 74 - .zsh/fsh/.gitignore | 27 +- .zsh/fsh/.revision-hash | 1 - .zsh/fsh/.travis.yml | 13 + .zsh/fsh/.version | 1 - .zsh/fsh/.zunit.yml | 8 + .zsh/fsh/CHANGELOG.md | 144 ++ .zsh/fsh/CHROMA_GUIDE.adoc | 166 ++ .zsh/fsh/DONATIONS.md | 441 ++++ .zsh/fsh/HACKING.md | 99 - .zsh/fsh/INSTALL.md | 131 -- .zsh/fsh/{COPYING.md => LICENSE} | 2 +- .zsh/fsh/Makefile | 64 - .zsh/fsh/README.md | 325 ++- .zsh/fsh/THEME_GUIDE.md | 76 + .zsh/fsh/_fast-theme | 39 + .zsh/fsh/changelog.md | 884 -------- .zsh/fsh/docs/highlighters.md | 132 -- .zsh/fsh/docs/highlighters/brackets.md | 31 - .zsh/fsh/docs/highlighters/cursor.md | 24 - .zsh/fsh/docs/highlighters/line.md | 24 - .zsh/fsh/docs/highlighters/main.md | 121 -- .zsh/fsh/docs/highlighters/pattern.md | 24 - .zsh/fsh/docs/highlighters/regexp.md | 30 - .zsh/fsh/docs/highlighters/root.md | 25 - .zsh/fsh/fast-highlight | 1463 +++++++++++++ .zsh/fsh/fast-string-highlight | 77 + .zsh/fsh/fast-syntax-highlighting.plugin.zsh | 384 ++++ .zsh/fsh/fast-theme | 385 ++++ .zsh/fsh/highlighters/README.md | 8 - .zsh/fsh/highlighters/brackets/README.md | 1 - .../brackets/brackets-highlighter.zsh | 107 - .../cursor-matchingbracket-line-finish.zsh | 36 - .../test-data/cursor-matchingbracket.zsh | 47 - .../brackets/test-data/empty-styles.zsh | 33 - .../brackets/test-data/loop-styles.zsh | 53 - .../test-data/mismatch-patentheses.zsh | 42 - .../brackets/test-data/near-quotes.zsh | 42 - .../brackets/test-data/nested-parentheses.zsh | 45 - .../brackets/test-data/only-error.zsh | 34 - .../brackets/test-data/quoted-patentheses.zsh | 34 - .../brackets/test-data/simple-parentheses.zsh | 42 - .../test-data/unclosed-patentheses.zsh | 41 - .../test-data/unclosed-patentheses2.zsh | 40 - .zsh/fsh/highlighters/cursor/README.md | 1 - .../cursor/cursor-highlighter.zsh | 47 - .zsh/fsh/highlighters/line/README.md | 1 - .../highlighters/line/line-highlighter.zsh | 44 - .zsh/fsh/highlighters/main/README.md | 1 - .../highlighters/main/main-highlighter.zsh | 1843 ----------------- .../abspath-in-command-position1.zsh | 35 - .../abspath-in-command-position1b.zsh | 36 - .../abspath-in-command-position2.zsh | 35 - .../abspath-in-command-position3.zsh | 37 - .../abspath-in-command-position3b.zsh | 38 - .../abspath-in-command-position4.zsh | 35 - .../abspath-in-command-position5.zsh | 35 - .../main/test-data/alias-assignment1.zsh | 38 - .../main/test-data/alias-basic.zsh | 35 - .../main/test-data/alias-brackets.zsh | 41 - .../test-data/alias-command-substitution.zsh | 37 - .../main/test-data/alias-comment1.zsh | 37 - .../main/test-data/alias-comment2.zsh | 37 - .../main/test-data/alias-complex.zsh | 38 - .../main/test-data/alias-empty.zsh | 38 - .../main/test-data/alias-eponymous1.zsh | 36 - .../main/test-data/alias-eponymous2.zsh | 36 - .../main/test-data/alias-in-cmdsubst.zsh | 43 - .../main/test-data/alias-loop.zsh | 44 - .../main/test-data/alias-loop2.zsh | 35 - .../test-data/alias-nested-precommand.zsh | 43 - .../main/test-data/alias-nested.zsh | 40 - .../main/test-data/alias-parameter.zsh | 38 - .../alias-precommand-option-argument1.zsh | 42 - .../alias-precommand-option-argument2.zsh | 42 - .../alias-precommand-option-argument3.zsh | 42 - .../alias-precommand-option-argument4.zsh | 42 - .../main/test-data/alias-quoted.zsh | 39 - .../main/test-data/alias-redirect.zsh | 38 - .../main/test-data/alias-reuse1.zsh | 39 - .../main/test-data/alias-reuse2.zsh | 39 - .../main/test-data/alias-reuse3.zsh | 39 - .../main/test-data/alias-reuse4.zsh | 42 - .../main/test-data/alias-reuse5.zsh | 43 - .../main/test-data/alias-self.zsh | 38 - .../main/test-data/alias-self2.zsh | 37 - .../main/test-data/alias-to-dir.zsh | 36 - .../main/test-data/alias-to-dir1b.zsh | 37 - .../main/test-data/alias-unknown-token1.zsh | 37 - .../main/test-data/alias-unknown-token2.zsh | 37 - .../fsh/highlighters/main/test-data/alias.zsh | 53 - .../highlighters/main/test-data/always1.zsh | 41 - .../highlighters/main/test-data/always2.zsh | 43 - .../highlighters/main/test-data/always3.zsh | 43 - .../main/test-data/anonymous-function.zsh | 44 - .../main/test-data/arg0-colon.zsh | 35 - .../main/test-data/arith-cmdsubst-mess.zsh | 46 - .../highlighters/main/test-data/arith1.zsh | 37 - .../highlighters/main/test-data/arith2.zsh | 38 - .../arithmetic-command-substitution.zsh | 42 - .../test-data/arithmetic-doubled-parens.zsh | 37 - .../main/test-data/arithmetic-empty.zsh | 39 - .../main/test-data/arithmetic-evaluation.zsh | 40 - .../main/test-data/arithmetic-hist-expn.zsh | 38 - .../test-data/arithmetic-invalid-chars.zsh | 39 - .../test-data/arithmetic-multiplication.zsh | 39 - .../main/test-data/arithmetic-nested.zsh | 38 - .../main/test-data/arithmetic-quoted.zsh | 38 - .../main/test-data/arithmetic-unclosed.zsh | 37 - .../main/test-data/arithmetic-unfinished.zsh | 41 - .../main/test-data/array-cmdsep1.zsh | 45 - .../main/test-data/array-cmdsep2.zsh | 41 - .../main/test-data/array-cmdsep3.zsh | 41 - .../main/test-data/assign-append.zsh | 39 - .../main/test-data/assign-argv.zsh | 38 - .../main/test-data/assign-array.zsh | 41 - .../main/test-data/assign-array2.zsh | 40 - .../main/test-data/assign-array3.zsh | 41 - .../main/test-data/assign-invalid-command.zsh | 37 - .../main/test-data/assign-not-array.zsh | 36 - .../main/test-data/assign-not-array2.zsh | 36 - .../main/test-data/assign-quoted-cmdsubst.zsh | 45 - .../main/test-data/assign-semicolon.zsh | 39 - .../main/test-data/assign-subshell.zsh | 37 - .../main/test-data/assign-value-quote1.zsh | 37 - .../main/test-data/assign-value-quote2.zsh | 37 - .../highlighters/main/test-data/assign.zsh | 42 - .../test-data/assignment-before-resword1.zsh | 40 - .../test-data/assignment-before-resword2.zsh | 40 - .../test-data/assignment-before-resword3.zsh | 37 - .../test-data/assignment-before-resword4.zsh | 40 - .../test-data/assignment-before-resword5.zsh | 38 - .../main/test-data/assignment-quoted.zsh | 37 - .../main/test-data/back-quoted-argument.zsh | 58 - .../main/test-data/back-quoted-open.zsh | 41 - .../main/test-data/backslash-continuation.zsh | 35 - .../test-data/backslash-continuation2.zsh | 37 - .../main/test-data/backslash-space.zsh | 39 - .../highlighters/main/test-data/backslash.zsh | 34 - .../main/test-data/bang-assign-array.zsh | 42 - .../main/test-data/bang-assign-scalar.zsh | 38 - .../main/test-data/bang-pipeline.zsh | 39 - .../highlighters/main/test-data/braces1.zsh | 41 - .../highlighters/main/test-data/braces2.zsh | 41 - .../main/test-data/brackets-matching1.zsh | 38 - .../main/test-data/brackets-matching2.zsh | 38 - .../main/test-data/brackets-mismatch1.zsh | 39 - .../brackets-mismatch10-if-negative.zsh | 42 - .../main/test-data/brackets-mismatch2.zsh | 39 - .../main/test-data/brackets-mismatch3.zsh | 36 - .../main/test-data/brackets-mismatch4.zsh | 36 - .../main/test-data/brackets-mismatch5.zsh | 37 - .../main/test-data/brackets-mismatch6.zsh | 40 - .../main/test-data/brackets-mismatch7.zsh | 45 - .../brackets-mismatch8-if-positive.zsh | 53 - .../main/test-data/brackets-mismatch8.zsh | 38 - .../brackets-mismatch9-if-positive.zsh | 42 - .../brackets-premature-termination.zsh | 40 - .../main/test-data/cdpath-abspath.zsh | 38 - .../main/test-data/cmdpos-elision-partial.zsh | 44 - .../command-substitution-adjacent.zsh | 45 - .../command-substitution-in-assignment.zsh | 42 - .../command-substitution-unclosed.zsh | 45 - .../main/test-data/commandseparator.zsh | 38 - .../main/test-data/comment-followed.zsh | 39 - .../main/test-data/comment-leading.zsh | 36 - .../main/test-data/comment-off.zsh | 38 - .../highlighters/main/test-data/comments.zsh | 39 - .../main/test-data/commmand-parameter.zsh | 45 - .../main/test-data/control-flow.zsh | 57 - .../main/test-data/control-flow2.zsh | 40 - .../main/test-data/control-flow3.zsh | 39 - .../highlighters/main/test-data/cthulhu.zsh | 70 - .../highlighters/main/test-data/dinbrack1.zsh | 41 - .../main/test-data/dirs_blacklist.zsh | 40 - .../main/test-data/dollar-dollar.zsh | 39 - .../main/test-data/dollar-noise.zsh | 42 - .../main/test-data/dollar-paren.zsh | 49 - .../main/test-data/dollar-quoted.zsh | 38 - .../main/test-data/dollar-quoted2.zsh | 39 - .../main/test-data/dollar-quoted3.zsh | 39 - .../main/test-data/double-hyphen-option.zsh | 35 - .../main/test-data/double-quoted.zsh | 42 - .../main/test-data/double-quoted2.zsh | 39 - .../main/test-data/double-quoted3.zsh | 42 - .../main/test-data/double-quoted4.zsh | 37 - .../main/test-data/empty-command-newline.zsh | 39 - .../main/test-data/empty-command.zsh | 36 - .../main/test-data/empty-command2.zsh | 39 - .../main/test-data/empty-line.zsh | 36 - .../highlighters/main/test-data/equals1.zsh | 36 - .../highlighters/main/test-data/equals2.zsh | 38 - .../highlighters/main/test-data/equals3.zsh | 36 - .../highlighters/main/test-data/equals4.zsh | 36 - .../main/test-data/escaped-single-quote.zsh | 38 - .../main/test-data/exec-redirection1.zsh | 38 - .../main/test-data/fd-target-not-filename.zsh | 40 - .../main/test-data/function-altsyntax.zsh | 45 - .../main/test-data/function-named1.zsh | 44 - .../main/test-data/function-named2.zsh | 39 - .../highlighters/main/test-data/function.zsh | 42 - .zsh/fsh/highlighters/main/test-data/glob.zsh | 41 - .../main/test-data/global-alias1.zsh | 38 - .../main/test-data/globs-with-quoting.zsh | 43 - .../main/test-data/hashed-command.zsh | 35 - .../history-double-quoted-escaped.zsh | 38 - .../history-double-quoted-followed.zsh | 39 - .../test-data/history-double-quoted-no.zsh | 37 - .../history-double-quoted-unescaped.zsh | 38 - .../test-data/history-double-quoted-yes.zsh | 38 - .../main/test-data/history-expansion.zsh | 39 - .../main/test-data/history-expansion2.zsh | 34 - .../main/test-data/inheritance.zsh | 40 - .../main/test-data/jobsubst-isnt-glob.zsh | 37 - .../main/test-data/jobsubst-isnt-glob2.zsh | 37 - .../main/test-data/loop-newline.zsh | 40 - .../main/test-data/meta-no-eval1.zsh | 49 - .../main/test-data/meta-no-eval2.zsh | 40 - .../test-data/multiline-array-assignment1.zsh | 41 - .../main/test-data/multiline-string.zsh | 37 - .../main/test-data/multiline-string2.zsh | 36 - .../test-data/multios-negates-globbing.zsh | 39 - .../test-data/multios-negates-globbing2.zsh | 38 - .../main/test-data/multiple-quotes.zsh | 42 - .../main/test-data/multiple-redirections.zsh | 46 - .../main/test-data/noglob-alias.zsh | 36 - .../main/test-data/noglob-always.zsh | 45 - .../highlighters/main/test-data/noglob1.zsh | 38 - .../highlighters/main/test-data/noglob2.zsh | 40 - .../highlighters/main/test-data/noglob3.zsh | 38 - .../highlighters/main/test-data/noglob4.zsh | 45 - .../highlighters/main/test-data/null-exec.zsh | 38 - .../main/test-data/null-exec2-printenv.zsh | 38 - .../main/test-data/number_range-glob.zsh | 42 - .../main/test-data/off-by-one.zsh | 40 - .../main/test-data/opt-shwordsplit1.zsh | 40 - .../test-data/optimized-cmdsubst-input.zsh | 43 - .../option-dollar-quote-isnt-filename.zsh | 39 - .../main/test-data/option-path_dirs.zsh | 44 - .../main/test-data/option-with-quotes.zsh | 37 - .../test-data/order-path-after-dollar.zsh | 38 - .../test-data/order-path-before-globbing.zsh | 39 - .../param-positional-in-array-append.zsh | 39 - .../param-precommand-option-argument1.zsh | 42 - .../param-precommand-option-argument3.zsh | 42 - .../parameter-elision-command-word.zsh | 36 - .../parameter-expansion-untokenized1.zsh | 38 - .../parameter-expansion-untokenized2.zsh | 38 - .../main/test-data/parameter-star.zsh | 40 - .../test-data/parameter-to-global-alias.zsh | 42 - ...meter-value-contains-command-position1.zsh | 38 - ...meter-value-contains-command-position2.zsh | 38 - .../main/test-data/pasted-quotes.zsh | 38 - .../main/test-data/path-broken-symlink.zsh | 41 - .../main/test-data/path-dollared-word.zsh | 45 - .../main/test-data/path-dollared-word2.zsh | 37 - .../main/test-data/path-dollared-word3.zsh | 40 - .../main/test-data/path-dollared-word3b.zsh | 38 - .../main/test-data/path-dollared-word4.zsh | 36 - .../main/test-data/path-mixed-quoting.zsh | 39 - .../main/test-data/path-separators.zsh | 53 - .../main/test-data/path-separators2.zsh | 40 - .../main/test-data/path-space.zsh | 37 - .../main/test-data/path-tilde-home.zsh | 36 - .../main/test-data/path-tilde-home2.zsh | 37 - .../main/test-data/path-tilde-home3.zsh | 36 - .../main/test-data/path-tilde-named.zsh | 39 - .zsh/fsh/highlighters/main/test-data/path.zsh | 37 - .../main/test-data/path_prefix.zsh | 38 - .../main/test-data/path_prefix2.zsh | 39 - .../main/test-data/path_prefix3.zsh | 38 - .../plain-file-in-command-position.zsh | 39 - .../main/test-data/precommand-killing1.zsh | 40 - .../main/test-data/precommand-killing2.zsh | 39 - .../test-data/precommand-then-assignment.zsh | 37 - .../main/test-data/precommand-type1.zsh | 61 - .../main/test-data/precommand-type2.zsh | 55 - .../main/test-data/precommand-type3.zsh | 55 - .../main/test-data/precommand-uninstalled.zsh | 44 - .../test-data/precommand-unknown-option.zsh | 43 - .../main/test-data/precommand.zsh | 36 - .../main/test-data/precommand2.zsh | 36 - .../main/test-data/precommand3.zsh | 41 - .../main/test-data/precommand4.zsh | 39 - .../main/test-data/prefix-redirection.zsh | 42 - ...process-substitution-after-redirection.zsh | 46 - ...substitution-redirection-isnt-globbing.zsh | 41 - .../main/test-data/process-substitution.zsh | 43 - .../main/test-data/process-substitution2.zsh | 51 - .../quoted-command-substitution-empty.zsh | 44 - .../quoted-redirection-in-command-word.zsh | 37 - .../highlighters/main/test-data/rc-quotes.zsh | 39 - .../main/test-data/redirection-comment.zsh | 38 - .../main/test-data/redirection-from-param.zsh | 40 - .../test-data/redirection-in-cmdsubst.zsh | 41 - .../redirection-inhibits-elision.zsh | 38 - .../test-data/redirection-is-not-option.zsh | 38 - .../test-data/redirection-special-cases.zsh | 44 - .../main/test-data/redirection.zsh | 39 - .../main/test-data/redirection2.zsh | 41 - .../main/test-data/redirection3.zsh | 42 - .../main/test-data/reserved-word.zsh | 38 - .../main/test-data/simple-command.zsh | 34 - .../main/test-data/simple-redirection.zsh | 38 - .../highlighters/main/test-data/subshell.zsh | 51 - .../main/test-data/sudo-command.zsh | 54 - .../main/test-data/sudo-comment.zsh | 39 - .../main/test-data/sudo-longopt.zsh | 38 - .../main/test-data/sudo-redirection.zsh | 48 - .../main/test-data/sudo-redirection2.zsh | 41 - .../main/test-data/sudo-redirection3.zsh | 41 - .../main/test-data/tilde-command-word.zsh | 37 - .../main/test-data/time-and-nocorrect1.zsh | 39 - .../main/test-data/time-and-nocorrect2.zsh | 40 - .../main/test-data/unbackslash.zsh | 34 - .../main/test-data/unknown-command.zsh | 34 - .../main/test-data/vanilla-newline.zsh | 39 - .../main/test-data/vi-linewise-mode.zsh | 43 - .zsh/fsh/highlighters/pattern/README.md | 1 - .../pattern/pattern-highlighter.zsh | 60 - .../highlighters/pattern/test-data/rm-rf.zsh | 36 - .zsh/fsh/highlighters/regexp/README.md | 1 - .../regexp/regexp-highlighter.zsh | 62 - .../highlighters/regexp/test-data/complex.zsh | 37 - .../regexp/test-data/subexpression.zsh | 36 - .../regexp/test-data/word-boundary.zsh | 42 - .zsh/fsh/highlighters/root/README.md | 1 - .../highlighters/root/root-highlighter.zsh | 44 - .zsh/fsh/images/203654.gif | Bin 0 -> 168066 bytes .zsh/fsh/images/after1-smaller.png | Bin 2517 -> 0 bytes .zsh/fsh/images/after1.png | Bin 5842 -> 0 bytes .zsh/fsh/images/after2-smaller.png | Bin 4386 -> 0 bytes .zsh/fsh/images/after2.png | Bin 10228 -> 0 bytes .zsh/fsh/images/after3-smaller.png | Bin 1673 -> 0 bytes .zsh/fsh/images/after3.png | Bin 3427 -> 0 bytes .zsh/fsh/images/after4-smaller.png | Bin 3224 -> 0 bytes .zsh/fsh/images/array-assign.png | Bin 0 -> 2022 bytes .zsh/fsh/images/assign.png | Bin 0 -> 15333 bytes .zsh/fsh/images/before1-smaller.png | Bin 1589 -> 0 bytes .zsh/fsh/images/before1.png | Bin 2636 -> 0 bytes .zsh/fsh/images/before2-smaller.png | Bin 2605 -> 0 bytes .zsh/fsh/images/before2.png | Bin 2614 -> 0 bytes .zsh/fsh/images/before3-smaller.png | Bin 763 -> 0 bytes .zsh/fsh/images/before3.png | Bin 1461 -> 0 bytes .zsh/fsh/images/before4-smaller.png | Bin 2987 -> 0 bytes .zsh/fsh/images/brackets.gif | Bin 0 -> 154167 bytes .zsh/fsh/images/cmdsubst.png | Bin 0 -> 8086 bytes .zsh/fsh/images/cplx_cond.png | Bin 0 -> 3533 bytes .zsh/fsh/images/eval_cmp.png | Bin 0 -> 7750 bytes .zsh/fsh/images/execfd.png | Bin 0 -> 2354 bytes .zsh/fsh/images/execfd_cmp.png | Bin 0 -> 3846 bytes .zsh/fsh/images/for-loop-cmp.png | Bin 0 -> 9140 bytes .zsh/fsh/images/for-loop.png | Bin 0 -> 3041 bytes .zsh/fsh/images/function.png | Bin 0 -> 7426 bytes .zsh/fsh/images/git_chroma.png | Bin 0 -> 13195 bytes .zsh/fsh/images/global-alias.png | Bin 0 -> 5499 bytes .zsh/fsh/images/heredoc.png | Bin 0 -> 5060 bytes .zsh/fsh/images/herestring.png | Bin 0 -> 5085 bytes .zsh/fsh/images/highlight-less.png | Bin 0 -> 4419 bytes .zsh/fsh/images/highlight-much.png | Bin 0 -> 6294 bytes .zsh/fsh/images/ideal-string.png | Bin 0 -> 9813 bytes .zsh/fsh/images/in_string.png | Bin 0 -> 6405 bytes .zsh/fsh/images/math.gif | Bin 0 -> 139884 bytes .zsh/fsh/images/parameter.png | Bin 0 -> 3235 bytes .zsh/fsh/images/preview-smaller.png | Bin 5982 -> 0 bytes .zsh/fsh/images/preview.png | Bin 14650 -> 0 bytes .zsh/fsh/images/theme.png | Bin 0 -> 36511 bytes .zsh/fsh/images/typeset.png | Bin 0 -> 4790 bytes .zsh/fsh/images/zcalc.png | Bin 0 -> 4865 bytes .zsh/fsh/release.md | 20 - .zsh/fsh/share/free_theme.zsh | 61 + .zsh/fsh/test/parse.zsh | 220 ++ .zsh/fsh/test/to-parse.zsh | 823 ++++++++ .zsh/fsh/tests/README.md | 124 -- .zsh/fsh/tests/_output/.gitkeep | 0 .zsh/fsh/tests/_support/.gitkeep | 0 .zsh/fsh/tests/_support/bootstrap | 2 + .zsh/fsh/tests/edit-failed-tests | 40 - .zsh/fsh/tests/example.zunit | 15 + .zsh/fsh/tests/generate.zsh | 117 -- .zsh/fsh/tests/main.zunit | 124 ++ .zsh/fsh/tests/tap-colorizer.zsh | 71 - .zsh/fsh/tests/tap-filter | 47 - .zsh/fsh/tests/test-highlighting.zsh | 291 --- .zsh/fsh/tests/test-perfs.zsh | 103 - .zsh/fsh/tests/test-zprof.zsh | 78 - .zsh/fsh/themes/clean.ini | 81 + .zsh/fsh/themes/default.ini | 84 + .zsh/fsh/themes/forest.ini | 81 + .zsh/fsh/themes/free.ini | 81 + .zsh/fsh/themes/q-jmnemonic.ini | 163 ++ .zsh/fsh/themes/safari.ini | 83 + .zsh/fsh/themes/spa.ini | 82 + .zsh/fsh/themes/sv-orple.ini | 100 + .zsh/fsh/themes/sv-plant.ini | 100 + .zsh/fsh/themes/zdharma.ini | 81 + .zsh/fsh/zsh-syntax-highlighting.plugin.zsh | 2 - .zsh/fsh/zsh-syntax-highlighting.zsh | 597 ------ .zsh/fsh/→chroma/-alias.ch | 29 + .zsh/fsh/→chroma/-autoload.ch | 104 + .zsh/fsh/→chroma/-autorandr.ch | 22 + .zsh/fsh/→chroma/-awk.ch | 108 + .zsh/fsh/→chroma/-docker.ch | 90 + .zsh/fsh/→chroma/-example.ch | 120 ++ .zsh/fsh/→chroma/-fast-theme.ch | 40 + .zsh/fsh/→chroma/-fpath_peq.ch | 61 + .zsh/fsh/→chroma/-git.ch | 954 +++++++++ .zsh/fsh/→chroma/-grep.ch | 89 + .zsh/fsh/→chroma/-hub.ch | 51 + .zsh/fsh/→chroma/-ionice.ch | 117 ++ .zsh/fsh/→chroma/-lab.ch | 59 + .zsh/fsh/→chroma/-make.ch | 105 + .zsh/fsh/→chroma/-nice.ch | 138 ++ .zsh/fsh/→chroma/-nmcli.ch | 58 + .zsh/fsh/→chroma/-node.ch | 37 + .zsh/fsh/→chroma/-ogit.ch | 383 ++++ .zsh/fsh/→chroma/-perl.ch | 80 + .zsh/fsh/→chroma/-precommand.ch | 17 + .zsh/fsh/→chroma/-printf.ch | 86 + .zsh/fsh/→chroma/-ruby.ch | 81 + .zsh/fsh/→chroma/-scp.ch | 87 + .zsh/fsh/→chroma/-sh.ch | 72 + .zsh/fsh/→chroma/-source.ch | 75 + .zsh/fsh/→chroma/-ssh.ch | 156 ++ .zsh/fsh/→chroma/-subcommand.ch | 25 + .zsh/fsh/→chroma/-subversion.ch | 250 +++ .zsh/fsh/→chroma/-vim.ch | 51 + .zsh/fsh/→chroma/-whatis.ch | 138 ++ .zsh/fsh/→chroma/-which.ch | 96 + .zsh/fsh/→chroma/-zinit.ch | 378 ++++ .zsh/fsh/→chroma/main-chroma.ch | 460 ++++ 439 files changed, 10525 insertions(+), 16834 deletions(-) delete mode 100644 .zsh/fsh/.editorconfig create mode 100644 .zsh/fsh/.fast-make-targets create mode 100644 .zsh/fsh/.fast-read-ini-file create mode 100644 .zsh/fsh/.fast-run-command create mode 100644 .zsh/fsh/.fast-run-git-command create mode 100644 .zsh/fsh/.fast-zts-read-all delete mode 100644 .zsh/fsh/.gitattributes create mode 100644 .zsh/fsh/.github/FUNDING.yml delete mode 100644 .zsh/fsh/.github/workflows/test.yml delete mode 100644 .zsh/fsh/.revision-hash create mode 100644 .zsh/fsh/.travis.yml delete mode 100644 .zsh/fsh/.version create mode 100644 .zsh/fsh/.zunit.yml create mode 100644 .zsh/fsh/CHANGELOG.md create mode 100644 .zsh/fsh/CHROMA_GUIDE.adoc create mode 100644 .zsh/fsh/DONATIONS.md delete mode 100644 .zsh/fsh/HACKING.md delete mode 100644 .zsh/fsh/INSTALL.md rename .zsh/fsh/{COPYING.md => LICENSE} (96%) delete mode 100644 .zsh/fsh/Makefile create mode 100644 .zsh/fsh/THEME_GUIDE.md create mode 100644 .zsh/fsh/_fast-theme delete mode 100644 .zsh/fsh/changelog.md delete mode 100644 .zsh/fsh/docs/highlighters.md delete mode 100644 .zsh/fsh/docs/highlighters/brackets.md delete mode 100644 .zsh/fsh/docs/highlighters/cursor.md delete mode 100644 .zsh/fsh/docs/highlighters/line.md delete mode 100644 .zsh/fsh/docs/highlighters/main.md delete mode 100644 .zsh/fsh/docs/highlighters/pattern.md delete mode 100644 .zsh/fsh/docs/highlighters/regexp.md delete mode 100644 .zsh/fsh/docs/highlighters/root.md create mode 100644 .zsh/fsh/fast-highlight create mode 100644 .zsh/fsh/fast-string-highlight create mode 100644 .zsh/fsh/fast-syntax-highlighting.plugin.zsh create mode 100644 .zsh/fsh/fast-theme delete mode 100644 .zsh/fsh/highlighters/README.md delete mode 120000 .zsh/fsh/highlighters/brackets/README.md delete mode 100644 .zsh/fsh/highlighters/brackets/brackets-highlighter.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/empty-styles.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/loop-styles.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/mismatch-patentheses.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/near-quotes.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/nested-parentheses.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/only-error.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/quoted-patentheses.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/simple-parentheses.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses.zsh delete mode 100644 .zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses2.zsh delete mode 120000 .zsh/fsh/highlighters/cursor/README.md delete mode 100644 .zsh/fsh/highlighters/cursor/cursor-highlighter.zsh delete mode 120000 .zsh/fsh/highlighters/line/README.md delete mode 100644 .zsh/fsh/highlighters/line/line-highlighter.zsh delete mode 120000 .zsh/fsh/highlighters/main/README.md delete mode 100644 .zsh/fsh/highlighters/main/main-highlighter.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position1b.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position3b.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/abspath-in-command-position5.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-assignment1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-basic.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-brackets.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-command-substitution.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-comment1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-comment2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-complex.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-empty.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-eponymous1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-eponymous2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-in-cmdsubst.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-loop.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-loop2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-nested-precommand.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-nested.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-parameter.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-quoted.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-redirect.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-reuse1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-reuse2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-reuse3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-reuse4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-reuse5.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-self.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-self2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-to-dir.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-to-dir1b.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-unknown-token1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias-unknown-token2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/alias.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/always1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/always2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/always3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/anonymous-function.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arg0-colon.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arith-cmdsubst-mess.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arith1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arith2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-command-substitution.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-doubled-parens.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-empty.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-evaluation.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-hist-expn.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-invalid-chars.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-multiplication.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-nested.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-quoted.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-unclosed.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/arithmetic-unfinished.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/array-cmdsep1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/array-cmdsep2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/array-cmdsep3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-append.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-argv.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-array.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-array2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-array3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-invalid-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-not-array.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-not-array2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-quoted-cmdsubst.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-semicolon.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-subshell.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-value-quote1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign-value-quote2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assign.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-before-resword1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-before-resword2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-before-resword3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-before-resword4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-before-resword5.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/assignment-quoted.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/back-quoted-argument.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/back-quoted-open.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/backslash-continuation.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/backslash-continuation2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/backslash-space.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/backslash.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/bang-assign-array.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/bang-assign-scalar.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/bang-pipeline.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/braces1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/braces2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-matching1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-matching2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch5.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch6.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch7.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch8.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/brackets-premature-termination.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/cdpath-abspath.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/cmdpos-elision-partial.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/command-substitution-adjacent.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/command-substitution-in-assignment.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/command-substitution-unclosed.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/commandseparator.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/comment-followed.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/comment-leading.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/comment-off.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/comments.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/commmand-parameter.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/control-flow.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/control-flow2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/control-flow3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/cthulhu.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dinbrack1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dirs_blacklist.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-dollar.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-noise.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-paren.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-quoted.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-quoted2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/dollar-quoted3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/double-hyphen-option.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/double-quoted.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/double-quoted2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/double-quoted3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/double-quoted4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/empty-command-newline.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/empty-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/empty-command2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/empty-line.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/equals1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/equals2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/equals3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/equals4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/escaped-single-quote.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/exec-redirection1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/fd-target-not-filename.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/function-altsyntax.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/function-named1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/function-named2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/function.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/glob.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/global-alias1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/globs-with-quoting.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/hashed-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-double-quoted-escaped.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-double-quoted-followed.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-double-quoted-no.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-double-quoted-unescaped.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-double-quoted-yes.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-expansion.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/history-expansion2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/inheritance.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/loop-newline.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/meta-no-eval1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/meta-no-eval2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multiline-array-assignment1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multiline-string.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multiline-string2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multios-negates-globbing.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multios-negates-globbing2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multiple-quotes.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/multiple-redirections.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob-alias.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob-always.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/noglob4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/null-exec.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/null-exec2-printenv.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/number_range-glob.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/off-by-one.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/opt-shwordsplit1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/optimized-cmdsubst-input.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/option-path_dirs.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/option-with-quotes.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/order-path-after-dollar.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/order-path-before-globbing.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/param-positional-in-array-append.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/param-precommand-option-argument1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/param-precommand-option-argument3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-elision-command-word.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-star.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-to-global-alias.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/pasted-quotes.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-broken-symlink.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-dollared-word.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-dollared-word2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-dollared-word3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-dollared-word3b.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-dollared-word4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-mixed-quoting.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-separators.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-separators2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-space.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-tilde-home.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-tilde-home2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-tilde-home3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path-tilde-named.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path_prefix.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path_prefix2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/path_prefix3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/plain-file-in-command-position.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-killing1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-killing2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-then-assignment.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-type1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-type2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-type3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-uninstalled.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand-unknown-option.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/precommand4.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/prefix-redirection.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/process-substitution-after-redirection.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/process-substitution.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/process-substitution2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/quoted-command-substitution-empty.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/quoted-redirection-in-command-word.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/rc-quotes.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-comment.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-from-param.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-in-cmdsubst.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-inhibits-elision.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-is-not-option.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection-special-cases.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/redirection3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/reserved-word.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/simple-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/simple-redirection.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/subshell.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-comment.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-longopt.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-redirection.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-redirection2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/sudo-redirection3.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/tilde-command-word.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/time-and-nocorrect1.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/time-and-nocorrect2.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/unbackslash.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/unknown-command.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/vanilla-newline.zsh delete mode 100644 .zsh/fsh/highlighters/main/test-data/vi-linewise-mode.zsh delete mode 120000 .zsh/fsh/highlighters/pattern/README.md delete mode 100644 .zsh/fsh/highlighters/pattern/pattern-highlighter.zsh delete mode 100644 .zsh/fsh/highlighters/pattern/test-data/rm-rf.zsh delete mode 120000 .zsh/fsh/highlighters/regexp/README.md delete mode 100644 .zsh/fsh/highlighters/regexp/regexp-highlighter.zsh delete mode 100644 .zsh/fsh/highlighters/regexp/test-data/complex.zsh delete mode 100644 .zsh/fsh/highlighters/regexp/test-data/subexpression.zsh delete mode 100644 .zsh/fsh/highlighters/regexp/test-data/word-boundary.zsh delete mode 120000 .zsh/fsh/highlighters/root/README.md delete mode 100644 .zsh/fsh/highlighters/root/root-highlighter.zsh create mode 100644 .zsh/fsh/images/203654.gif delete mode 100644 .zsh/fsh/images/after1-smaller.png delete mode 100644 .zsh/fsh/images/after1.png delete mode 100644 .zsh/fsh/images/after2-smaller.png delete mode 100644 .zsh/fsh/images/after2.png delete mode 100644 .zsh/fsh/images/after3-smaller.png delete mode 100644 .zsh/fsh/images/after3.png delete mode 100644 .zsh/fsh/images/after4-smaller.png create mode 100644 .zsh/fsh/images/array-assign.png create mode 100644 .zsh/fsh/images/assign.png delete mode 100644 .zsh/fsh/images/before1-smaller.png delete mode 100644 .zsh/fsh/images/before1.png delete mode 100644 .zsh/fsh/images/before2-smaller.png delete mode 100644 .zsh/fsh/images/before2.png delete mode 100644 .zsh/fsh/images/before3-smaller.png delete mode 100644 .zsh/fsh/images/before3.png delete mode 100644 .zsh/fsh/images/before4-smaller.png create mode 100644 .zsh/fsh/images/brackets.gif create mode 100644 .zsh/fsh/images/cmdsubst.png create mode 100644 .zsh/fsh/images/cplx_cond.png create mode 100644 .zsh/fsh/images/eval_cmp.png create mode 100644 .zsh/fsh/images/execfd.png create mode 100644 .zsh/fsh/images/execfd_cmp.png create mode 100644 .zsh/fsh/images/for-loop-cmp.png create mode 100644 .zsh/fsh/images/for-loop.png create mode 100644 .zsh/fsh/images/function.png create mode 100644 .zsh/fsh/images/git_chroma.png create mode 100644 .zsh/fsh/images/global-alias.png create mode 100644 .zsh/fsh/images/heredoc.png create mode 100644 .zsh/fsh/images/herestring.png create mode 100644 .zsh/fsh/images/highlight-less.png create mode 100644 .zsh/fsh/images/highlight-much.png create mode 100644 .zsh/fsh/images/ideal-string.png create mode 100644 .zsh/fsh/images/in_string.png create mode 100644 .zsh/fsh/images/math.gif create mode 100644 .zsh/fsh/images/parameter.png delete mode 100644 .zsh/fsh/images/preview-smaller.png delete mode 100644 .zsh/fsh/images/preview.png create mode 100644 .zsh/fsh/images/theme.png create mode 100644 .zsh/fsh/images/typeset.png create mode 100644 .zsh/fsh/images/zcalc.png delete mode 100644 .zsh/fsh/release.md create mode 100644 .zsh/fsh/share/free_theme.zsh create mode 100755 .zsh/fsh/test/parse.zsh create mode 100644 .zsh/fsh/test/to-parse.zsh delete mode 100644 .zsh/fsh/tests/README.md create mode 100644 .zsh/fsh/tests/_output/.gitkeep create mode 100644 .zsh/fsh/tests/_support/.gitkeep create mode 100644 .zsh/fsh/tests/_support/bootstrap delete mode 100755 .zsh/fsh/tests/edit-failed-tests create mode 100644 .zsh/fsh/tests/example.zunit delete mode 100755 .zsh/fsh/tests/generate.zsh create mode 100644 .zsh/fsh/tests/main.zunit delete mode 100755 .zsh/fsh/tests/tap-colorizer.zsh delete mode 100755 .zsh/fsh/tests/tap-filter delete mode 100755 .zsh/fsh/tests/test-highlighting.zsh delete mode 100755 .zsh/fsh/tests/test-perfs.zsh delete mode 100755 .zsh/fsh/tests/test-zprof.zsh create mode 100644 .zsh/fsh/themes/clean.ini create mode 100644 .zsh/fsh/themes/default.ini create mode 100644 .zsh/fsh/themes/forest.ini create mode 100644 .zsh/fsh/themes/free.ini create mode 100644 .zsh/fsh/themes/q-jmnemonic.ini create mode 100644 .zsh/fsh/themes/safari.ini create mode 100644 .zsh/fsh/themes/spa.ini create mode 100644 .zsh/fsh/themes/sv-orple.ini create mode 100644 .zsh/fsh/themes/sv-plant.ini create mode 100644 .zsh/fsh/themes/zdharma.ini delete mode 100644 .zsh/fsh/zsh-syntax-highlighting.plugin.zsh delete mode 100644 .zsh/fsh/zsh-syntax-highlighting.zsh create mode 100644 .zsh/fsh/→chroma/-alias.ch create mode 100644 .zsh/fsh/→chroma/-autoload.ch create mode 100644 .zsh/fsh/→chroma/-autorandr.ch create mode 100644 .zsh/fsh/→chroma/-awk.ch create mode 100644 .zsh/fsh/→chroma/-docker.ch create mode 100644 .zsh/fsh/→chroma/-example.ch create mode 100644 .zsh/fsh/→chroma/-fast-theme.ch create mode 100644 .zsh/fsh/→chroma/-fpath_peq.ch create mode 100644 .zsh/fsh/→chroma/-git.ch create mode 100644 .zsh/fsh/→chroma/-grep.ch create mode 100644 .zsh/fsh/→chroma/-hub.ch create mode 100644 .zsh/fsh/→chroma/-ionice.ch create mode 100644 .zsh/fsh/→chroma/-lab.ch create mode 100644 .zsh/fsh/→chroma/-make.ch create mode 100644 .zsh/fsh/→chroma/-nice.ch create mode 100644 .zsh/fsh/→chroma/-nmcli.ch create mode 100644 .zsh/fsh/→chroma/-node.ch create mode 100644 .zsh/fsh/→chroma/-ogit.ch create mode 100644 .zsh/fsh/→chroma/-perl.ch create mode 100644 .zsh/fsh/→chroma/-precommand.ch create mode 100644 .zsh/fsh/→chroma/-printf.ch create mode 100644 .zsh/fsh/→chroma/-ruby.ch create mode 100644 .zsh/fsh/→chroma/-scp.ch create mode 100644 .zsh/fsh/→chroma/-sh.ch create mode 100644 .zsh/fsh/→chroma/-source.ch create mode 100644 .zsh/fsh/→chroma/-ssh.ch create mode 100644 .zsh/fsh/→chroma/-subcommand.ch create mode 100644 .zsh/fsh/→chroma/-subversion.ch create mode 100644 .zsh/fsh/→chroma/-vim.ch create mode 100644 .zsh/fsh/→chroma/-whatis.ch create mode 100644 .zsh/fsh/→chroma/-which.ch create mode 100644 .zsh/fsh/→chroma/-zinit.ch create mode 100644 .zsh/fsh/→chroma/main-chroma.ch diff --git a/.zsh/fsh/.editorconfig b/.zsh/fsh/.editorconfig deleted file mode 100644 index cda541d..0000000 --- a/.zsh/fsh/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# Top-most editorconfig file - -root = true - -[*] -end_of_line = lf -tab_width = 2 -indent_size = 2 -indent_style = space - -[Makefile] -tab_width = 8 -indent_size = 8 -indent_style = tab - diff --git a/.zsh/fsh/.fast-make-targets b/.zsh/fsh/.fast-make-targets new file mode 100644 index 0000000..e2cbd32 --- /dev/null +++ b/.zsh/fsh/.fast-make-targets @@ -0,0 +1,98 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Almost all code borrowed from Zshell's _make function +# +# Copyright (c) 2018 Sebastian Gniazdowski + +local -a TARGETS + +.make-expandVars() { + local open close var val front='' rest=$1 + + while [[ $rest == (#b)[^$]#($)* ]]; do + front=$front${rest[1,$mbegin[1]-1]} + rest=${rest[$mbegin[1],-1]} + + case $rest[2] in + ($) # '$$'. may not appear in target and variable's value + front=$front\$\$ + rest=${rest[3,-1]} + continue + ;; + (\() # Variable of the form $(foobar) + open='(' + close=')' + ;; + ({) # ${foobar} + open='{' + close='}' + ;; + ([[:alpha:]]) # $foobar. This is exactly $(f)oobar. + open='' + close='' + var=$rest[2] + ;; + (*) # bad parameter name + print -- $front$rest + return 1 + ;; + esac + + if [[ -n $open ]]; then + if [[ $rest == \$$open(#b)([[:alnum:]_]##)(#B)$close* ]]; then + var=$match + else # unmatched () or {}, or bad parameter name + print -- $front$rest + return 1 + fi + fi + + val='' + if [[ -n ${VAR_ARGS[(i)$var]} ]]; then + val=${VAR_ARGS[$var]} + else + if [[ -n $opt_args[(I)(-e|--environment-overrides)] ]]; then + if [[ $parameters[$var] == scalar-export* ]]; then + val=${(P)var} + elif [[ -n ${VARIABLES[(i)$var]} ]]; then + val=${VARIABLES[$var]} + fi + else + if [[ -n ${VARIABLES[(i)$var]} ]]; then + val=${VARIABLES[$var]} + elif [[ $parameters[$var] == scalar-export* ]]; then + val=${(P)var} + fi + fi + fi + rest=${rest//\$$open$var$close/$val} + done + + print -- ${front}${rest} +} + + +.make-parseMakefile () { + local input var val target dep TAB=$'\t' tmp IFS= + + while read input + do + case "$input " in + # TARGET: dependencies + # TARGET1 TARGET2 TARGET3: dependencies + ([[*?[:alnum:]$][^$TAB:=%]#:[^=]*) + target=$(.make-expandVars ${input%%:*}) + TARGETS+=( ${(z)target} ) + ;; + esac + done +} + +if [[ -z "${FAST_HIGHLIGHT[chroma-make-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[chroma-make-cache-born-at] )) -gt 7 ]]; then + .make-parseMakefile + FAST_HIGHLIGHT[chroma-make-cache-born-at]="$EPOCHSECONDS" + FAST_HIGHLIGHT[chroma-make-cache]="${(j:;:)TARGETS}" +fi + +reply2=( "${(s:;:)FAST_HIGHLIGHT[chroma-make-cache]}" ) + +# vim:ft=zsh:et diff --git a/.zsh/fsh/.fast-read-ini-file b/.zsh/fsh/.fast-read-ini-file new file mode 100644 index 0000000..2e57d10 --- /dev/null +++ b/.zsh/fsh/.fast-read-ini-file @@ -0,0 +1,30 @@ +# Copyright (c) 2018 Sebastian Gniazdowski +# +# $1 - path to the ini file to parse +# $2 - name of output hash (INI by default) +# $3 - prefix for keys in the hash (can be empty) +# +# Writes to given hash under keys built in following way: ${3}
_field. +# Values are values from ini file. + +local __ini_file="$1" __out_hash="${2:-INI}" __key_prefix="$3" +local IFS='' __line __cur_section="void" __access_string +local -a match mbegin mend + +[[ ! -r "$__ini_file" ]] && { builtin print -r "fast-syntax-highlighting: an ini file is unreadable ($__ini_file)"; return 1; } + +while read -r -t 1 __line; do + if [[ "$__line" = [[:blank:]]#\;* ]]; then + continue + elif [[ "$__line" = (#b)[[:blank:]]#\[([^\]]##)\][[:blank:]]# ]]; then + __cur_section="${match[1]}" + elif [[ "$__line" = (#b)[[:blank:]]#([^[:blank:]=]##)[[:blank:]]#[=][[:blank:]]#(*) ]]; then + match[2]="${match[2]%"${match[2]##*[! $'\t']}"}" # remove trailing whitespace + __access_string="${__out_hash}[${__key_prefix}<$__cur_section>_${match[1]}]" + : "${(P)__access_string::=${match[2]}}" + fi +done < "$__ini_file" + +return 0 + +# vim:ft=zsh:sw=4:sts=4:et diff --git a/.zsh/fsh/.fast-run-command b/.zsh/fsh/.fast-run-command new file mode 100644 index 0000000..e251bcc --- /dev/null +++ b/.zsh/fsh/.fast-run-command @@ -0,0 +1,37 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# FAST_HIGHLIGHT hash serves as container for variables that +# prevents creating them in global scope. (P) flag is not used, +# output array is fixed (__lines_list). +# +# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is +# added automatically +# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two +# additional fields will be used, $2-cache, $2-cache-born-at +# $3 - what to remove from beginning of the lines returned by the +# command +# $4 - cache validity time, default 5 (seconds) +# +# Output: array __lines_list, with output of the command ran + +# User should not forget to define this array, the below code +# will only ensure that it's array (can also define a global) +typeset -ga __lines_list +local -a __response + +if [[ -z "${FAST_HIGHLIGHT[$2-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then + FAST_HIGHLIGHT[$2-cache-born-at]="$EPOCHSECONDS" + __response=( ${${(f)"$(command ${(Qz)1#+} 2>/dev/null)"}#${~3}} ) + [[ "$1" = "+"* ]] && __lines_list+=( "${__response[@]}" ) || __lines_list=( "${__response[@]}" ) + FAST_HIGHLIGHT[$2-cache]="${(j:;:)__response}" +else + # Quoted (s:;:) flag without @ will skip empty elements. It + # still produces array output, interesingly. All this is for + # the trailing ";" above, to skip last, empty element. + [[ "$1" = "+"* ]] && \ + __lines_list+=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) || \ + __lines_list=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) +fi + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/.fast-run-git-command b/.zsh/fsh/.fast-run-git-command new file mode 100644 index 0000000..4a42b97 --- /dev/null +++ b/.zsh/fsh/.fast-run-git-command @@ -0,0 +1,60 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# It runs given command, which in general will be a git command, +# automatically looking at cache first (a field named *-cache, +# in FAST_HIGHLIGHT), which is valid for 5 seconds, and in case +# of outdated or not existing cache, runs the command, splitting +# on new-lines, first checking if PWD is inside git repository. +# +# FAST_HIGHLIGHT hash serves as container for variables that +# prevents creating them in global scope. (P) flag is not used, +# output array is fixed (__lines_list). +# +# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is +# added automatically +# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two +# additional fields will be used, $2-cache, $2-cache-born-at +# $3 - what to remove from beginning of the lines returned by the +# command +# $4 - cache validity time, default 5 (seconds) +# +# Output: array __lines_list, with output of the (git) command ran + +# User should not forget to define this array, the below code +# will only ensure that it's array (can also define a global) +typeset -ga __lines_list +local -a __response + +if [[ $1 == --status ]] { + integer __status=1 + shift +} + +if [[ -z ${FAST_HIGHLIGHT[$2-cache]} || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then + FAST_HIGHLIGHT[$2-cache-born-at]=$EPOCHSECONDS + if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = true ]]; then + __response=( ${${(f)"$(command ${(Qz)${1#+}} 2>/dev/null)"}#$3} ) + integer retval=$? + if (( __status )) { + __response=( $retval ) + __lines_list=( $retval ) + } else { + [[ "$1" = "+"* ]] && \ + __lines_list+=( "${__response[@]}" ) || \ + __lines_list=( "${__response[@]}" ) + } + else + __lines_list=() + fi + FAST_HIGHLIGHT[$2-cache]="${(j:;:)__response}" +else + # Quoted (s:;:) flag without @ will skip empty elements. It + # still produces array output, interesingly. All this is for + # the trailing ";" above, to skip last, empty element. + [[ "$1" = "+"* ]] && \ + __lines_list+=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) || \ + __lines_list=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) +fi + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/.fast-zts-read-all b/.zsh/fsh/.fast-zts-read-all new file mode 100644 index 0000000..96c52ab --- /dev/null +++ b/.zsh/fsh/.fast-zts-read-all @@ -0,0 +1,17 @@ +# $1 - file-descriptor to be read from +# $2 - name of output variable (default: REPLY) + +local __in_fd=${1:-0} __out_var=${2:-REPLY} +local -a __tmp +integer __ret=1 __repeat=10 __tmp_size=0 + +while sysread -s 65535 -i "$__in_fd" '__tmp[__tmp_size + 1]'; do + (( ( __ret=$? ) == 0 )) && (( ++ __tmp_size )) + (( __ret == 5 )) && { __ret=0; (( --__repeat == 0 )) && break; } +done + +: ${(P)__out_var::="${(j::)__tmp}"} + +return __ret + +# vim: ft=zsh:et:sw=4:sts=4 diff --git a/.zsh/fsh/.gitattributes b/.zsh/fsh/.gitattributes deleted file mode 100644 index 715e624..0000000 --- a/.zsh/fsh/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -.revision-hash export-subst diff --git a/.zsh/fsh/.github/FUNDING.yml b/.zsh/fsh/.github/FUNDING.yml new file mode 100644 index 0000000..56544b3 --- /dev/null +++ b/.zsh/fsh/.github/FUNDING.yml @@ -0,0 +1,5 @@ +# These are supported funding model platforms + +github: psprint +patreon: psprint +ko_fi: psprint diff --git a/.zsh/fsh/.github/workflows/test.yml b/.zsh/fsh/.github/workflows/test.yml deleted file mode 100644 index df2b726..0000000 --- a/.zsh/fsh/.github/workflows/test.yml +++ /dev/null @@ -1,74 +0,0 @@ ---- -name: Tests -on: - push: - paths-ignore: - - '**.md' - - '**.png' - pull_request: - paths-ignore: - - '**.md' - - '**.png' - schedule: - - cron: '29 7 * * 1' - -jobs: - test: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - version: - - master - - 5.8 - - 5.7.1 - - 5.7 - - 5.6.2 - - 5.6.1 - - 5.6 - - 5.5.1 - - 5.5 - - 5.4.2 - - 5.4.1 - - 5.4 - - 5.3.1 - - 5.3 - - 5.2 - - 5.1.1 - - 5.1 - - 5.0.8 - - 5.0.7 - - 5.0.6 - - 5.0.5 - - 5.0.4 - - 5.0.3 - - 5.0.2 - - 5.0.1 - - 5.0.0 - - 4.3.17 - - 4.3.16 - - 4.3.15 - - 4.3.14 - - 4.3.13 - - 4.3.12 - - 4.3.11 - container: - image: zshusers/zsh:${{ matrix.version }} - steps: - - uses: actions/checkout@v2 - - run: install_packages bsdmainutils make procps - - run: make test - - notify: - runs-on: ubuntu-latest - needs: test - if: failure() && (github.repository_owner == 'zsh-users') - steps: - - - name: Notify IRC - uses: Gottox/irc-message-action@v1 - with: - server: irc.libera.chat - channel: '#zsh-syntax-highlighting' - nickname: zsyh-gh-bot - message: '${{ github.ref }} failed tests: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' diff --git a/.zsh/fsh/.gitignore b/.zsh/fsh/.gitignore index 18fa5ec..a863220 100644 --- a/.zsh/fsh/.gitignore +++ b/.zsh/fsh/.gitignore @@ -1,3 +1,24 @@ -*.zwc* -.pc/ -docs/all.md +current_theme.zsh +secondary_theme.zsh +theme_overlay.zsh +*.txt +test/out.parse +test/res +hold/* +*.zwc + +### Vim +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags diff --git a/.zsh/fsh/.revision-hash b/.zsh/fsh/.revision-hash deleted file mode 100644 index 6828f88..0000000 --- a/.zsh/fsh/.revision-hash +++ /dev/null @@ -1 +0,0 @@ -$Format:%H$ diff --git a/.zsh/fsh/.travis.yml b/.zsh/fsh/.travis.yml new file mode 100644 index 0000000..351b593 --- /dev/null +++ b/.zsh/fsh/.travis.yml @@ -0,0 +1,13 @@ +addons: + apt: + packages: + zsh +install: + - mkdir .bin + - curl -L https://github.com/zunit-zsh/zunit/releases/download/v0.8.2/zunit > .bin/zunit + - curl -L https://raw.githubusercontent.com/molovo/revolver/master/revolver > .bin/revolver + - curl -L https://raw.githubusercontent.com/molovo/color/master/color.zsh > .bin/color +before_script: + - chmod u+x .bin/{color,revolver,zunit} + - export PATH="$PWD/.bin:$PATH" +script: zunit diff --git a/.zsh/fsh/.version b/.zsh/fsh/.version deleted file mode 100644 index 9fb1210..0000000 --- a/.zsh/fsh/.version +++ /dev/null @@ -1 +0,0 @@ -0.8.0-alpha2-dev diff --git a/.zsh/fsh/.zunit.yml b/.zsh/fsh/.zunit.yml new file mode 100644 index 0000000..e4fd57f --- /dev/null +++ b/.zsh/fsh/.zunit.yml @@ -0,0 +1,8 @@ +tap: false +directories: + tests: tests + output: tests/_output + support: tests/_support +time_limit: 0 +fail_fast: false +allow_risky: false diff --git a/.zsh/fsh/CHANGELOG.md b/.zsh/fsh/CHANGELOG.md new file mode 100644 index 0000000..b2a7665 --- /dev/null +++ b/.zsh/fsh/CHANGELOG.md @@ -0,0 +1,144 @@ +# News On Updates in F-Sy-H + +**2018-08-09** + +Added ideal string highlighting – FSH now handles any legal quoting and combination of `"`,`'` and `\` when +highlighting program arguments. See the introduction for an example (item #14). + +**2018-08-02** + +Global aliases are now supported: + +![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/global-alias.png) + +**2018-08-01** + +Hint – how to customize styles when using Zplugin and turbo mode: + +```zsh +zplugin ice wait"1" atload"set_fast_theme" +zplugin light zdharma/fast-syntax-highlighting + +set_fast_theme() { + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]='bg=blue' + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-1]='fg=red,bold' + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-2]='fg=magenta,bold' + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}bracket-level-3]='fg=cyan,bold' +} +``` + +If you have set theme before an update of styles (e.g. recent addition of bracket highlighting) +then please repeat `fast-theme {theme}` call to regenerate theme files. (**2018-08-09**: FSH +now has full user-theme support, refer to [appropriate section of README](#customization)). + +**2018-07-30** + +Ideal highlighting of brackets (pairing, etc.) – no quoting can disturb the result: + +![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/brackets.gif) + +`FAST_HIGHLIGHT[use_brackets]=1` to enable this feature (**2018-07-31**: not needed anymore, this highlighting is active by default). + +**2018-07-21** + +Chroma architecture now supports aliases. You can have `alias mygit="git commit"` and when `mygit` +will be invoked everything will work as expected (Git chroma will be ran). + +**2018-07-11** + +There were problems with Ctrl-C not working when using FSH. After many days I've found a fix +for this, it's pushed to master. + +Second, asynchronous path checking (useful on e.g. slow network drives, or when there are many files in directory) +is now optional. Set `FAST_HIGHLIGHT[use_async]=1` to enable it. This saves some users from Zshell crashes +– there's an unknown bug in Zsh. + +**2018-06-09** + +New chroma functions: `awk`, `make`, `perl`, `vim`. Checkout the [video](https://asciinema.org/a/186234), +it shows functionality of `awk` – compiling of code and NOT running it. Perl can do this too: +[video](https://asciinema.org/a/186098). + +**2018-06-06** + +FSH gained a new architecture – "chroma functions". They are similar to "completion functions", i.e. they +are defined **per-command**, but instead of completing that command, they colorize it. Two chroma exist, +for `Git` ([video](https://asciinema.org/a/185707), [video](https://asciinema.org/a/185811)) and for `grep` +([video](https://asciinema.org/a/185942)). Checkout +[example chroma](https://github.com/zdharma/fast-syntax-highlighting/blob/master/chroma/-example.ch) if you +would like to highlight a command. + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/git_chroma.png) + +**2018-06-01** + +Highlighting of command substitution (i.e. `$(...)`) with alternate theme – two themes at once! It was just white before: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/cmdsubst.png) + +To select which theme to use for `$(...)` set the key `secondary=` in [theme ini file](https://github.com/zdharma/fast-syntax-highlighting/blob/master/themes/free.ini#L7). +All shipped themes have this key set (only the `default` theme doesn't use second theme). + +Also added correct highlighting of descriptor-variables passed to `exec`: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/execfd.png) + +**2018-05-30** + +For-loop is highlighted, it has separate settings in [theme file](https://github.com/zdharma/fast-syntax-highlighting/blob/master/themes/free.ini). + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/for-loop.png) + +**2018-05-27** + +Added support for 256-color themes. There are six themes shipped with FSH. The command to +switch theme is `fast-theme {theme-name}`, it has a completion which lists available themes +and options. Checkout [asciinema recording](https://asciinema.org/a/183814) that presents +the themes. + +**2018-05-25** + +Hash holding paths that shouldn't be grepped (globbed) – blacklist for slow disks, mounts, etc.: + +```zsh +typeset -gA FAST_BLIST_PATTERNS +FAST_BLIST_PATTERNS[/mount/nfs1/*]=1 +FAST_BLIST_PATTERNS[/mount/disk2/*]=1 +``` + +**2018-05-23** + +Assign colorizing now spans to variables defined by `typeset`, `export`, `local`, etc.: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/typeset.png) + +Also, `zcalc` has a separate math mode and specialized highlighting – no more light-red colors because of +treating `zcalc` like a regular command-line: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/zcalc.png) + +**2018-05-22** + +Array assignments were still boring, so I throwed in bracked colorizing: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/array-assign.png) + +**2018-05-22** + +Assignments are no more one-colour default-white. When used in assignment, highlighted are: + +- variables (outside strings), +- strings (double-quoted and single-quoted), +- math-mode (`val=$(( ... ))`). + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/assign.png) + +**2018-01-06** + +Math mode is highlighted – expressions `(( ... ))` and `$(( ... ))`. Empty variables are colorized as red. +There are 3 style names (fields of +[FAST_HIGHLIGHT_STYLES](https://github.com/zdharma/fast-syntax-highlighting/blob/master/fast-highlight#L34) +hash) for math-variable, number and empty variable (error): `mathvar`, `mathnum`, `matherr`. You can set +them (like the animation below shows) to change colors. + +![animation](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/math.gif) diff --git a/.zsh/fsh/CHROMA_GUIDE.adoc b/.zsh/fsh/CHROMA_GUIDE.adoc new file mode 100644 index 0000000..579f192 --- /dev/null +++ b/.zsh/fsh/CHROMA_GUIDE.adoc @@ -0,0 +1,166 @@ +# Chroma Guide for F-Sy-H + +## Motivation + +Someone might want to create a detailed highlighting for a **specific program** +and this document helps achieving this. It explains how chroma functions – the +code behind such detailed highlighting – are constructed and used. + +## Keywords + +- `chroma` - a shorthand for `chroma function` – the thing that literally colorizes selected commands, like `git`, `grep`, etc. invocations, see `chroma function` below, +- `big loop` - main highlighting code, a loop over tokens and at least 2 large structular constructs (big `if` and `case`); + it is advanced, e.g. parses `case` statements, here-string, it basically constitutes 90% of the F-Sy-H project, +- `chroma function` - a plugin-function that is called when a specific command occurs (e.g. when user enters `git` at + command line) suppressing activity of `big loop` (i.e. no standard highlighting unless requested), +- `token` - result of splitting whole command line (i.e. `$BUFFER`, the Zle variable) into bits called tokens, which are + words in general, separated by spaces on the command line. + +## Overview Of Functioning + +1. Big loop is working – token by token processes command line, changes states (e.g. enters state "inside case + statement") and in the end decides on color of the token currently processed. + +2. Big loop occurs a command that has a chroma, e.g. `git`. + +3. Big loop enters "chroma" state, calls associated chroma function. + +4. Chroma takes care of "chroma" state, ensures it will be set also for next token. + +5. "chroma" state is active, so all following tokens are routed to the chroma (in general skipping big-loop, see next items), + +6. When processing of a single token is complete, the associated chroma returns 0 + (shell-truth) to request no further processing by the big loop. + +7. It can also return 1 so that single, current token will be passed into big-loop + for processing (to do a standard highlighting). + +## Chroma-Function Arguments + +- `$1` - 0 or 1, denoting if it's the first call to the chroma, or a following one, + +- `$2` - the current token, also accessible by `$\__arg` from the upper scope - + basically a private copy of `$__arg`; the token can be eg.: "grep", + +- `$3` - a private copy of `$_start_pos`, i.e. the position of the token in the + command line buffer, used to add region_highlight entry (see man), + because Zsh colorizes by *ranges* applied onto command line buffer (e.g. + `from-10 to-13 fg=red`), + +- `$4` - a private copy of `$_end_pos` from the upper scope; denotes where current token + ends (at which index in the string being the command line). + +So example invocation could look like this: + +---- +chroma/-example.ch 1 "grep" "$_start_pos" "$_end_pos" +---- + +Big-loop will be doing such calls for the user, after occurring a specific chroma-enabled command (like e.g. `awk`), and then until chroma will detect end of this chroma-enabled command (end of whole invocation, with arguments, etc.; in other words, when e.g. new line or `;`-character occurs, etc.). + +## Example Chroma-Function + +[source,zsh] +---- +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Example chroma function. It colorizes first two arguments as `builtin' style, +# third and following arguments as `globbing' style. First two arguments may +# be "strings", they will be passed through to normal higlighter (by returning 1). +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - like above document says +# +# $3 - ... +# +# $4 - ... +# +# Other tips are: +# - $CURSOR holds cursor position +# - $BUFFER holds whole command line buffer +# - $LBUFFER holds command line buffer that is left from the cursor, i.e. it's a +# BUFFER substring 1 .. $CURSOR +# - $RBUFFER is the same as LBUFFER but holds part of BUFFER right to the cursor +# +# The function receives $BUFFER but via sequence of tokens, which are shell words, +# e.g. "a b c" is a shell word, while a b c are 3 shell words. +# +# FAST_HIGHLIGHT is a friendly hash array which allows to store strings without +# creating global parameters (variables). If you need hash, go ahead and use it, +# declaring first, under some distinct name like: typeset -gA CHROMA_EXPLE_DICT. +# Remember to reset the hash and others at __first_call == 1, so that you have +# a fresh state for new command. + +# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. +# So the below 8192 assignment takes care that next token will be routed to chroma. +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global string variables. + FAST_HIGHLIGHT[chroma-example-counter]=0 + + # Set style for region_highlight entry. It is used below in + # '[[ -n "$__style" ]] ...' line, which adds highlight entry, + # like "10 12 fg=green", through `reply' array. + # + # Could check if command `example' exists and set `unknown-token' + # style instead of `command' + __style=${FAST_THEME_NAME}command + +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + else + # Count non-option tokens + (( FAST_HIGHLIGHT[chroma-example-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-example-counter] )) + + # Colorize 1..2 as builtin, 3.. as glob + if (( FAST_HIGHLIGHT[chroma-example-counter] <= 2 )); then + if [[ "$__wrd" = \"* ]]; then + # Pass through, fsh main code will do the highlight! + return 1 + else + __style=${FAST_THEME_NAME}builtin + fi + else + __style=${FAST_THEME_NAME}globbing + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# If 1 will be added to __start_pos, this will highlight "oken". +# If 1 will be subtracted from __end_pos, this will highlight "toke". +# $PREBUFFER is for specific situations when users does command \ +# i.e. when multi-line command using backslash is entered. +# +# This is a common place of adding such entry, but any above code can do +# it itself (and it does in other chromas) and skip setting __style to +# this way disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves. +# _start_pos=$_end_pos advainces pointers in command line buffer. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 +---- + diff --git a/.zsh/fsh/DONATIONS.md b/.zsh/fsh/DONATIONS.md new file mode 100644 index 0000000..fc22058 --- /dev/null +++ b/.zsh/fsh/DONATIONS.md @@ -0,0 +1,441 @@ + + +**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* + +- [2018-08-14, received $30](#2018-08-14-received-30) +- [2018-08-03, received $8](#2018-08-03-received-8) +- [2018-08-02, received $3 from Patreon](#2018-08-02-received-3-from-patreon) +- [2018-07-31, received $7](#2018-07-31-received-7) +- [2018-07-28, received $2](#2018-07-28-received-2) +- [2018-07-25, received $3](#2018-07-25-received-3) +- [2018-07-20, received $3](#2018-07-20-received-3) +- [2018-06-17, received ~$155 (200 CAD)](#2018-06-17-received-155-200-cad) +- [2018-06-10, received $10](#2018-06-10-received-10) +- [2018-05-25, received $50](#2018-05-25-received-50) + + + +Below are reports about what is being done with donations, i.e. which commits +are created thanks to them, which new features are added, etc. From the money +I receive I buy myself coffee and organize the time to work on the requested +features, sometimes many days in a row. + +## 2018-08-14, received $30 + + * **Project**: **[Zplugin](https://github.com/zdharma/zplugin)** + * **Goal**: Create a binary Zsh module with one Zplugin optimization and optionally some + other features. + * **Status**: The job is done. + +Thanks to this donation I have finally started to code **[binary Zplugin module]( +https://github.com/zdharma/zplugin#quick-start-module-only)**, which is a big step onward +in evolution of Zplugin. I've implemented and published the module with 3 complete +features: 1) `load` optimization, 2) autocompilation of scripts, 3) profiling of script +load times. + +Commit list: +``` +2018-08-22 7b96fad doc: mod-install.sh +2018-08-22 ba1ba64 module: Update zpmod usage text +2018-08-22 b0d72e8 zplugin,*autoload: `module' command, manages new zdharma/zplugin module +2018-08-22 706bbb3 Update Zsh source files to latest +2018-08-20 b77426f module: source-study builds report with milliseconds without fractions +2018-08-20 c3cc09b module: Updated zpmod_usage, i.a. with `source-study' sub-command +2018-08-20 6190295 module: Go back to subcommand-interface to `zpmod'; simple option parser +2018-08-20 881005f module: Report on sourcing times is shown on `zpmod -S`. Done generation +2018-08-19 e5d046a module: Correct conditions on zwc file vs. script file (after stats) +2018-08-19 1282c21 module: Duration of sourcing a file is measured and stored into a hash +2018-08-18 e080153 module: Overload both `source' and `.' builtins +2018-08-18 580efb8 module: Invoke bin_zcompile with -U option (i.e. no alias expansion) +2018-08-18 b7d9836 module: Custom `source' ensures script is compiled, compiles if not +2018-08-18 1e75a47 module: Code cleanup, vim folding +2018-08-18 a4a02f3 module: Finally working `source'/`.' overload (used options translating) +2018-08-16 99bba56 module: zpmod_usage gained content +2018-08-16 04703cd module: Add the main builtin zpmod with report-append which is working +2018-08-16 cd6dc19 module: my_ztrdup_glen, zp_unmetafy_zalloc +2018-08-16 6d44e36 module: Cleanup, `source' overload after patron leoj3n restarted module +``` + +## 2018-08-03, received $8 + + * **Project**: **[zdharma/history-search-multi-word](https://github.com/zdharma/history-search-multi-word)** + * **Goal**: Allow calling `zle reset-prompt` (Zshell feature). + * **Status**: The job is done. + +A user wanted to be able to call `reset-prompt` Zshell widget without disturbing my project +`history-search-multi-word`. I've implemented the necessary changes to HSMW. + +Commit list: + +``` +2018-08-04 9745d3d hsmw: reset-prompt-protect zstyle – allow users to run zle reset-prompt +2018-08-04 ce48a53 hsmw: More typo-like lackings of % substitution +2018-08-04 7e2d79b hsmw: A somewhat typo, missing % substitution +``` + +## 2018-08-02, received $3 from Patreon + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: No goal set up. + * **Status**: Bug-fixing work. + +I did bug-fixing run on `fast-syntax-highlighting`, spotted many small and sometimes important things to +improve. Did one bigger thing – added global-aliases functionality. + +Commit list: + +``` +2018-08-02 1e854f5 -autoload.ch: Don't check existence for arguments that are variables +2018-08-02 14cdc5e *-string-*: Support highlighter cooperation in presence of $PREBUFFER +2018-08-02 2d8f0e4 *-highlight: Correctly highlight $VAR, $~VAR, ${+VAR}, etc. in strings +2018-08-02 e3032d9 *-highlight: ${#PREBUFFER} -> __PBUFLEN, equal performance +2018-08-02 f0a7121 *-highlight: Make case conditions and brackets highlighter compatible +2018-08-02 781f68e *-highlight: Recognize more case-item-end tokens +2018-08-02 206c122 *-highlight: Remove unused 4th __arg_type +2018-08-02 c6da477 *-string-*: Handle 'abc\' – no slash-quoting here. Full quoting support +2018-08-02 52e0176 *-string-*: Fix bug, third level was getting wrong style +2018-08-02 5edbfae -git.ch: Support "--message=..." syntax (commit) +2018-08-02 669d4b7 -git.ch: Handle "--" argument (stops options) +2018-08-02 4fae1f2 -make.ch: Handle make's -f option +2018-08-02 3fd32fe -make.ch: Handle make's -C option +2018-08-02 31751f5 -make.ch: Recognize options that obtain argument +2018-08-02 e480f18 -make.ch: Fix reply-var clash, gained consistency +2018-08-02 0e8bc1e Updated README.md +2018-08-02 eee0034 images: global-alias.png +2018-08-02 00b41ef *-highlight,themes,fast-theme: Support for global aliases #41 +``` + +## 2018-07-31, received $7 + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: Implement ideal brackets highlighting. + * **Status**: The job is done. + +When a source code is edited e.g. in `Notepad++` or some IDE, then most often brackets are somehow matched to +each other, so that the programmer can detect mistakes. `Fast-syntax-highlighting` too gained that feature. It +was done in such a way that FSH cannot make any mistake, colors will perfectly match brackets to each other. + +Commit list: + +``` +2018-07-31 2889860 *-highlight: Correct place to initialize $_FAST_COMPLEX_BRACKETS +2018-07-31 2bde2a9 Performance status -15/8/8 +2018-07-31 5078261 *-highlight,README: Brackets highlighter active by default +2018-07-31 2ee3073 *-highlight,*string-*: Brackets in [[..]], ((..)), etc. handled normally +2018-07-31 776b12d plugin.zsh: $_ZSH_HIGHLIGHT_MAIN_CACHE -> $_FAST_MAIN_CACHE +2018-07-30 2867712 plugin.zsh: Fix array parameter created without declaring #43 +2018-07-30 cbe5fc8 Updated README.md +2018-07-30 2bd3291 images: brackets.gif +2018-07-30 ef23a96 *-string-*: Bug-fix, correctly use theme styles +2018-07-30 9046f82 plugin.zsh: Attach the new brackets highlighter; F_H[use_brackets]=1 +2018-07-30 b33a5fd fast-theme: Support 4 new styles (for brackets) +2018-07-30 a03f004 themes: Add 4 new styles (brackets) +2018-07-30 2448cdc *-string-*: Additional highlight of bracket under cursor; more styles +2018-07-30 5e1795e *-string-*: Highlighter for brackets, handles all quotings; detached +``` + +## 2018-07-28, received $2 + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: Distinguish file and directory when highlighting + * **Status**: The job is done. + +A user requested that when `fast-syntax-highlighting` colorizes the command line it should use different +styles (e.g. colors) for token that's a *file* and that's a *directory*. It was a reasonable idea and I've +implemented it. + +Commit list: +``` +2018-07-28 7f48e04 themes: Extend all themes with new style `path-to-dir' +2018-07-28 c7c6a91 fast-theme: Support for new style `path-to-dir' +2018-07-28 264676c *-highlight: Differentiate path and to-dir path. New style: path-to-dir +``` + +## 2018-07-25, received $3 + + * **Project**: **[zdharma/zshelldoc](https://github.com/zdharma/zshelldoc)** + * **Goal**: Implement documenting of used environment variables. + * **Status**: The job is done. + +Zshelldoc generates code-documentation like Doxygen or Javadoc, etc. User requested a +new feature: the generated docs should enumerate environment variables used and/or +exported by every function. Everything went fine and this feature has been implemented. + +Commit list: + +``` +2018-07-26 f63ea25 Updated README.md +2018-07-26 3af0cf7 *detect: Get `var' from ${var:-...} and ${...:+${var}} and other subst +2018-07-25 2932510 *adoc: Better language in output document (about exported vars) #5 +2018-07-25 f858dd8 *adoc: Include (in the output document) data on env-vars used #5 +2018-07-25 80e3763 *adoc: Include data on exports (environment) in the output document #5 +2018-07-25 ca576e2 *detect: Detect which env-vars are used, store meta-data in data/ #5 +2018-07-25 f369dcc *detect: Function `find-variables' reported "$" as a variable, fixed #5 +2018-07-25 e243dab *detect: Function `find-variables' #5 +2018-07-25 5b34bb1 *transform: Detect exports done by function/script-body, store #5 +``` + +## 2018-07-20, received $3 + + * **Project**: **[zdharma/zshelldoc](https://github.com/zdharma/zshelldoc)** + * **Goal**: Implement stripping of leading `#` char from functions' descriptions. + * **Status**: The job is done. + +A user didn't like that functions' descriptions in the JavaDoc-like document (generated with Zshelldoc) all +contain a leading `#` character. I've added stripping of this character (it is there in the processed source +code) controlled by a new Zshelldoc option. + +Commit list: +``` +2018-07-20 172c220 zsd,*adoc,README: Option --scomm to strip "#" from function descriptions +``` + +## 2018-06-17, received ~$155 (200 CAD) + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: No goal set up. + * **Status**: Done intense research. + +I've created 2 new branches: `Hue-optimization` (33 commits) and `Tidbits-feature` (22 commits). Those were +branches with architectural changes and extraordinary features. The changes yielded to be too slow, and I had +to withdraw the merge. Below are fixing and optimizing commits (i.e. the valuable ones) that I've restored +from the two branches into master. + +Commit list: +``` +2018-07-21 dab6576 *-highlight: Merge-restore: remove old comments +2018-07-21 637521f *-highlight: Merge-restore: a threshold on # of zle .redisplay calls +2018-07-21 4163d4d *-highlight: Merge-restore: optimize four $__arg[1] = ... cases +2018-07-21 0f01195 *-highlight: Merge-restore: can remove one (Q) dequoting +2018-07-21 39a4ec6 *-highlight: Merge-restore: $v = A* is faster than $v[1] = A, tests: +2018-07-21 99d6b33 *-highlight: Merge-restore: optimize-out ${var:1} Bash syntax +2018-07-21 719c092 *-highlight: Merge-restore: allow $V/cmd, "$V/cmd, "$V/cmd", "${V}/cmd" +2018-07-21 026941d *-highlight: Merge-restore: stack pop in single instruction, not two +2018-07-21 3467e3d *-highlight: Merge-restore: more reasonable redirection-detecting code +2018-07-21 00d25ee *-highlight: Merge-restore: one active_command="$__arg" not needed (?) +2018-07-21 1daa6b3 *-highlight: Merge-restore: simplify ; and \n code short-paths +2018-07-21 55d65be *-highlight: Merge-restore: proc_buf advancement via patterns (not (i)) +2018-07-21 cc55546 *-highlight: Merge-restore: pattern matching to replace (i) flag +``` + +## 2018-06-10, received $10 + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: No goal set up. + * **Status**: Done intense experimenting. + +I was working on *chromas* – command-specific colorization. I've added `which` and +`printf` colorization, then added asynchronous path checking (needed on slow network +drives), then coded experimental `ZPath` feature for chromas, but it couldn't be optimized +so I had to resign of it. + +Commit list: +``` +2018-06-12 c4ed1c6 Optimization – the same idea as in previous patch, better method +2018-06-12 c36feef Optimization – a) don't index large buffer, b) with negative index +2018-06-12 2f03829 Performance status 2298 / 1850 +2018-06-12 14f5159 New working feature – ZPath. It requires optimization +2018-06-12 e027c40 -which.ch: One of commands can apparently return via stderr (#27) +2018-06-11 5b8004f New chroma `ruby', works like chroma `perl', checks syntax via -ce opts +2018-06-10 ca2e18b *-highlight: Async path checking has now 8-second cache +2018-06-10 e071469 *-highlight: Remove path-exists queue clearing +2018-06-10 5a6684c *-highlight: Support for asynchronous path checking +2018-06-10 1d7d6f5 New chroma: `printf', highlights special sequences like %s, %20s, etc. +2018-06-10 8f59868 -which.ch: Update main comment on purpose of this chroma +2018-06-10 5f4ece2 -which.ch: Added `whatis', it has only 1st line if output used +2018-06-10 e2d173e -which.ch: Uplift: handle `which' called on a function, /usr/bin/which +``` + +## 2018-05-25, received $50 + + * **Project**: **[zdharma/fast-syntax-highlighting](https://github.com/zdharma/fast-syntax-highlighting)** + * **Goal**: No goal set up. + * **Status**: New ideas and features. + +I was working from May, 25 to June, 9 and came up with key ideas and implemented them. First were *themes* +that were very special because they were using `INI` files instead of some Zsh-script format. Creating themes +for `fast-syntax-highlighting` is thus easy and fun. Then I came up with *chromas*, command-specific +highlighting, which redefine how syntax-highlighting for Zshell works – detailed highlighting for e.g. Git +became possible, the user is informed about e.g. a mistake even before running a command. Overall 178 commits +in 16 days. + +``` +2018-06-09 3f72e6c -git.ch: `revert' works almost like `checkout', attach `revert' there +2018-06-09 b892743 Updated CHROMA_GUIDE.adoc +2018-06-09 f05643d Revert "Revert "Updated CHROMA_GUIDE.md"" +2018-06-09 729bf7f Revert "Revert "CHROMA_GUIDE: Remove redundant comments, uplift"" +2018-06-09 48a4e0c Revert "CHROMA_GUIDE: Remove redundant comments, uplift" +2018-06-09 55ede0a Revert "Updated CHROMA_GUIDE.md" +2018-06-09 17a28ba New chroma `-docker.ch' that verifies image ID passed to `image rm' +2018-06-09 868812a -make.ch,*-make-targets: Check Makefile exists, use 7 second cache, #24 +2018-06-09 73df278 -sh.ch: Attach fish, has -c option, though different syntax, let's try +2018-06-09 3a73b8e Updated CHROMA_GUIDE.md +2018-06-09 29d04c8 CHROMA_GUIDE: Remove redundant comments, uplift +2018-06-09 22ce1d8 -sh.ch,*-highlight: Attach to 2 other shells, Zsh and Bash +2018-06-09 f54e44f New chroma `-sh.ch', colorizes code passed to `sh' with -c option +2018-06-09 f5d2375 CHROMA_GUIDE: Add example code block (rendered broken in mdown) +2018-06-09 08f4b28 CHROMA_GUIDE: Switch to asciidoc (rename) +2018-06-09 4e03609 CHROMA_GUIDE.md +2018-06-09 bbcf2d6 -source.ch: Word "source" should be highlighted as builtin +2018-06-09 6739b8b New chroma – `source' to handle . and source builtins +2018-06-09 b961211 gitignore: ignore more paths +2018-06-09 59d5d09 Updated README.md +2018-06-09 f6d4d19 Updated README.md +2018-06-09 eb31324 Update README.md (figlet logo) +2018-06-09 71dcc5f Performance status 298 / 479 +2018-06-09 00c5f8f *-highlight: Add comments +2018-06-09 232903c -awk.ch: Highlight `sub' function, not working {, } highlighting +2018-06-09 b5241ba *-highlight: Much better $( ) recursion, would say problems-free, maybe +2018-06-08 6c69437 *-highlight: Larger buffer (110 -> 250) for $( ) matching +2018-06-08 f2b7a96 -awk.ch: Syntax check code passed to awk. Awk is very forgiving, though +2018-06-08 c53d8ba -vim.ch: Pass almost everything to big-loop, check if vim exists +2018-06-08 7fbf7cd chroma: New chroma `vim', shows last opened files under prompt +2018-06-08 06e4570 gitignore: Extend .gitignore +2018-06-08 3184ba1 chroma: All chroma functions end chroma mode on e.g. | and similar +2018-06-08 070077d *-highlight,-example.ch: Rename arg_type -> __arg_type, use it to end +2018-06-08 6c2411e -awk.ch: Use the new theme style `subtle-bg' +2018-06-08 9ec8d63 themes: All themes (remaining 4) to support `subtle-bg' style +2018-06-08 66e848b fast-theme: New theme key `subtle-bg', default & clean.ini support it +2018-06-08 1e794f9 -awk.ch: More keywords highlighted +2018-06-08 f3bbaca -awk.ch: Don't highlight keywords when they only contain proper keyword +2018-06-08 e4d5283 -awk.ch: Fix mistake (indices), was highlighting 1 extra trailing letter +2018-06-08 eebbb19 -awk.ch: Initialize FSH_LIST +2018-06-08 8ec24ca *-highlight: Missing math function for awk +2018-06-08 d8e423a -awk.ch: Highlight more keywords, via more general code +2018-06-07 ee26e66 Commit missing -fast-make-targets +2018-06-07 9d4f2b5 New chroma `-awk.ch', colorizes regex characters and a keyword (print) +2018-06-07 def5133 -example.ch: Add comments +2018-06-07 f31a2d0 New chroma -make.ch, verifies if target is correct +2018-06-07 623b8ce -perl.ch: Use correct keys in FAST_HIGHLIGHT hash +2018-06-07 090f420 themes: Make all themes provide {in,}correct-subtle styles +2018-06-07 2201fb6 New -perl.ch chroma, syntax-checks perl code; 2 new theme entries +2018-06-06 4b9598e *-highlight: Fix bug in math highlight – allow variables starting with _ +2018-06-06 708afec *-highlight: Fix FAST_BLIST_PATTERNS not expanding path to absolute one +2018-06-06 caef05a -example.ch: Update, fix typos, remove unused code +2018-06-06 3fb192a Updated README.md +2018-06-06 6de0c82 images: git_chroma.png +2018-06-06 2852fdd -grep.ch (new): Special highlighting for grep – -grep.ch chroma function +2018-06-06 f216785 -example.ch: Added comments +2018-06-06 4ab5b36 -example.ch: Add comments +2018-06-06 380cd12 -example.ch: Added comments +2018-06-06 c8947cc -example.ch: Add comments +2018-06-06 f2e273e -example.ch: Add comments +2018-06-06 2f3565b plugin.zsh: Fix parse error +2018-06-06 4f1a9bd plugin.zsh: Added $fpath handling, to match what README contains +2018-06-06 cc9adb5 -example.ch: Change and extend comments +2018-06-06 3128fff -git.ch: More intelligent `checkout' highlighting – ref is first +2018-06-06 4b6f54b -git.ch: Support for `checkout' subcommand +2018-06-06 1930d37 -example.ch: Added example chroma function +2018-06-05 d79cd85 -git.ch: Add comments +2018-06-05 1473c9e -git.ch: Add comments +2018-06-05 0cb1419 -git.ch: Message passed after -m is checked for the 72 chars boundary +2018-06-05 3f99944 -git.ch: Architectural uplift of git chroma +2018-06-05 e044d13 -git.ch: Single place to add entry to $reply (target: region_highlight) +2018-06-05 3a84364 -git.ch: Handle quoted non-option arguments, also partly quoted: "abc +2018-06-05 d635bf4 -fast-run-git-command, it handles cache automatically, decimates source +2018-06-05 102ea78 -git.ch: Smart handling of `git push', remotes and branches are verified +2018-06-04 be88850 Performance status [+] 39+77=116 / -26+24=-2 +2018-06-04 0e033f8 Experimental chroma support, currently active only on command `git' +2018-06-04 43ae221 *-highlight: Emacs mode-line +2018-06-04 938ad29 test: New "-git" parsing option, test results, -git.ch included +2018-06-04 e433fbc fast-theme: Explicitly return 0; added Emacs mode-line +2018-06-04 66e9b3c *-highlight: Detection of $( ) now doesn't go for $(( )) as a candidate +2018-06-04 488a580 chroma: Empty chroma function for `git' +2018-06-04 f54d770 *-highlight: Rename $cur_cmd to $active_command +2018-06-04 3f24e68 *-highlight: Make sudo and always-block compatible with `case' handling +2018-06-02 cd82637 themes: forest.ini to support 3 new `case' styles +2018-06-02 e1e993e themes: safari.ini & zdharma.ini to support 3 new `case' styles +2018-06-02 2e78a02 themes: clean.ini & default.ini to support 3 new `case' styles +2018-06-02 c1c3aab themes: free.ini to support 3 new `case' styles +2018-06-02 70a7e18 fast-theme,*-highlight: 3 new styles for `case' higlighting +2018-06-02 8d90dc2 *-highlight: Support for `case' highlighting +2018-06-02 10d291c *-highlight: Softer state manipulation, less rigid =1 etc. assignments +2018-06-02 6159507 *-highlight: Don't highlight closing ) with style `assign' +2018-06-02 1fc2450 *-highlight: One complex math command optimization, top of the loop +2018-06-02 cc49247 *-highlight: Fix improper state after assignment (command | regular) +2018-06-02 02942b8 Updated README.md +2018-06-02 5e28259 images: eval_cmp.png +2018-06-02 df92fed *-highlight: Fix removal of trailing "/' when recursing in eval +2018-06-02 4f61938 Performance status 46 / 44 +2018-06-02 a5ade0e *-highlight: Recursive highlighting of eval string argument +2018-06-02 e91847b *-highlight: Don't recurse when not at main *-process call +2018-06-02 fca8603 *-highlight: Support assignments of arrays when key is taken from array +2018-06-02 5d70f01 *-highlight: Math highlighting recognizes ${+VAR} +2018-06-02 c48eb0d *-highlight: Math colorizing recognizes variables in braces ${HISTISZE} +2018-06-02 53dd85a *-highlight: Allow -- for precommand modifiers command & exec +2018-06-02 d9fe110 *-highlight: Detect globbing also when `##' occurs +2018-06-02 55c923d Performance status 132 / 66 +2018-06-02 3bd8f07 themes: safari.ini to have globbing color specifically selected +2018-06-02 2b55260 themes: free.ini to have globbing color specifically selected +2018-06-02 494868e themes: clean.ini to have globbing color specifically selected +2018-06-01 fca6b3d images: herestring.png #9 +2018-06-01 f9842c1 themes: forest.ini to use underline instead of bg color #9 +2018-06-01 c25c539 themes: Small tune-up of forest & zdharma themes for here-string #9 +2018-06-01 988d504 themes: Rudimentary (all same) configuration of here-string tokens #9 +2018-06-01 99842d2 fast-theme,*-highlight: Support for here-string, can use bg color #9 +2018-06-01 f739c30 Updated README.md +2018-06-01 7fa8451 images: execfd.png execfd_cmp.png +2018-06-01 d7384f1 themes: All themes gained `exec-descriptor=` key, now supported by code +2018-06-01 d66d140 themes: Fix improper effect of s/red/.../ substitution in clean,forest +2018-06-01 f7ee5e2 fast-theme,*-highlight: Support highlighting of {FD} etc. passed to exec +2018-06-01 e5c5534 *-highlight: Proper states for precmd (command,exec) option handling +2018-06-01 647b198 images: New cmdsubst.png +2018-06-01 74bdc4c Updated README.md +2018-06-01 86eb15e images: theme.png +2018-06-01 5169e82 Updated README.md +2018-06-01 1c462b7 Updated README.md +2018-06-01 4c21da4 images: cmdsubst.png +2018-06-01 b39996e *-highlight: Switch theme to secondary when descending into $() #15 +2018-06-01 bf96045 themes: Equip all themes with key `secondary' (an alternate theme) #15 +2018-06-01 aa1b112 fast-theme: Generate secondary theme (from key `secondary' in theme) #15 +2018-06-01 6dd3bd3 *-highlight: Support for multiple active themes #15 +2018-06-01 8a32944 *-highlight: Fix "$() found?" comparison +2018-06-01 3651605 *-highlight: Significant change: the parser is called recursively on $() +2018-05-31 882d88b test,*-highlight: New -ooo performance test; highlighter takes arguments +2018-05-31 5ba1178 *-highlight: Optimization - compute __arg length once +2018-05-30 b2a0126 *-highlight: Allow multiple separate options for `command', `exec' (#10) +2018-05-30 5804e9a *-highlight: Correct state after option for precommand (#10) +2018-05-30 1247b64 *-highlight: Simpler and more accurate option-testing for exec, command (#10) +2018-05-30 d87fed4 *-highlight: Correctly highlight options for `command' and `exec' (#10) +2018-05-30 8c3e75e *-highlight: Double-hyphen (--) stops option recognition and colorizing +2018-05-30 1c5a56c *-highlight: Support ${VAR} at command position (not only $VAR) +2018-05-30 f19d761 Updated README.md +2018-05-30 4a27351 images: for-loop +2018-05-30 4d650de themes: zdharma.ini to support for-loop +2018-05-30 45cafbc themes: safari.ini to support for-loop +2018-05-30 8bb9ee0 themes: free.ini to support for-loop +2018-05-30 f25a059 themes: forest.ini to support for-loop +2018-05-29 093d79e themes: default.ini to support for-loop +2018-05-29 446cb7b clean.ini,fast-theme: Clean-theme & theme subsystem to support for-loop +2018-05-29 1bb701f *-highlight: Move $variable highlighting from case to if-block +2018-05-29 b8413e9 *-highlight: For-loop highlighting, working, needs few upgrades +2018-05-28 7bec6e5 *-highlight: Three more simple vs. complex math operation optimizations +2018-05-27 baae683 *-highlight: Optimise complex math command into single one with & and ~ +2018-05-27 2dc3103 *-highlight: Optimise complex math command into single one with & and ~ +2018-05-27 291f905 _fast-theme: Update -t/--test description +2018-05-27 ec305f6 fast-theme: Help message treats about -t/--test +2018-05-27 0e1d19a Updated README.md +2018-05-27 5c3c911 Updated README.md +2018-05-26 76af248 themes: A fix for zdharma theme, 61 -> 63, a lighter color for builtins +2018-05-26 8eca0f2 *fast-theme: Ability to test theme after setting it (-t/--test) +2018-05-26 d3a7922 *-highlight: Fix in_array_assignment setting when closing ) found +2018-05-26 796c482 *-highlight: Make parameters' names exotic blank-var detection to work +2018-05-26 ae3913f _fast-theme: Complete theme names +2018-05-26 d212945 *-highlight,plugin.zsh,default.ini: Uplift of fg=112-fix code +2018-05-26 ee56f65 *-highlight,plugin.zsh: Final fix for fg=112 assignment – use zstyle +2018-05-26 391f5a4 fast-theme: Set `theme' zstyle in `:plugin:fast...' to given theme +2018-05-26 e0dc086 plugin.zsh: Fix the fg=112 assignment done for `variable' style +2018-05-26 17c9286 Updated README.md +2018-05-26 4774c1c fast-theme: Add completion for this function +2018-05-26 d971f39 fast-theme: Detect lack of theme name in arguments +2018-05-26 74f0d4d fast-theme: Use standard option parsing (zparseopts) and typical options +2018-05-26 d9c6180 New theme: `forest' +2018-05-26 419c156 New theme: `zdharma' +2018-05-26 a7735df gitignore +2018-05-26 99db69a New theme: `free' +2018-05-26 73619ff New theme: `clean' +2018-05-25 52307fb Theme support, 1 extra theme – `safari' +2018-05-25 41df55b *-highlight: (k) subscript flag is sufficient, no need for (K) +2018-05-25 cb21c05 Updated README.md +2018-05-25 a580cff *-highlight: FAST_BLIST_PATTERNS +``` diff --git a/.zsh/fsh/HACKING.md b/.zsh/fsh/HACKING.md deleted file mode 100644 index ddd39a4..0000000 --- a/.zsh/fsh/HACKING.md +++ /dev/null @@ -1,99 +0,0 @@ -Hacking on zsh-syntax-highlighting itself -========================================= - -This document includes information for people working on z-sy-h itself: on the -core driver (`zsh-syntax-highlighting.zsh`), on the highlighters in the -distribution, and on the test suite. It does not target third-party -highlighter authors (although they may find it an interesting read). - -The `main` highlighter ----------------------- - -The following function `pz` is useful when working on the `main` highlighting: - -```zsh -pq() { - (( $#argv )) || return 0 - print -r -l -- ${(qqqq)argv} -} -pz() { - local arg - for arg; do - pq ${(z)arg} - done -} -``` - -It prints, for each argument, its token breakdown, similar to how the main -loop of the `main` highlighter sees it. - -Testing the `brackets` highlighter ----------------------------------- - -Since the test harness empties `ZSH_HIGHLIGHT_STYLES` and the `brackets` -highlighter interrogates `ZSH_HIGHLIGHT_STYLES` to determine how to highlight, -tests must set the `bracket-level-#` keys themselves. For example: - -```zsh -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= - -BUFFER='echo ({x})' - -expected_region_highlight=( - "6 6 bracket-level-1" # ( - "7 7 bracket-level-2" # { - "9 9 bracket-level-2" # } - "10 10 bracket-level-1" # ) -) -``` - -Testing the `pattern` and `regexp` highlighters ------------------------------------------------ - -Because the `pattern` and `regexp` highlighters modifies `region_highlight` -directly instead of using `_zsh_highlight_add_highlight`, the test harness -cannot get the `ZSH_HIGHLIGHT_STYLES` keys. Therefore, when writing tests, use -the style itself as third word (cf. the -[documentation for `expected_region_highlight`](docs/highlighters.md)). For example: - -```zsh -ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') - -BUFFER='rm -rf /' - -expected_region_highlight=( - "1 8 fg=white,bold,bg=red" # rm -rf / -) -``` - -Memos and commas ----------------- - -We append to `region_highlight` as follows: - - -```zsh -region_highlight+=("$start $end $spec, memo=zsh-syntax-highlighting") -``` - -That comma is required to cause zsh 5.8 and older to ignore the memo without -ignoring the `$spec`. It's a hack, but given that no further 5.8.x patch -releases are planned, it's been deemed acceptable. See issue #418 and the -cross-referenced issues. - - -Miscellany ----------- - -If you work on the driver (`zsh-syntax-highlighting.zsh`), you may find the following zstyle useful: - -```zsh -zstyle ':completion:*:*:*:*:globbed-files' ignored-patterns {'*/',}zsh-syntax-highlighting.plugin.zsh -``` - -IRC channel ------------ - -We're on #zsh-syntax-highlighting on Libera.Chat. - diff --git a/.zsh/fsh/INSTALL.md b/.zsh/fsh/INSTALL.md deleted file mode 100644 index 48b724f..0000000 --- a/.zsh/fsh/INSTALL.md +++ /dev/null @@ -1,131 +0,0 @@ -How to install --------------- - -### Using packages - -* Arch Linux: [community/zsh-syntax-highlighting][arch-package] / [AUR/zsh-syntax-highlighting-git][AUR-package] -* Debian: `zsh-syntax-highlighting` package [in `stretch`][debian-package] (or in [OBS repository][obs-repository]) -* Fedora: [zsh-syntax-highlighting package][fedora-package-alt] in Fedora 24+ (or in [OBS repository][obs-repository]) -* FreeBSD: `pkg install zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][freebsd-port]) -* Gentoo: [app-shells/zsh-syntax-highlighting][gentoo-repository] -* Mac OS X / Homebrew: [brew install zsh-syntax-highlighting][brew-package] -* NetBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][netbsd-port]) -* OpenBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][openbsd-port]) -* openSUSE / SLE: `zsh-syntax-highlighting` package in [OBS repository][obs-repository] -* RHEL / CentOS / Scientific Linux: `zsh-syntax-highlighting` package in [OBS repository][obs-repository] -* Ubuntu: `zsh-syntax-highlighting` package [in Xenial][ubuntu-package] (or in [OBS repository][obs-repository]) -* Void Linux: `zsh-syntax-highlighting package` [in XBPS][void-package] - -[arch-package]: https://www.archlinux.org/packages/zsh-syntax-highlighting -[AUR-package]: https://aur.archlinux.org/packages/zsh-syntax-highlighting-git -[brew-package]: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-syntax-highlighting.rb -[debian-package]: https://packages.debian.org/zsh-syntax-highlighting -[fedora-package]: https://apps.fedoraproject.org/packages/zsh-syntax-highlighting -[fedora-package-alt]: https://bodhi.fedoraproject.org/updates/?packages=zsh-syntax-highlighting -[freebsd-port]: http://www.freshports.org/textproc/zsh-syntax-highlighting/ -[gentoo-repository]: https://packages.gentoo.org/packages/app-shells/zsh-syntax-highlighting -[netbsd-port]: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/shells/zsh-syntax-highlighting/ -[obs-repository]: https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-syntax-highlighting&package=zsh-syntax-highlighting -[openbsd-port]: https://cvsweb.openbsd.org/ports/shells/zsh-syntax-highlighting/ -[ubuntu-package]: https://launchpad.net/ubuntu/+source/zsh-syntax-highlighting -[void-package]: https://github.com/void-linux/void-packages/tree/master/srcpkgs/zsh-syntax-highlighting - -See also [repology's cross-distro index](https://repology.org/metapackage/zsh-syntax-highlighting/versions) - - -### In your ~/.zshrc - -Simply clone this repository and source the script: - -```zsh -git clone https://github.com/zsh-users/zsh-syntax-highlighting.git -echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc -``` - - Then, enable syntax highlighting in the current interactive shell: - -```zsh -source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -``` - - If `git` is not installed, download and extract a snapshot of the latest - development tree from: - -``` -https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz -``` - - Note the `source` command must be **at the end** of `~/.zshrc`. - - -### With a plugin manager - -Note that `zsh-syntax-highlighting` must be the last plugin sourced. - -The zsh-syntax-highlighting authors recommend manual installation over the use -of a framework or plugin manager. - -This list is incomplete as there are too many -[frameworks / plugin managers][framework-list] to list them all here. - -[framework-list]: https://github.com/unixorn/awesome-zsh-plugins#frameworks - -#### [Antigen](https://github.com/zsh-users/antigen) - -Add `antigen bundle zsh-users/zsh-syntax-highlighting` as the last bundle in -your `.zshrc`. - -#### [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) - -1. Clone this repository in oh-my-zsh's plugins directory: - - ```zsh - git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting - ``` - -2. Activate the plugin in `~/.zshrc`: - - ```zsh - plugins=( [plugins...] zsh-syntax-highlighting) - ``` - -3. Restart zsh (such as by opening a new instance of your terminal emulator). - -#### [Prezto](https://github.com/sorin-ionescu/prezto) - -Zsh-syntax-highlighting is included with Prezto. See the -[Prezto documentation][prezto-docs] to enable and configure highlighters. - -[prezto-docs]: https://github.com/sorin-ionescu/prezto/tree/master/modules/syntax-highlighting - -#### [zgen](https://github.com/tarjoilija/zgen) - -Add `zgen load zsh-users/zsh-syntax-highlighting` to the end of your `.zshrc`. - -#### [zplug](https://github.com/zplug/zplug) - -Add `zplug "zsh-users/zsh-syntax-highlighting", defer:2` to your `.zshrc`. - -#### [zplugin](https://github.com/psprint/zplugin) - -Add `zplugin load zsh-users/zsh-syntax-highlighting` to the end of your -`.zshrc`. - - -### System-wide installation - -Any of the above methods is suitable for a single-user installation, -which requires no special privileges. If, however, you desire to install -zsh-syntax-highlighting system-wide, you may do so by running - -```zsh -make install -``` - -and directing your users to add - -```zsh -source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -``` - -to their `.zshrc`s. diff --git a/.zsh/fsh/COPYING.md b/.zsh/fsh/LICENSE similarity index 96% rename from .zsh/fsh/COPYING.md rename to .zsh/fsh/LICENSE index cacbcbe..3d6b811 100644 --- a/.zsh/fsh/COPYING.md +++ b/.zsh/fsh/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010-2020 zsh-syntax-highlighting contributors +Copyright (c) 2010-2016 zsh-syntax-highlighting contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted diff --git a/.zsh/fsh/Makefile b/.zsh/fsh/Makefile deleted file mode 100644 index bbc1d43..0000000 --- a/.zsh/fsh/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -NAME=zsh-syntax-highlighting - -INSTALL?=install -c -PREFIX?=/usr/local -SHARE_DIR?=$(DESTDIR)$(PREFIX)/share/$(NAME) -DOC_DIR?=$(DESTDIR)$(PREFIX)/share/doc/$(NAME) -ZSH?=zsh # zsh binary to run tests with - -all: - cd docs && \ - cp highlighters.md all.md && \ - printf '\n\nIndividual highlighters documentation\n=====================================' >> all.md && \ - for doc in highlighters/*.md; do printf '\n\n'; cat "$$doc"; done >> all.md - -install: all - $(INSTALL) -d $(SHARE_DIR) - $(INSTALL) -d $(DOC_DIR) - cp .version zsh-syntax-highlighting.zsh $(SHARE_DIR) - cp COPYING.md README.md changelog.md $(DOC_DIR) - sed -e '1s/ .*//' -e '/^\[build-status-[a-z]*\]: /d' < README.md > $(DOC_DIR)/README.md - if [ x"true" = x"`git rev-parse --is-inside-work-tree 2>/dev/null`" ]; then \ - git rev-parse HEAD; \ - else \ - cat .revision-hash; \ - fi > $(SHARE_DIR)/.revision-hash - : -# The [ -e ] check below is to because sh evaluates this with (the moral -# equivalent of) NONOMATCH in effect, and highlighters/*.zsh has no matches. - for dirname in highlighters highlighters/*/ ; do \ - $(INSTALL) -d $(SHARE_DIR)/"$$dirname"; \ - for fname in "$$dirname"/*.zsh ; do [ -e "$$fname" ] && cp "$$fname" $(SHARE_DIR)"/$$dirname"; done; \ - done - cp -R docs/* $(DOC_DIR) - -clean: - rm -f docs/all.md - -test: - @$(ZSH) -fc 'echo ZSH_PATCHLEVEL=$$ZSH_PATCHLEVEL' - @result=0; \ - for test in highlighters/*; do \ - if [ -d $$test/test-data ]; then \ - echo "Running test $${test##*/}"; \ - env -i QUIET=$$QUIET $${TERM:+"TERM=$$TERM"} $(ZSH) -f tests/test-highlighting.zsh "$${test##*/}"; \ - : $$(( result |= $$? )); \ - fi \ - done; \ - exit $$result - -quiet-test: - $(MAKE) test QUIET=y - -perf: - @result=0; \ - for test in highlighters/*; do \ - if [ -d $$test/test-data ]; then \ - echo "Running test $${test##*/}"; \ - $(ZSH) -f tests/test-perfs.zsh "$${test##*/}"; \ - : $$(( result |= $$? )); \ - fi \ - done; \ - exit $$result - -.PHONY: all install clean test perf diff --git a/.zsh/fsh/README.md b/.zsh/fsh/README.md index 482a648..6c069f3 100644 --- a/.zsh/fsh/README.md +++ b/.zsh/fsh/README.md @@ -1,97 +1,290 @@ -zsh-syntax-highlighting [![Build Status][build-status-image]][build-status] -======================= +[![paypal](https://img.shields.io/badge/-Donate-yellow.svg?longCache=true&style=for-the-badge)](https://www.paypal.me/ZdharmaInitiative) +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=D54B3S7C6HGME) +[![patreon](https://img.shields.io/badge/-Patreon-orange.svg?longCache=true&style=for-the-badge)](https://www.patreon.com/psprint) +
New: You can request a feature when donating, even fancy or advanced ones get implemented this way. [There are +reports](DONATIONS.md) about what is being done with the money received. -**[Fish shell][fish]-like syntax highlighting for [Zsh][zsh].** +# Fast Syntax Highlighting (F-Sy-H) -*Requirements: zsh 4.3.11+.* +Feature rich syntax highlighting for Zsh. -[fish]: https://fishshell.com/ -[zsh]: https://www.zsh.org/ +
+ image could not be loaded +
-This package provides syntax highlighting for the shell zsh. It enables -highlighting of commands whilst they are typed at a zsh prompt into an -interactive terminal. This helps in reviewing commands before running -them, particularly in catching syntax errors. +### Table of Contents -Some examples: +- [News](#news) +- [Installation](#installation) +- [Features](#features) +- [Performance](#performance) +- [IRC Channel](#irc-channel) -Before: [![Screenshot #1.1](images/before1-smaller.png)](images/before1.png) -
-After:  [![Screenshot #1.2](images/after1-smaller.png)](images/after1.png) +### Other Contents +- [License](https://github.com/zdharma/fast-syntax-highlighting/blob/master/LICENSE) +- [Changelog](https://github.com/zdharma/fast-syntax-highlighting/blob/master/CHANGELOG.md) +- [Theme Guide](https://github.com/zdharma/fast-syntax-highlighting/blob/master/THEME_GUIDE.md) +- [Chroma Guide](https://github.com/zdharma/fast-syntax-highlighting/blob/master/CHROMA_GUIDE.adoc) -Before: [![Screenshot #2.1](images/before2-smaller.png)](images/before2.png) -
-After:  [![Screenshot #2.2](images/after2-smaller.png)](images/after2.png) +# News -Before: [![Screenshot #3.1](images/before3-smaller.png)](images/before3.png) -
-After:  [![Screenshot #3.2](images/after3-smaller.png)](images/after3.png) +* 15-06-2019 + - A new architecture for defining the highlighting for **specific commands**: it now + uses **abstract definitions** instead of **top-down, regular code**. The first effect + is the highlighting for the `git` command it is now **maximally faithful**, it + follows the `git` command almost completely. + [Screencast](https://asciinema.org/a/253411) -Before: [![Screenshot #4.1](images/before4-smaller.png)](images/before4-smaller.png) -
-After:  [![Screenshot #4.2](images/after4-smaller.png)](images/after4-smaller.png) +# Installation +### Manual +Clone the Repository. -How to install --------------- +```zsh +git clone https://github.com/zdharma/fast-syntax-highlighting ~/path/to/fsh +``` -See [INSTALL.md](INSTALL.md). +And add the following to your `zshrc` file. +```zsh +source ~/path/to/fsh/fast-syntax-highlighting.plugin.zsh +``` +### Zinit -FAQ ---- +Add the following to your `zshrc` file. -### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file? +```zsh +zinit light zdharma/fast-syntax-highlighting +``` -zsh-syntax-highlighting works by hooking into the Zsh Line Editor (ZLE) and -computing syntax highlighting for the command-line buffer as it stands at the -time z-sy-h's hook is invoked. +Here's an example of how to load the plugin together with a few other popular +ones with the use of +[Turbo](https://zdharma.org/zinit/wiki/INTRODUCTION/#turbo_mode_zsh_62_53), +i.e.: speeding up the Zsh startup by loading the plugin right after the first +prompt, in background: -In zsh 5.2 and older, -`zsh-syntax-highlighting.zsh` hooks into ZLE by wrapping ZLE widgets. It must -be sourced after all custom widgets have been created (i.e., after all `zle -N` -calls and after running `compinit`) in order to be able to wrap all of them. -Widgets created after z-sy-h is sourced will work, but will not update the -syntax highlighting. +```zsh +zinit wait lucid for \ + atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay" \ + zdharma/fast-syntax-highlighting \ + blockf \ + zsh-users/zsh-completions \ + atload"!_zsh_autosuggest_start" \ + zsh-users/zsh-autosuggestions +``` -In zsh newer than 5.8 (not including 5.8 itself), -zsh-syntax-highlighting uses the `add-zle-hook-widget` facility to install -a `zle-line-pre-redraw` hook. Hooks are run in order of registration, -therefore, z-sy-h must be sourced (and register its hook) after anything else -that adds hooks that modify the command-line buffer. +### Antigen -### Does syntax highlighting work during incremental history search? +Add the following to your `zshrc` file. -Highlighting the command line during an incremental history search (by default bound to -to Ctrl+R in zsh's emacs keymap) requires zsh 5.4 or newer. +```zsh +antigen bundle zdharma/fast-syntax-highlighting +``` -Under zsh versions older than 5.4, the zsh-default [underlining][zshzle-Character-Highlighting] -of the matched portion of the buffer remains available, but zsh-syntax-highlighting's -additional highlighting is unavailable. (Those versions of zsh do not provide -enough information to allow computing the highlighting correctly.) +### Zgen -See issues [#288][i288] and [#415][i415] for details. +Add the following to your `.zshrc` file in the same place you're doing +your other `zgen load` calls in. -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting -[i288]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/288 -[i415]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/415 +```zsh +zgen load zdharma/fast-syntax-highlighting +``` -### How are new releases announced? -There is currently no "push" announcements channel. However, the following -alternatives exist: +### Oh-My-Zsh -- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom -- An anitya entry: https://release-monitoring.org/project/7552/ +Clone the Repository. +```zsh +git clone https://github.com/zdharma/fast-syntax-highlighting.git \ + ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting +``` -How to tweak ------------- +And add `fast-syntax-highlighting` to your plugin list. -Syntax highlighting is done by pluggable highlighter scripts. See the -[documentation on highlighters](docs/highlighters.md) for details and -configuration settings. +# Features -[build-status]: https://github.com/zsh-users/zsh-syntax-highlighting/actions -[build-status-image]: https://github.com/zsh-users/zsh-syntax-highlighting/workflows/Tests/badge.svg +### Themes + +Switch themes via `fast-theme {theme-name}`. + +
+ image could not be loaded +
+ +Run `fast-theme -t {theme-name}` option to obtain the snippet above. + +Run `fast-theme -l` to list available themes. + +### Variables + +Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): + +
+ image could not be loaded +
+ +
+ image could not be loaded +
+ +### Brackets + +
+ image could not be loaded +
+ +### Conditions + +Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): + +
+ image could not be loaded +
+ +### Strings + +Exact highlighting that recognizes quotings. + +
+ image could not be loaded +
+ + +### here-strings + +
+ image could not be loaded +
+ +### `exec` descriptor-variables + +Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): + +
+ image could not be loaded +
+ +### for-loops and alternate syntax (brace `{`/`}` blocks) + +
+ image could not be loaded +
+ +### Function definitions + +Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper 2 lines): + +
+ image could not be loaded +
+ +### Recursive `eval` and `$( )` highlighting + +Comparing to the project `zsh-users/zsh-syntax-highlighting` (the upper line): + +
+ image could not be loaded +
+ +### Chroma functions + +Highlighting that is specific for a given command. + +
+ image could not be loaded +
+ +The [chromas](https://github.com/zdharma/fast-syntax-highlighting/tree/master/chroma) +that are enabled by default can be found +[here](https://github.com/zdharma/fast-syntax-highlighting/blob/master/fast-highlight#L166). + +### Math-mode highlighting + +
+ image could not be loaded +
+ +### Zcalc highlighting + +
+ image could not be loaded +
+ +# Performance +Performance differences can be observed in this Asciinema recording, where a `10 kB` function is being edited. + +
+ + asciicast + +
+ +## IRC Channel + +Channel `#zinit@freenode` is a support place for all author's projects. Connect to: +[chat.freenode.net:6697](ircs://chat.freenode.net:6697/%23zinit) (SSL) or [chat.freenode.net:6667](irc://chat.freenode.net:6667/%23zinit) + and join #zinit. + +Following is a quick access via Webchat [![IRC](https://kiwiirc.com/buttons/chat.freenode.net/zinit.png)](https://kiwiirc.com/client/chat.freenode.net:+6697/#zinit) diff --git a/.zsh/fsh/THEME_GUIDE.md b/.zsh/fsh/THEME_GUIDE.md new file mode 100644 index 0000000..1d66dac --- /dev/null +++ b/.zsh/fsh/THEME_GUIDE.md @@ -0,0 +1,76 @@ +# Theme Guide for F-Sy-H + +`fast-theme` tool is used to select a theme. There are 6 shipped themes, they can be listed with `fast-theme -l`. +Themes are basic [INI files](https://github.com/zdharma/fast-syntax-highlighting/tree/master/themes) where each +key is a *style*. +Besides shipped themes, user can point this tool to any other theme, by simple `fast-theme ~/mytheme.ini`. To +obtain template to work on when creating own theme, issue `fast-theme --copy-shipped-theme {theme-name}`. + +To alter just a few styles and not create a whole new theme, use **overlay**. What is overlay? It is in the same +format as full theme, but can have only a few styles defined, and these styles will overwrite styles in main-theme. +Example overlay file: + +```ini +; overlay.ini +[base] +commandseparator = yellow,bold +comment = 17 + +[command-point] +function = green +command = 180 +``` + +File name `overlay.ini` is treated specially. + +When specifing path, following short-hands can be used: + +``` +XDG: = ~/.config/fsh (respects $XDG_CONFIG_HOME env var) +LOCAL: = /usr/local/share/fsh/ +HOME: = ~/.fsh/ +OPT: = /opt/local/share/fsh/ +``` + +So for example, issue `fast-theme XDG:overlay` to load `~/.config/fsh/overlay.ini` as overlay. The `.ini` +extension is optional. + +## Secondary Theme + +Each theme has key `secondary`, e.g. for theme `free`: + +```ini +; free.ini +[base] +default = none +unknown-token = red,bold +; ... +; ... +; ... +secondary = zdharma +``` + +Secondary theme (`zdharma` in the example) will be used for highlighting of argument for `eval` +and of `$( ... )` interior (i.e. of interior of command substitution). Basically, recursive +highlighting uses alternate theme to make the highlighted code distinct: + +![sshot](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/cmdsubst.png) + +In the above screen-shot the interior of `$( ... )` uses different colors than the rest of the +code. Example for `eval`: + +![image](https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/images/eval_cmp.png) + +First line doesn't use recursive highlighting, highlights `eval` argument as regular string. +Second line switches theme to `zdharma` and does full recursive highlighting of eval argument. + +## Custom Working Directory + +Set `$FAST_WORK_DIR` before loading the plugin to have e.g. processed theme files (ready to +load, in Zsh format, not INI) kept under specified location. This is handy if e.g. you install +Fast-Syntax-Highlighting system-wide (e.g. from AUR on ArchLinux) and want to have per-user +theme setup. + +You can use "~" in the path, e.g. `FAST_WORK_DIR=~/.fsh` and also the `XDG:`, `LOCAL:`, `OPT:`, +etc. short-hands, so e.g. `FAST_WORK_DIR=XDG` or `FAST_WORK_DIR=XDG:` is allowed (in this case +it will be changed to `$HOME/.config/fsh` by default by F-Sy-H loader). diff --git a/.zsh/fsh/_fast-theme b/.zsh/fsh/_fast-theme new file mode 100644 index 0000000..67f8a4d --- /dev/null +++ b/.zsh/fsh/_fast-theme @@ -0,0 +1,39 @@ +#compdef fast-theme + +# +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Completion for theme-switching function, fast-theme, +# part of zdharma/fast-syntax-highlighting. +# + +integer ret=1 +local -a arguments + +arguments=( + {-h,--help}'[display help text]' + {-l,--list}'[list available themes]' + {-r,--reset}'[unset any theme (revert to default highlighting)]' + {-R,--ov-reset}'[unset overlay, use styles only from main-theme (requires restart)]' + {-q,--quiet}'[no default messages]' + {-s,--show}'[get and display the theme currently being set]' + {-v,--verbose}'[more messages during operation]' + {-t,--test}'[test theme after setting it (show example code)]' + {-p,--palette}'[just print all 256 colors and exit (useful when creating a theme)]' + {-w,--workdir}'[cd into $FAST_WORK_DIR (if not set, then into the plugin directory)]' +) + +typeset -a themes +themes=( "$FAST_WORK_DIR"/themes/*.ini(:t:r) ) + +if [[ -d ${XDG_CONFIG_HOME:-$HOME/.config}/fsh ]] { + typeset -a themes2 + themes2=( "${XDG_CONFIG_HOME:-$HOME/.config}"/fsh/*.ini(:t:r) ) + themes+=( XDG:${^themes2[@]} ) +} + +_wanted themes expl "Themes" \ + compadd "$@" -a - themes && ret=0 +_arguments -s $arguments && ret=0 + +return $ret diff --git a/.zsh/fsh/changelog.md b/.zsh/fsh/changelog.md deleted file mode 100644 index 9230236..0000000 --- a/.zsh/fsh/changelog.md +++ /dev/null @@ -1,884 +0,0 @@ -# Changes in HEAD - - -## Changes fixed as part of the switch to zle-line-pre-redraw - -The changes in this section were fixed by switching to a `zle-line-pre-redraw`-based -implementation. - -Note: The new implementation will only be used on future zsh releases, -numbered 5.8.0.3 and newer, due to interoperability issues with other plugins -(issues #418 and #579). The underlying zsh feature has been available since -zsh 5.2. - -Whilst under development, the new implementation was known as the -"feature/redrawhook" topic branch. - -- Fixed: Highlighting not triggered after popping a buffer from the buffer stack - (using the `push-line` widget, default binding: `M-q`) - [#40] - -- Fixed: Invoking completion when there were no matches removed highlighting - [#90, #470] - -- Fixed: Two successive deletes followed by a yank only yanked the latest - delete, rather than both of them - [#150, #151, #160; cf. #183] - -- Presumed fixed: Completing `$(xsel)` results in an error message from `xsel`, - with pre-2017 versions of `xsel`. (For 2017 vintage and newer, see the issue - for details.) - [#154] - -- Fixed: When the standard `bracketed-paste-magic` widget is in use, pastes were slow - [#295] - -- Fixed: No way to prevent a widget from being wrapped - [#324] - -- Fixed: No highlighting while cycling menu completion - [#375] - -- Fixed: Does not coexist with the `IGNORE_EOF` option - [#377] - -- Fixed: The `undefined-key` widget was wrapped - [#421] - -- Fixed: Does not coexist with the standard `surround` family of widgets - [#520] - -- Fixed: First completed filename doesn't get `path` highlighting - [#632] - - -## Other changes - -- Add issue #712 to the previous release's changelog (hereinafter). - - -# Changes in 0.8.0-alpha1-pre-redrawhook - -## Notice about an improbable-but-not-impossible forward incompatibility - -Everyone can probably skip this section. - -The `master` branch of zsh-syntax-highlighting uses a zsh feature that has not -yet appeared in a zsh release: the `memo=` feature, added to zsh in commit -zsh-5.8-172-gdd6e702ee (after zsh 5.8, before zsh 5.9). In the unlikely event -that this zsh feature should change in an incompatible way before the next -stable zsh release, set `zsh_highlight__memo_feature=0` in your .zshrc files to -disable use of the new feature. - -z-sy-h dogfoods the new, unreleased zsh feature because that feature was -added to zsh at z-sy-h's initiative. The new feature is used in the fix -to issue #418. - - -## Incompatible changes: - -- An unsuccessful completion (a ⮀ Tab press that doesn't change the - command line) no longer causes highlighting to be lost. Visual feedback can - alternatively be achieved by setting the `format` zstyle under the `warnings` - tag, for example, - - zstyle ':completion:*:warnings' format '%F{red}No matches%f' - - Refer to the [description of the `format` style in `zshcompsys(1)`] - [zshcompsys-Standard-Styles-format]. - - (#90, part of #245 (feature/redrawhook)) - -[zshcompsys-Standard-Styles]: http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Standard-Styles -[zshcompsys-Standard-Styles-format]: http://zsh.sourceforge.net/Doc/Release/Completion-System.html#index-format_002c-completion-style - - - -## Other changes: - -- Document `$ZSH_HIGHLIGHT_MAXLENGTH`. - [#698] - -- Optimize highlighting unquoted words (words that are not in single quotes, double quotes, backticks, or dollar-single-quotes) - [#730] - -- Redirection operators (e.g., `<` and `>`) are now highlighted by default - [#646] - -- Propertly terminate `noglob` scope in try/always blocks - [#577] - -- Don't error out when `KSH_ARRAYS` is set in the calling scope - [#622, #689] - -- Literal semicolons in array assignments (`foo=( bar ; baz )`) are now - highlighted as errors. - [3ca93f864fb6] - -- Command separators in array assignments (`foo=( bar | baz )`) are now - highlighted as errors. - [#651, 81267ca3130c] - -- Support parameter elision in command position (e.g., `$foo ls` where `$foo` is unset or empty) - [#667] - -- Don't consider the filename in `sudo -e /path/to/file` to be a command position - [#678] - -- Don't look up absolute directory names in $cdpath - [2cc2583f8f12, part of #669] - -- Fix `exec 2>&1;` being highlighted as an error. - [#676] - -- Fix `: $(<*)` being highlighted as globbing. - [#582] - -- Fix `cat < *` being highlighting as globbing when the `MULTIOS` option is unset. - [#583] - -- Fix `echo >&2` highlighting the `2` as a filename if a file by that name happened to exist - [#694, part of #645] - -- Fix `echo >&-` highlighting the `-` as a filename if a file by that name happened to exist - [part of #645] - -- Fix `echo >&p` highlighting the `p` as a filename if a file by that name happened to exist - [part of #645] - -- Fix wrong highlighting of unquoted parameter expansions under zsh 5.2 and older - [e165f18c758e] - -- Highlight global aliases - [#700] - -- Highlight `: =nosuchcommand' as an error (when the `EQUALS` option hasn't been unset). - [#430] - -- Highlight reserved word after assignments as errors (e.g., `foo=bar (ls;)`) - [#461] - -- Correctly highlight `[[ foo && bar || baz ]]`. - -- Highlight non-executable files in command position correctly (e.g., `% /etc/passwd`) - [#202, #669] - -- Highlight directories in command position correctly, including `AUTO_CD` support - [#669] - -- Recognize `env` as a precommand (e.g., `env FOO=bar ls`) - -- Recognize `strace` as a precommand - -- Fix an error message on stderr before every prompt when the `WARN_NESTED_VAR` zsh option is set: - `_zsh_highlight_main__precmd_hook:1: array parameter _zsh_highlight_main__command_type_cache set in enclosing scope in function _zsh_highlight_main__precmd_hook` - [#727, #731, #732, #733] - -- Fix highlighting of alias whose definitions use a simple command terminator - (such as `;`, `|`, `&&`) before a newline - [#677; had regressed in 0.7.0] - -- Highlight arithmetic expansions (e.g., `$(( 42 ))`) - [#607 #649 #704] - -- Highlight the parentheses of array assignments as reserved words (`foo=( bar )`). - The `assign` style remains supported and has precedence. - [#585] - -- Fix interoperability issue with other plugins that use highlighting. The fix - requires zsh 5.8.0.3 or newer. (zsh 5.8.0.2-dev from the `master` branch, - revision zsh-5.8-172-gdd6e702ee or newer is also fine.) - [#418, https://github.com/okapia/zsh-viexchange/issues/1] - -- Improve performance of the `brackets` highlighter. - -- Fix highlighting of pre-command redirections (e.g., the `$fn` in `<$fn cat`) - [#712] - - -# Changes in version 0.7.1 - -- Remove out-of-date information from the 0.7.0 changelog. - - -# Changes in version 0.7.0 - -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 - [4e6f60063f1c] - -- When a word uses globbing, only the globbing metacharacters will be highlighted as globbing: - in `: foo*bar`, only the `*` will be blue. - [e48af357532c] - -- Highlight pasted quotes (e.g., `: foo"bar"`) - [dc1b2f6fa4bb] - -- Highlight command substitutions (`` : `ls` ``, `: $(ls)`) - [c0e64fe13178 and parents, e86f75a840e7, et al] - -- Highlight process substitutions (`: >(nl)`, `: <(pwd)`, `: =(git diff)`) - [c0e64fe13178 and parents, e86f75a840e7, et al] - -- Highlight command substitutions inside double quotes (``: "`foo`"``) - [f16e858f0c83] - -- Highlight many precommands (e.g., `nice`, `stdbuf`, `eatmydata`; - see `$precommand_options` in the source) - -- Highlight numeric globs (e.g., `echo /lib<->`) - -- Assorted improvements 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`) - [f3410c5862fc, 57386f30aec8, #544, and many others] - -- Highlight some more syntax errors - [dea05e44e671, 298ef6a2fa30] - -- New styles: named file descriptors, `RC_QUOTES`, and unclosed quotes (e.g., `echo "foo`) - [38c794a978cd, 25ae1c01216c, 967335dfc5fd] - -- The 'brackets' highlighting no longer treats quotes specially. - [ecdda36ef56f] - - -Selected bugfixes include: - -- Highlight `sudo` correctly when it's not installed - [26a82113b08b] - -- Handle some non-default options being set in zshrc - [b07ada1255b7, a2a899b41b8, 972ad197c13d, b3f66fc8748f] - -- Fix off-by-one highlighting in vi "visual" mode (vicmd keymap) - [be3882aeb054] - -- The 'yank-pop' widget is not wrapped - [#183] - - -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] - [UPDATE: Fixed in 0.8.0] - - -# Changes in version 0.6.0 - -This is a stable release, featuring bugfixes and minor improvements. - - -## Performance improvements: - -(none) - - -## Added highlighting of: - -- The `isearch` and `suffix` [`$zle_highlight` settings][zshzle-Character-Highlighting]. - (79e4d3d12405, 15db71abd0cc, b56ee542d619; requires zsh 5.3 for `$ISEARCHMATCH_ACTIVE` / `$SUFFIX_ACTIVE` support) - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting - -- Possible history expansions in double-quoted strings. - (76ea9e1df316) - -- Mismatched `if`/`then`/`elif`/`else`/`fi`. - (73cb83270262) - - -## Fixed highlighting of: - -- A comment line followed by a non-comment line. - (#385, 9396ad5c5f9c) - -- An unquoted `$*` (expands to the positional parameters). - (237f89ad629f) - -- history-incremental-pattern-search-backward under zsh 5.3.1. - (#407, #415, 462779629a0c) - - -## API changes (for highlighter authors): - -(none) - - -## Developer-visible changes: - -- tests: Set the `ALIAS_FUNC_DEF` option for zsh 5.4 compatibility. - (9523d6d49cb3) - - -## Other changes: - -- docs: Added before/after screenshots. - (cd9ec14a65ec..b7e277106b49) - -- docs: Link Fedora package. - (3d74aa47e4a7, 5feed23962df) - -- docs: Link FreeBSD port. - (626c034c68d7) - -- docs: Link OpenSUSE Build Service packages - (#419, dea1fedc7358) - -- Prevent user-defined aliases from taking effect in z-sy-h's own code. - (#390, 2dce602727d7, 8d5afe47f774; and #392, #395, b8fa1b9dc954) - -- docs: Update zplug installation instructions. - (#399, 4f49c4a35f17) - -- Improve "unhandled ZLE widget 'foo'" error message. - (#409, be083d7f3710) - -- Fix printing of "failed loading highlighters" error message. - (#426, ad522a091429) - - -# 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, 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, 3b67e656bff5) - -- Avoid forks in the driver and in the `root` highlighter. - (b9112aec798a, 38c8fbea2dd2) - - -## Added highlighting of: - -- `pkexec` (a precommand). - (#248, 4f3910cbbaa5) - -- Aliases that cannot be defined normally nor invoked normally (highlighted as an error). - (#263 (in part), 28932316cca6) - -- Path separators (`/`) — the default behaviour remains to highlight path separators - and path components the same way. - (#136, #260, 6cd39e7c70d3, 9a934d291e7c, f3d3aaa00cc4) - -- Assignments to individual positional arguments (`42=foo` to assign to `$42`). - (f4036a09cee3) - -- Linewise region (the `visual-line-mode` widget, bound to `V` in zsh's `vi` keymap). - (#267, a7a7f8b42280, ee07588cfd9b) - -- Command-lines recalled by `isearch` mode; requires zsh≥5.3. - (#261 (in part); #257; 4ad311ec0a68) - -- Command-lines whilst the `IGNORE_BRACES` or `IGNORE_CLOSE_BRACES` option is in effect. - (a8a6384356af, 02807f1826a5) - -- Mismatched parentheses and braces (in the `main` highlighter). - (51b9d79c3bb6, 2fabf7ca64b7, a4196eda5e6f, and others) - -- Mismatched `do`/`done` keywords. - (b2733a64da93) - -- Mismatched `foreach`/`end` keywords. - (#96, 2bb8f0703d8f) - -- 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 "$@" }`. - (6f91850a01e1) - -- `always` blocks. - (#335, e5782e4ddfb6) - -- Command substitutions inside double quotes, `"$(echo foo)"`. - (#139 (in part), c3913e0d8ead) - -- Non-alphabetic parameters inside double quotes (`"$$"`, `"$#"`, `"$*"`, `"$@"`, `"$?"`, `"$-"`). - (4afe670f7a1b, 44ef6e38e5a7) - -- 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, bccc3dc26943) - -- Escaped history expansions inside double quotes: `: "\!"` - (28d7056a7a06, et seq) - - -## Fixed highlighting of: - -- Command separator tokens in syntactically-invalid positions. - (09c4114eb980) - -- Redirections with a file descriptor number at command word. - (#238 (in part), 73ee7c1f6c4a) - -- The `select` prompt, `$PS3`. - (#268, 451665cb2a8b) - -- Values of variables in `vared`. - (e500ca246286) - -- `!` as an argument (neither a history expansion nor a reserved word). - (4c23a2fd1b90) - -- "division by zero" error under the `brackets` highlighter when `$ZSH_HIGHLIGHT_STYLES` is empty. - (f73f3d53d3a6) - -- Process substitutions, `<(pwd)` and `>(wc -l)`. - (#302, 6889ff6bd2ad, bfabffbf975c, fc9c892a3f15) - -- The non-`SHORT_LOOPS` form of `repeat` loops: `repeat 42; do true; done`. - (#290, 4832f18c50a5, ef68f50c048f, 6362c757b6f7) - -- Broken symlinks (are now highlighted as files). - (#342, 95f7206a9373, 53083da8215e) - -- Lines accepted from `isearch` mode. - (#284; #257, #259, #288; 5bae6219008b, a8fe22d42251) - -- 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). - (4c4baede519a) - -- The first word on a new line within an array assignment or initialization is no - longer considered a command position. - (8bf423d16d46) - -- Subshells that end at command position, `(A=42)`, `(true;)`. - (#231, 7fb6f9979121; #344, 4fc35362ee5a) - -- Command word after array assignment, `a=(lorem ipsum) pwd`. - (#330, 7fb6f9979121) - - -## API changes (for highlighter authors): - -- New interface `_zsh_highlight_add_highlight`. - (341a3ae1f015, c346f6eb6fb6) - -- 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, f91a7b885e7d) - -- Rename highlighter entry points. The old names remain supported for - backwards compatibility. - (a3d5dfcbdae9, c793e0dceab1) - -- tests: Add the "NONE" expectation. - (4da9889d1545, 13018f3dd735, d37c55c788cd) - -- tests: consider a test that writes to stderr to have failed. - (#291, 1082067f9315) - - -## Developer-visible changes: - -- Add `make quiet-test`. - (9b64ad750f35) - -- test harness: Better quote replaceables in error messages. - (30d8f92df225) - -- test harness: Fix exit code for XPASS. - (bb8d325c0cbd) - -- Create [HACKING.md](HACKING.md). - (cef49752fd0e) - -- tests: Emit a description for PASS test points. - (6aa57d60aa64, f0bae44b76dd) - -- tests: Create a script that generates a test file. - (8013dc3b8db6, et seq; `tests/generate.zsh`) - - -## Other changes: - -- Under zsh≤5.2, widgets whose names start with a `_` are no longer excluded - from highlighting. - (ed33d2cb1388; reverts part of 186d80054a40 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 776453cb5b69) - -- Under zsh≤5.2, shell-unsafe widget names can now be wrapped. - (#278, 6a634fac9fb9, et seq) - -- Correct some test expectations. - (78290e043bc5) - -- `zsh-syntax-highlighting.plugin.zsh`: Convert from symlink to plain file - for msys2 compatibility. - (#292, d4f8edc9f3ad) - -- Document installation under some plugin managers. - (e635f766bef9, 9cab566f539b) - -- Don't leak the `PATH_DIRS` option. - (7b82b88a7166) - -- Don't require the `FUNCTION_ARGZERO` option to be set. - (#338, 750aebc553f2) - -- 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, f3242cbd6aba) - -- Fix warnings when `WARN_CREATE_GLOBAL` is set prior to sourcing zsh-syntax-highlighting. - (z-sy-h already sets `WARN_CREATE_GLOBAL` internally.) - (da60234fb236) - -- Warn only once, rather than once per keypress, when a highlighter is unavailable. - (0a9b347483ae) - - -# 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}`). - (282c7134e8ac, reverts c808d2187a73) - - -# Changes in version 0.4.0 - - -## Added highlighting of: - -- incomplete sudo commands - (a3047a912100, 2f05620b19ae) - - ```zsh - sudo; - sudo -u; - ``` - -- command words following reserved words - (#207, #222, b397b12ac139 et seq, 6fbd2aa9579b et seq, 8b4adbd991b0) - - ```zsh - 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, 693de99a9030) - - ```zsh - echo Hello # comment - ``` - -- closing brackets of arithmetic expansion, subshells, and blocks - (#226, a59f442d2d34, et seq) - - ```zsh - (( foo )) - ( foo ) - { foo } - ``` - -- command names enabled by the `PATH_DIRS` option - (#228, 96ee5116b182) - - ```zsh - # 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, 6e3720f39d84) - - ```zsh - echo "${foo}" - ``` - -- parameter expansions in command word - (#101, 4fcfb15913a2) - - ```zsh - x=/bin/ls - $x -l - ``` - -- the command separators '\|&', '&!', '&\|' - - ```zsh - view file.pdf &! ls - ``` - - -## Fixed highlighting of: - -- precommand modifiers at non-command-word position - (#209, 2c9f8c8c95fa) - - ```zsh - ls command foo - ``` - -- sudo commands with infix redirections - (#221, be006aded590, 86e924970911) - - ```zsh - sudo -u >/tmp/foo.out user ls - ``` - -- subshells; anonymous functions - (#166, #194, 0d1bfbcbfa67, 9e178f9f3948) - - ```zsh - (true) - () { true } - ``` - -- parameter assignment statements with no command - (#205, 01d7eeb3c713) - - ```zsh - A=1; - ``` - - (The semicolon used to be highlighted as a mistake) - -- cursor highlighter: Remove the cursor highlighting when accepting a line. - (#109, 4f0c293fdef0) - - -## Removed features: - -- Removed highlighting of approximate paths (`path_approx`). - (#187, 98aee7f8b9a3) - - -## Other changes: - -- main highlighter refactored to use states rather than booleans. - (2080a441ac49, et seq) - -- Fix initialization when sourcing `zsh-syntax-highlighting.zsh` via a symlink - (083c47b00707) - -- docs: Add screenshot. - (57624bb9f64b) - -- widgets wrapping: Don't add '--' when invoking widgets. - (c808d2187a73) [_reverted in 0.4.1_] - -- Refresh highlighting upon `accept-*` widgets (`accept-line` et al). - (59fbdda64c21) - -- Stop leaking match/mbegin/mend to global scope (thanks to upstream - `WARN_CREATE_GLOBAL` improvements). - (d3deffbf46a4) - -- 'make install': Permit setting `$(SHARE_DIR)` from the environment. - (e1078a8b4cf1) - -- driver: Tolerate KSH_ARRAYS being set in the calling context. - (#162, 8f19af6b319d) - -- 'make install': Install documentation fully and properly. - (#219, b1619c001390, et seq) - -- docs: Improve 'main' highlighter's documentation. - (00de155063f5, 7d4252f5f596) - -- docs: Moved to a new docs/ tree; assorted minor updates - (c575f8f37567, 5b34c23cfad5, et seq) - -- docs: Split README.md into INSTALL.md - (0b3183f6cb9a) - -- driver: Report `$ZSH_HIGHLIGHT_REVISION` when running from git - (84734ba95026) - - -## Developer-visible changes: - -- Test harness converted to [TAP](http://testanything.org/tap-specification.html) 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, b2ac98b98150) - -- Test output is now colorized. - (4d3da30f8b72, 6fe07c096109) - -- Document `make install` - (a18a7427fd2c) - -- tests: Allow specifying the zsh binary to use. - (557bb7e0c6a0) - -- tests: Add 'make perf' target - (4513eaea71d7) - -- tests: Run each test in a sandbox directory - (c01533920245) - - -# Changes in version 0.3.0 - - -## Added highlighting of: - -- suffix aliases (requires zsh 5.1.1 or newer): - - ```zsh - alias -s png=display - foo.png - ``` - -- prefix redirections: - - ```zsh - foo.txt - ``` - -- arithmetic evaluations: - - ```zsh - (( 42 )) - ``` - -- $'' strings, including \x/\octal/\u/\U escapes - - ```zsh - : $'foo\u0040bar' - ``` - -- multiline strings: - - ```zsh - % echo "line 1 - line 2" - ``` - -- string literals that haven't been finished: - - ```zsh - % echo "Hello, world - ``` -- command words that involve tilde expansion: - - ```zsh - % ~/bin/foo - ``` - -## Fixed highlighting of: - -- quoted command words: - - ```zsh - % \ls - ``` - -- backslash escapes in "" strings: - - ```zsh - % echo "\x41" - ``` - -- noglob after command separator: - - ```zsh - % :; noglob echo * - ``` - -- glob after command separator, when the first command starts with 'noglob': - - ```zsh - % noglob true; echo * - ``` - -- the region (vi visual mode / set-mark-command) (issue #165) - -- redirection and command separators that would be highlighted as `path_approx` - - ```zsh - % echo foo;‸ - % echo <‸ - ``` - - (where `‸` represents the cursor location) - -- escaped globbing (outside quotes) - - ```zsh - % 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.) - diff --git a/.zsh/fsh/docs/highlighters.md b/.zsh/fsh/docs/highlighters.md deleted file mode 100644 index bb72e54..0000000 --- a/.zsh/fsh/docs/highlighters.md +++ /dev/null @@ -1,132 +0,0 @@ -zsh-syntax-highlighting / highlighters -====================================== - -Syntax highlighting is done by pluggable highlighters: - -* `main` - the base highlighter, and the only one [active by default][1]. -* `brackets` - [matches brackets][2] and parenthesis. -* `pattern` - matches [user-defined patterns][3]. -* `cursor` - matches [the cursor position][4]. -* `root` - highlights the whole command line [if the current user is root][5]. -* `line` - applied to [the whole command line][6]. - -[1]: highlighters/main.md -[2]: highlighters/brackets.md -[3]: highlighters/pattern.md -[4]: highlighters/cursor.md -[5]: highlighters/root.md -[6]: highlighters/line.md - - -Highlighter-independent settings --------------------------------- - -By default, all command lines are highlighted. However, it is possible to -prevent command lines longer than a fixed number of characters from being -highlighted by setting the variable `${ZSH_HIGHLIGHT_MAXLENGTH}` to the maximum -length (in characters) of command lines to be highlighter. This is useful when -editing very long comand lines (for example, with the [`fned`][fned] utility -function). Example: - -[fned]: http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#index-zed - -```zsh -ZSH_HIGHLIGHT_MAXLENGTH=512 -``` - - -How to activate highlighters ----------------------------- - -To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in -`~/.zshrc`, for example: - -```zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) -``` - -By default, `$ZSH_HIGHLIGHT_HIGHLIGHTERS` is unset and only the `main` -highlighter is active. - - -How to tweak highlighters -------------------------- - -Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` associative array. -Navigate into the [individual highlighters' documentation](highlighters/) to -see what styles (keys) each highlighter defines; the syntax for values is the -same as the syntax of "types of highlighting" of the zsh builtin -`$zle_highlight` array, which is documented in [the `zshzle(1)` manual -page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting - -Some highlighters support additional configuration parameters; see each -highlighter's documentation for details and examples. - - -How to implement a new highlighter ----------------------------------- - -To create your own `acme` highlighter: - -* Create your script at - `highlighters/acme/acme-highlighter.zsh`. - -* Implement the `_zsh_highlight_highlighter_acme_predicate` function. - This function must return 0 when the highlighter needs to be called and - non-zero otherwise, for example: - - ```zsh - _zsh_highlight_highlighter_acme_predicate() { - # Call this highlighter in SVN working copies - [[ -d .svn ]] - } - ``` - -* Implement the `_zsh_highlight_highlighter_acme_paint` function. - This function does the actual syntax highlighting, by calling - `_zsh_highlight_add_highlight` with the start and end of the region to - be highlighted and the `ZSH_HIGHLIGHT_STYLES` key to use. Define the default - style for that key in the highlighter script outside of any function with - `: ${ZSH_HIGHLIGHT_STYLES[key]:=value}`, being sure to prefix - the key with your highlighter name and a colon. For example: - - ```zsh - : ${ZSH_HIGHLIGHT_STYLES[acme:aurora]:=fg=green} - - _zsh_highlight_highlighter_acme_paint() { - # Colorize the whole buffer with the 'aurora' style - _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora - } - ``` - - If you need to test which options the user has set, test `zsyh_user_options` - with a sensible default if the option is not present in supported zsh - versions. For example: - - ```zsh - [[ ${zsyh_user_options[ignoreclosebraces]:-off} == on ]] - ``` - - The option name must be all lowercase with no underscores and not an alias. - -* Name your own functions and global variables `_zsh_highlight_acme_*`. - - - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints - `_zsh_highlight_highlighter_acme_predicate` and - `_zsh_highlight_highlighter_acme_paint` - were named - `_zsh_highlight_acme_highlighter_predicate` and - `_zsh_highlight_highlighter_acme_paint` respectively. - - These names are still supported for backwards compatibility; - however, support for them will be removed in a future major or minor release (v0.x.0 or v1.0.0). - -* Activate your highlighter in `~/.zshrc`: - - ```zsh - ZSH_HIGHLIGHT_HIGHLIGHTERS+=(acme) - ``` - -* [Write tests](../tests/README.md). diff --git a/.zsh/fsh/docs/highlighters/brackets.md b/.zsh/fsh/docs/highlighters/brackets.md deleted file mode 100644 index 8410135..0000000 --- a/.zsh/fsh/docs/highlighters/brackets.md +++ /dev/null @@ -1,31 +0,0 @@ -zsh-syntax-highlighting / highlighters / brackets -------------------------------------------------- - -This is the `brackets` highlighter, that highlights brackets and parentheses, and -matches them. - - -### How to tweak it - -This highlighter defines the following styles: - -* `bracket-error` - unmatched brackets -* `bracket-level-N` - brackets with nest level N -* `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket - -To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, -for example in `~/.zshrc`: - -```zsh -# To define styles for nested brackets up to level 4 -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/docs/highlighters/cursor.md b/.zsh/fsh/docs/highlighters/cursor.md deleted file mode 100644 index c4f22b8..0000000 --- a/.zsh/fsh/docs/highlighters/cursor.md +++ /dev/null @@ -1,24 +0,0 @@ -zsh-syntax-highlighting / highlighters / cursor ------------------------------------------------ - -This is the `cursor` highlighter, that highlights the cursor. - - -### How to tweak it - -This highlighter defines the following styles: - -* `cursor` - the style for the current cursor position - -To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, -for example in `~/.zshrc`: - -```zsh -ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/docs/highlighters/line.md b/.zsh/fsh/docs/highlighters/line.md deleted file mode 100644 index 1081fe1..0000000 --- a/.zsh/fsh/docs/highlighters/line.md +++ /dev/null @@ -1,24 +0,0 @@ -zsh-syntax-highlighting / highlighters / line ---------------------------------------------- - -This is the `line` highlighter, that highlights the whole line. - - -### How to tweak it - -This highlighter defines the following styles: - -* `line` - the style for the whole line - -To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, -for example in `~/.zshrc`: - -```zsh -ZSH_HIGHLIGHT_STYLES[line]='bold' -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/docs/highlighters/main.md b/.zsh/fsh/docs/highlighters/main.md deleted file mode 100644 index cc6186b..0000000 --- a/.zsh/fsh/docs/highlighters/main.md +++ /dev/null @@ -1,121 +0,0 @@ -zsh-syntax-highlighting / highlighters / main ---------------------------------------------- - -This is the `main` highlighter, that highlights: - -* Commands -* Options -* Arguments -* Paths -* Strings - -This highlighter is active by default. - - -### How to tweak it - -This highlighter defines the following styles: - -* `unknown-token` - unknown tokens / errors -* `reserved-word` - shell reserved words (`if`, `for`) -* `alias` - aliases -* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer) -* `global-alias` - global aliases -* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`) -* `function` - function names -* `command` - command names -* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`) -* `commandseparator` - command separation tokens (`;`, `&&`) -* `hashed-command` - hashed commands -* `autodirectory` - a directory name in command position when the `AUTO_CD` option is set -* `path` - existing filenames -* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default) -* `path_prefix` - prefixes of existing filenames -* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default) -* `globbing` - globbing expressions (`*.txt`) -* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`) -* `command-substitution` - command substitutions (`$(echo foo)`) -* `command-substitution-unquoted` - an unquoted command substitution (`$(echo foo)`) -* `command-substitution-quoted` - a quoted command substitution (`"$(echo foo)"`) -* `command-substitution-delimiter` - command substitution delimiters (`$(` and `)`) -* `command-substitution-delimiter-unquoted` - an unquoted command substitution delimiters (`$(` and `)`) -* `command-substitution-delimiter-quoted` - a quoted command substitution delimiters (`"$(` and `)"`) -* `process-substitution` - process substitutions (`<(echo foo)`) -* `process-substitution-delimiter` - process substitution delimiters (`<(` and `)`) -* `arithmetic-expansion` - arithmetic expansion `$(( 42 ))`) -* `single-hyphen-option` - single-hyphen options (`-o`) -* `double-hyphen-option` - double-hyphen options (`--option`) -* `back-quoted-argument` - backtick command substitution (`` `foo` ``) -* `back-quoted-argument-unclosed` - unclosed backtick command substitution (`` `foo ``) -* `back-quoted-argument-delimiter` - backtick command substitution delimiters (`` ` ``) -* `single-quoted-argument` - single-quoted arguments (`` 'foo' ``) -* `single-quoted-argument-unclosed` - unclosed single-quoted arguments (`` 'foo ``) -* `double-quoted-argument` - double-quoted arguments (`` "foo" ``) -* `double-quoted-argument-unclosed` - unclosed double-quoted arguments (`` "foo ``) -* `dollar-quoted-argument` - dollar-quoted arguments (`` $'foo' ``) -* `dollar-quoted-argument-unclosed` - unclosed dollar-quoted arguments (`` $'foo ``) -* `rc-quote` - two single quotes inside single quotes when the `RC_QUOTES` option is set (`` 'foo''bar' ``) -* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`) -* `back-double-quoted-argument` - backslash escape sequences inside double-quoted arguments (`\"` in `"foo\"bar"`) -* `back-dollar-quoted-argument` - backslash escape sequences inside dollar-quoted arguments (`\x` in `$'\x48'`) -* `assign` - parameter assignments (`x=foo` and `x=( )`) -* `redirection` - redirection operators (`<`, `>`, etc) -* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) -* `comment` - elided parameters in command position (`$x ls` when `$x` is unset or empty) -* `named-fd` - named file descriptor (the `fd` in `echo foo {fd}>&2`) -* `numeric-fd` - numeric file descriptor (the `2` in `echo foo {fd}>&2`) -* `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command). -* `default` - everything else - -To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, -for example in `~/.zshrc`: - -```zsh -# Declare the variable -typeset -A ZSH_HIGHLIGHT_STYLES - -# To differentiate aliases from other command types -ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold' - -# To have paths colored instead of underlined -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan' - -# To disable highlighting of globbing expressions -ZSH_HIGHLIGHT_STYLES[globbing]='none' -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -#### Parameters - -To avoid partial path lookups on a path, add the path to the `ZSH_HIGHLIGHT_DIRS_BLACKLIST` array. - -```zsh -ZSH_HIGHLIGHT_DIRS_BLACKLIST+=(/mnt/slow_share) -``` - -### Useless trivia - -#### Forward compatibility. - -zsh-syntax-highlighting attempts to be forward-compatible with zsh. -Specifically, we attempt to facilitate highlighting _command word_ types that -had not yet been invented when this version of zsh-syntax-highlighting was -released. - -A _command word_ is something like a function name, external command name, et -cetera. (See -[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines] -for a formal definition.) - -If a new _kind_ of command word is ever added to zsh — something conceptually -different than "function" and "alias" and "external command" — then command words -of that (new) kind will be highlighted by the style `arg0_$kind`, -where `$kind` is the output of `type -w` on the new kind of command word. If that -style is not defined, then the style `arg0` will be used instead. - -[zshmisc-Simple-Commands-And-Pipelines]: http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/docs/highlighters/pattern.md b/.zsh/fsh/docs/highlighters/pattern.md deleted file mode 100644 index e67d79f..0000000 --- a/.zsh/fsh/docs/highlighters/pattern.md +++ /dev/null @@ -1,24 +0,0 @@ -zsh-syntax-highlighting / highlighters / pattern ------------------------------------------------- - -This is the `pattern` highlighter, that highlights user-defined patterns. - - -### How to tweak it - -To use this highlighter, associate patterns with styles in the -`ZSH_HIGHLIGHT_PATTERNS` associative array, for example in `~/.zshrc`: - -```zsh -# Declare the variable -typeset -A ZSH_HIGHLIGHT_PATTERNS - -# To have commands starting with `rm -rf` in red: -ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/docs/highlighters/regexp.md b/.zsh/fsh/docs/highlighters/regexp.md deleted file mode 100644 index 5c8a89e..0000000 --- a/.zsh/fsh/docs/highlighters/regexp.md +++ /dev/null @@ -1,30 +0,0 @@ -zsh-syntax-highlighting / highlighters / regexp ------------------------------------------------- - -This is the `regexp` highlighter, that highlights user-defined regular -expressions. It's similar to the `pattern` highlighter, but allows more complex -patterns. - -### How to tweak it - -To use this highlighter, associate regular expressions with styles in the -`ZSH_HIGHLIGHT_REGEXP` associative array, for example in `~/.zshrc`: - -```zsh -typeset -A ZSH_HIGHLIGHT_REGEXP -ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' fg=123,bold) -``` - -This will highlight "sudo" only as a complete word, i.e., "sudo cmd", but not -"sudoedit" - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -See also: [regular expressions tutorial][perlretut], zsh regexp operator `=~` -in [the `zshmisc(1)` manual page][zshmisc-Conditional-Expressions] - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting -[perlretut]: http://perldoc.perl.org/perlretut.html -[zshmisc-Conditional-Expressions]: http://zsh.sourceforge.net/Doc/Release/Conditional-Expressions.html#Conditional-Expressions diff --git a/.zsh/fsh/docs/highlighters/root.md b/.zsh/fsh/docs/highlighters/root.md deleted file mode 100644 index d120d20..0000000 --- a/.zsh/fsh/docs/highlighters/root.md +++ /dev/null @@ -1,25 +0,0 @@ -zsh-syntax-highlighting / highlighters / root ---------------------------------------------- - -This is the `root` highlighter, that highlights the whole line if the current -user is root. - - -### How to tweak it - -This highlighter defines the following styles: - -* `root` - the style for the whole line if the current user is root. - -To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, -for example in `~/.zshrc`: - -```zsh -ZSH_HIGHLIGHT_STYLES[root]='bg=red' -``` - -The syntax for values is the same as the syntax of "types of highlighting" of -the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)` -manual page][zshzle-Character-Highlighting]. - -[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting diff --git a/.zsh/fsh/fast-highlight b/.zsh/fsh/fast-highlight new file mode 100644 index 0000000..d47ed5b --- /dev/null +++ b/.zsh/fsh/fast-highlight @@ -0,0 +1,1463 @@ +# -*- mode: sh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors +# Copyright (c) 2016-2019 Sebastian Gniazdowski (modifications) +# All rights reserved. +# +# The only licensing for this file follows. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- + +typeset -gA __fast_highlight_main__command_type_cache FAST_BLIST_PATTERNS +typeset -g FAST_WORK_DIR +: ${FAST_WORK_DIR:=$FAST_BASE_DIR} +FAST_WORK_DIR=${~FAST_WORK_DIR} +() { + emulate -L zsh -o extendedglob + local -A map + map=( "XDG:" "${XDG_CONFIG_HOME:-$HOME/.config}/fsh/" + "LOCAL:" "/usr/local/share/fsh/" + "HOME:" "$HOME/.fsh/" + "OPT:" "/opt/local/share/fsh/" + ) + FAST_WORK_DIR=${${FAST_WORK_DIR/(#m)(#s)(XDG|LOCAL|HOME|OPT):(#c0,1)/${map[${MATCH%:}:]}}%/} +} + +# Define default styles. You can set this after loading the plugin in +# Zshrc and use 256 colors via numbers, like: fg=150 +typeset -gA FAST_HIGHLIGHT_STYLES +if [[ -e $FAST_WORK_DIR/current_theme.zsh ]]; then + source $FAST_WORK_DIR/current_theme.zsh +else +# built-in theme +zstyle :plugin:fast-syntax-highlighting theme default +: ${FAST_HIGHLIGHT_STYLES[default]:=none} +: ${FAST_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} +: ${FAST_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[subcommand]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[alias]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[suffix-alias]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[global-alias]:=bg=blue} +: ${FAST_HIGHLIGHT_STYLES[builtin]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[function]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[command]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[precommand]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[commandseparator]:=none} +: ${FAST_HIGHLIGHT_STYLES[hashed-command]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[path]:=fg=magenta} +: ${FAST_HIGHLIGHT_STYLES[path-to-dir]:=fg=magenta,underline} +: ${FAST_HIGHLIGHT_STYLES[path_pathseparator]:=} +: ${FAST_HIGHLIGHT_STYLES[globbing]:=fg=blue,bold} +: ${FAST_HIGHLIGHT_STYLES[globbing-ext]:=fg=13} +: ${FAST_HIGHLIGHT_STYLES[history-expansion]:=fg=blue,bold} +: ${FAST_HIGHLIGHT_STYLES[single-hyphen-option]:=fg=cyan} +: ${FAST_HIGHLIGHT_STYLES[double-hyphen-option]:=fg=cyan} +: ${FAST_HIGHLIGHT_STYLES[back-quoted-argument]:=none} +: ${FAST_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[back-or-dollar-double-quoted-argument]:=fg=cyan} +: ${FAST_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} +: ${FAST_HIGHLIGHT_STYLES[assign]:=none} +: ${FAST_HIGHLIGHT_STYLES[redirection]:=none} +: ${FAST_HIGHLIGHT_STYLES[comment]:=fg=black,bold} +: ${FAST_HIGHLIGHT_STYLES[variable]:=fg=113} +: ${FAST_HIGHLIGHT_STYLES[mathvar]:=fg=blue,bold} +: ${FAST_HIGHLIGHT_STYLES[mathnum]:=fg=magenta} +: ${FAST_HIGHLIGHT_STYLES[matherr]:=fg=red} +: ${FAST_HIGHLIGHT_STYLES[assign-array-bracket]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[for-loop-variable]:=none} +: ${FAST_HIGHLIGHT_STYLES[for-loop-operator]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[for-loop-number]:=fg=magenta} +: ${FAST_HIGHLIGHT_STYLES[for-loop-separator]:=fg=yellow,bold} +: ${FAST_HIGHLIGHT_STYLES[here-string-tri]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[here-string-text]:=bg=18} +: ${FAST_HIGHLIGHT_STYLES[here-string-var]:=fg=cyan,bg=18} +: ${FAST_HIGHLIGHT_STYLES[case-input]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[case-parentheses]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[case-condition]:=bg=blue} +: ${FAST_HIGHLIGHT_STYLES[paired-bracket]:=bg=blue} +: ${FAST_HIGHLIGHT_STYLES[bracket-level-1]:=fg=green,bold} +: ${FAST_HIGHLIGHT_STYLES[bracket-level-2]:=fg=yellow,bold} +: ${FAST_HIGHLIGHT_STYLES[bracket-level-3]:=fg=cyan,bold} +: ${FAST_HIGHLIGHT_STYLES[single-sq-bracket]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[double-sq-bracket]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[double-paren]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[correct-subtle]:=fg=12} +: ${FAST_HIGHLIGHT_STYLES[incorrect-subtle]:=fg=red} +: ${FAST_HIGHLIGHT_STYLES[subtle-separator]:=fg=green} +: ${FAST_HIGHLIGHT_STYLES[subtle-bg]:=bg=18} +: ${FAST_HIGHLIGHT_STYLES[secondary]:=free} +fi + +# This can overwrite some of *_STYLES fields +[[ -r $FAST_WORK_DIR/theme_overlay.zsh ]] && source $FAST_WORK_DIR/theme_overlay.zsh + +typeset -gA __FAST_HIGHLIGHT_TOKEN_TYPES + +__FAST_HIGHLIGHT_TOKEN_TYPES=( + + # Precommand + + 'builtin' 1 + 'command' 1 + 'exec' 1 + 'nocorrect' 1 + 'noglob' 1 + 'pkexec' 1 # immune to #121 because it's usually not passed --option flags + + # Control flow + # Tokens that, at (naively-determined) "command position", are followed by + # a de jure command position. All of these are reserved words. + + $'\x7b' 2 # block '{' + $'\x28' 2 # subshell '(' + '()' 2 # anonymous function + 'while' 2 + 'until' 2 + 'if' 2 + 'then' 2 + 'elif' 2 + 'else' 2 + 'do' 2 + 'time' 2 + 'coproc' 2 + '!' 2 # reserved word; unrelated to $histchars[1] + + # Command separators + + '|' 3 + '||' 3 + ';' 3 + '&' 3 + '&&' 3 + '|&' 3 + '&!' 3 + '&|' 3 + # ### 'case' syntax, but followed by a pattern, not by a command + # ';;' ';&' ';|' +) + +# A hash instead of multiple globals +typeset -gA FAST_HIGHLIGHT + +# Brackets highlighter active by default +: ${FAST_HIGHLIGHT[use_brackets]:=1} + +FAST_HIGHLIGHT+=( + chroma-fast-theme →chroma/-fast-theme.ch + chroma-alias →chroma/-alias.ch + chroma-autoload →chroma/-autoload.ch + chroma-autorandr →chroma/-autorandr.ch + chroma-docker →chroma/-docker.ch + chroma-example →chroma/-example.ch + chroma-ionice →chroma/-ionice.ch + chroma-make →chroma/-make.ch + chroma-nice →chroma/-nice.ch + chroma-nmcli →chroma/-nmcli.ch + chroma-node →chroma/-node.ch + chroma-perl →chroma/-perl.ch + chroma-printf →chroma/-printf.ch + chroma-ruby →chroma/-ruby.ch + chroma-scp →chroma/-scp.ch + chroma-ssh →chroma/-ssh.ch + + chroma-git →chroma/main-chroma.ch%git + chroma-hub →chroma/-hub.ch + chroma-lab →chroma/-lab.ch + chroma-svn →chroma/-subversion.ch + chroma-svnadmin →chroma/-subversion.ch + chroma-svndumpfilter →chroma/-subversion.ch + + chroma-egrep →chroma/-grep.ch + chroma-fgrep →chroma/-grep.ch + chroma-grep →chroma/-grep.ch + + chroma-awk →chroma/-awk.ch + chroma-gawk →chroma/-awk.ch + chroma-mawk →chroma/-awk.ch + + chroma-source →chroma/-source.ch + chroma-. →chroma/-source.ch + + chroma-bash →chroma/-sh.ch + chroma-fish →chroma/-sh.ch + chroma-sh →chroma/-sh.ch + chroma-zsh →chroma/-sh.ch + + chroma-whatis →chroma/-whatis.ch + chroma-man →chroma/-whatis.ch + + chroma-- →chroma/-precommand.ch + chroma-xargs →chroma/-precommand.ch + chroma-nohup →chroma/-precommand.ch + chroma-strace →chroma/-precommand.ch + chroma-ltrace →chroma/-precommand.ch + + chroma-hg →chroma/-subcommand.ch + chroma-cvs →chroma/-subcommand.ch + chroma-pip →chroma/-subcommand.ch + chroma-pip2 →chroma/-subcommand.ch + chroma-pip3 →chroma/-subcommand.ch + chroma-gem →chroma/-subcommand.ch + chroma-bundle →chroma/-subcommand.ch + chroma-yard →chroma/-subcommand.ch + chroma-cabal →chroma/-subcommand.ch + chroma-npm →chroma/-subcommand.ch + chroma-nvm →chroma/-subcommand.ch + chroma-yarn →chroma/-subcommand.ch + chroma-brew →chroma/-subcommand.ch + chroma-port →chroma/-subcommand.ch + chroma-yum →chroma/-subcommand.ch + chroma-dnf →chroma/-subcommand.ch + chroma-tmux →chroma/-subcommand.ch + chroma-pass →chroma/-subcommand.ch + chroma-aws →chroma/-subcommand.ch + chroma-apt →chroma/-subcommand.ch + chroma-apt-get →chroma/-subcommand.ch + chroma-apt-cache →chroma/-subcommand.ch + chroma-aptitude →chroma/-subcommand.ch + chroma-keyctl →chroma/-subcommand.ch + chroma-systemctl →chroma/-subcommand.ch + chroma-asciinema →chroma/-subcommand.ch + chroma-ipfs →chroma/-subcommand.ch + chroma-zinit →chroma/main-chroma.ch%zinit + chroma-aspell →chroma/-subcommand.ch + chroma-bspc →chroma/-subcommand.ch + chroma-cryptsetup →chroma/-subcommand.ch + chroma-diskutil →chroma/-subcommand.ch + chroma-exercism →chroma/-subcommand.ch + chroma-gulp →chroma/-subcommand.ch + chroma-i3-msg →chroma/-subcommand.ch + chroma-openssl →chroma/-subcommand.ch + chroma-solargraph →chroma/-subcommand.ch + chroma-subliminal →chroma/-subcommand.ch + chroma-svnadmin →chroma/-subcommand.ch + chroma-travis →chroma/-subcommand.ch + chroma-udisksctl →chroma/-subcommand.ch + chroma-xdotool →chroma/-subcommand.ch + chroma-zmanage →chroma/-subcommand.ch + chroma-zsystem →chroma/-subcommand.ch + chroma-zypper →chroma/-subcommand.ch + + chroma-fpath+=\( →chroma/-fpath_peq.ch + chroma-fpath=\( →chroma/-fpath_peq.ch + chroma-FPATH+= →chroma/-fpath_peq.ch + chroma-FPATH= →chroma/-fpath_peq.ch + #chroma-which →chroma/-which.ch + #chroma-vim →chroma/-vim.ch +) + +if [[ $OSTYPE == darwin* ]] { + noglob unset FAST_HIGHLIGHT[chroma-man] FAST_HIGHLIGHT[chroma-whatis] +} + +# Assignments seen, to know if math parameter exists +typeset -gA FAST_ASSIGNS_SEEN + +# Exposing tokens found on command position, +# for other scripts to process +typeset -ga ZLAST_COMMANDS + +# Get the type of a command. +# +# Uses the zsh/parameter module if available to avoid forks, and a +# wrapper around 'type -w' as fallback. +# +# Takes a single argument. +# +# The result will be stored in REPLY. +-fast-highlight-main-type() { + REPLY=$__fast_highlight_main__command_type_cache[(e)$1] + [[ -z $REPLY ]] && { + + if zmodload -e zsh/parameter; then + if (( $+aliases[(e)$1] )); then + REPLY=alias + elif (( ${+galiases[(e)$1]} )); then + REPLY="global alias" + elif (( $+functions[(e)$1] )); then + REPLY=function + elif (( $+builtins[(e)$1] )); then + REPLY=builtin + elif (( $+commands[(e)$1] )); then + REPLY=command + elif (( $+saliases[(e)${1##*.}] )); then + REPLY='suffix alias' + elif (( $reswords[(Ie)$1] )); then + REPLY=reserved + # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly + # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo + # exists and is in $PATH). Avoid triggering the bug, at the expense of + # falling through to the $() below, incurring a fork. (Issue #354.) + # + # The second disjunct mimics the isrelative() C call from the zsh bug. + elif [[ $1 != */* || ${+ZSH_ARGZERO} = "1" ]] && ! builtin type -w -- $1 >/dev/null 2>&1; then + REPLY=none + fi + fi + + [[ -z $REPLY ]] && REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }" + + [[ $REPLY = "none" ]] && { + [[ -n ${FAST_BLIST_PATTERNS[(k)${${(M)1:#/*}:-$PWD/$1}]} ]] || { + [[ -d $1 ]] && REPLY="dirpath" || { + for cdpath_dir in $cdpath; do + [[ -d $cdpath_dir/$1 ]] && { REPLY="dirpath"; break; } + done + } + } + } + + __fast_highlight_main__command_type_cache[(e)$1]=$REPLY + + } +} + +# Below are variables that must be defined in outer +# scope so that they are reachable in *-process() +-fast-highlight-fill-option-variables() { + if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then + FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]=0 + else + FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]=1 + fi + + if [[ -o path_dirs ]]; then + FAST_HIGHLIGHT[path_dirs_was_set]=1 + else + FAST_HIGHLIGHT[path_dirs_was_set]=0 + fi + + if [[ -o multi_func_def ]]; then + FAST_HIGHLIGHT[multi_func_def]=1 + else + FAST_HIGHLIGHT[multi_func_def]=0 + fi + + if [[ -o interactive_comments ]]; then + FAST_HIGHLIGHT[ointeractive_comments]=1 + else + FAST_HIGHLIGHT[ointeractive_comments]=0 + fi +} + +# Main syntax highlighting function. +-fast-highlight-process() +{ + emulate -L zsh + setopt extendedglob bareglobqual nonomatch typesetsilent + + [[ $CONTEXT == "select" ]] && return 0 + + (( FAST_HIGHLIGHT[path_dirs_was_set] )) && setopt PATH_DIRS + (( FAST_HIGHLIGHT[ointeractive_comments] )) && local interactive_comments= # _set_ to empty + + # Variable declarations and initializations + # in_array_assignment true between 'a=(' and the matching ')' + # braces_stack: "R" for round, "Q" for square, "Y" for curly + # _mybuf, cdpath_dir are used in sub-functions + local _start_pos=$3 _end_pos __start __end highlight_glob=1 __arg __style in_array_assignment=0 MATCH expanded_path braces_stack __buf=$1$2 _mybuf __workbuf cdpath_dir active_command alias_target _was_double_hyphen=0 __nul=$'\0' __tmp + # __arg_type can be 0, 1, 2 or 3, i.e. precommand, control flow, command separator + # __idx and _end_idx are used in sub-functions + # for this_word and next_word look below at commented integers and at state machine description + integer __arg_type=0 MBEGIN MEND in_redirection __len=${#__buf} __PBUFLEN=${#1} already_added offset __idx _end_idx this_word=1 next_word=0 __pos __asize __delimited=0 itmp iitmp + local -a match mbegin mend __inputs __list + + # This comment explains the numbers: + # BIT_for - word after reserved-word-recognized `for' + # BIT_afpcmd - word after a precommand that can take options, like `command' and `exec' + # integer BIT_start=1 BIT_regular=2 BIT_sudo_opt=4 BIT_sudo_arg=8 BIT_always=16 BIT_for=32 BIT_afpcmd=64 + # integer BIT_chroma=8192 + + integer BIT_case_preamble=512 BIT_case_item=1024 BIT_case_nempty_item=2048 BIT_case_code=4096 + + # Braces stack + # T - typeset, local, etc. + + # State machine + # + # The states are: + # - :__start: Command word + # - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i") + # - :sudo_arg: The argument to a sudo leading-dash option that takes one, + # when given as a separate word; i.e., "foo" in "-u foo" (two + # words) but not in "-ufoo" (one word). + # - :regular: "Not a command word", and command delimiters are permitted. + # Mainly used to detect premature termination of commands. + # - :always: The word 'always' in the «{ foo } always { bar }» syntax. + # + # When the kind of a word is not yet known, $this_word / $next_word may contain + # multiple states. For example, after "sudo -i", the next word may be either + # another --flag or a command name, hence the state would include both :__start: + # and :sudo_opt:. + # + # The tokens are always added with both leading and trailing colons to serve as + # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} + # will DTRT regardless of how many elements or repetitions $x has.. + # + # Handling of redirections: upon seeing a redirection token, we must stall + # the current state --- that is, the value of $this_word --- for two iterations + # (one for the redirection operator, one for the word following it representing + # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a + # redirection operator, decrement it each iteration, and stall the current state + # when it is non-zero. Thus, upon reaching the next word (the one that follows + # the redirection operator and target), $this_word will still contain values + # appropriate for the word immediately following the word that preceded the + # redirection operator. + # + # The "the previous word was a redirection operator" state is not communicated + # to the next iteration via $next_word/$this_word as usual, but via + # $in_redirection. The value of $next_word from the iteration that processed + # the operator is discarded. + # + + # Command exposure for other scripts + ZLAST_COMMANDS=() + # Restart observing of assigns + FAST_ASSIGNS_SEEN=() + # Restart function's gathering + FAST_HIGHLIGHT[chroma-autoload-elements]="" + # Restart FPATH elements gathering + FAST_HIGHLIGHT[chroma-fpath_peq-elements]="" + # Restart svn zinit's ICE gathering + FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=0 + FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]="" + + [[ -n $ZCALC_ACTIVE ]] && { + _start_pos=0; _end_pos=__len; __arg=$__buf + -fast-highlight-math-string + return 0 + } + + # Processing buffer + local proc_buf=$__buf needle + for __arg in ${interactive_comments-${(z)__buf}} \ + ${interactive_comments+${(zZ+c+)__buf}}; do + + # Initialize $next_word to its default value? + (( in_redirection = in_redirection > 0 ? in_redirection - 1 : in_redirection )); + (( next_word = (in_redirection == 0) ? 2 : next_word )) # else Stall $next_word. + (( next_word = next_word | (this_word & (BIT_case_code|8192)) )) + + # If we have a good delimiting construct just ending, and '{' + # occurs, then respect this and go for alternate syntax, i.e. + # treat '{' (\x7b) as if it's on command position + [[ $__arg = '{' && $__delimited = 2 ]] && { (( this_word = (this_word & ~2) | 1 )); __delimited=0; } + + __asize=${#__arg} + + # Reset state of working variables + already_added=0 + __style=${FAST_THEME_NAME}unknown-token + (( this_word & 1 )) && { in_array_assignment=0; [[ $__arg == 'noglob' ]] && highlight_glob=0; } + + # Compute the new $_start_pos and $_end_pos, skipping over whitespace in $__buf. + if [[ $__arg == ';' ]] ; then + braces_stack=${braces_stack#T} + __delimited=0 + + # Both ; and \n are rendered as a ";" (SEPER) by the ${(z)..} flag. + needle=$';\n' + [[ $proc_buf = (#b)[^$needle]#([$needle]##)* ]] && offset=${mbegin[1]}-1 + (( _start_pos += offset )) + (( _end_pos = _start_pos + __asize )) + + # Prepare next loop cycle + (( this_word & BIT_case_item )) || { (( in_array_assignment )) && (( this_word = 2 | (this_word & BIT_case_code) )) || { (( this_word = 1 | (this_word & BIT_case_code) )); highlight_glob=1; }; } + in_redirection=0 + + # Chance to highlight ';' + [[ ${proc_buf[offset+1]} != $'\n' ]] && { + [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}commandseparator]} != "none" ]] && \ + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}commandseparator]}") + } + + proc_buf=${proc_buf[offset + __asize + 1,__len]} + _start_pos=$_end_pos + continue + else + offset=0 + if [[ $proc_buf = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then + # The first, outer parenthesis + offset=${mend[1]} + fi + (( _start_pos += offset )) + (( _end_pos = _start_pos + __asize )) + + # No-hit will result in value 0 + __arg_type=${__FAST_HIGHLIGHT_TOKEN_TYPES[$__arg]} + fi + + (( this_word & 1 )) && ZLAST_COMMANDS+=( $__arg ); + + proc_buf=${proc_buf[offset + __asize + 1,__len]} + + # Handle the INTERACTIVE_COMMENTS option. + # + # We use the (Z+c+) flag so the entire comment is presented as one token in $__arg. + if [[ -n ${interactive_comments+'set'} && $__arg == ${histchars[3]}* ]]; then + if (( this_word & 3 )); then + __style=${FAST_THEME_NAME}comment + else + __style=${FAST_THEME_NAME}unknown-token # prematurely terminated + fi + # ADD + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + _start_pos=$_end_pos + continue + fi + + # Redirection? + [[ $__arg == (<0-9>|)(\<|\>)* && $__arg != (\<|\>)$'\x28'* && $__arg != "<<<" ]] && \ + in_redirection=2 + + # Special-case the first word after 'sudo'. + if (( ! in_redirection )); then + (( this_word & 4 )) && [[ $__arg != -* ]] && (( this_word = this_word ^ 4 )) + + # Parse the sudo command line + if (( this_word & 4 )); then + case $__arg in + # Flag that requires an argument + '-'[Cgprtu]) + (( this_word = this_word & ~1 )) + (( next_word = 8 | (this_word & BIT_case_code) )) + ;; + # This prevents misbehavior with sudo -u -otherargument + '-'*) + (( this_word = this_word & ~1 )) + (( next_word = next_word | 1 | 4 )) + ;; + esac + elif (( this_word & 8 )); then + (( next_word = next_word | 4 | 1 )) + elif (( this_word & 64 )); then + [[ $__arg = -[pvV-]## && $active_command = "command" ]] && (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) + [[ $__arg = -[cla-]## && $active_command = "exec" ]] && (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) + [[ $__arg = \{[a-zA-Z_][a-zA-Z0-9_]#\} && $active_command = "exec" ]] && { + # Highlight {descriptor} passed to exec + (( this_word = (this_word & ~1) | 2, next_word = (next_word | 65) & ~2 )) + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}exec-descriptor]}") + already_added=1 + } + fi + fi + + (( this_word & 8192 )) && { + __list=( ${(z@)${aliases[$active_command]:-${active_command##*/}}##[[:space:]]#(command|builtin|exec|noglob|nocorrect|pkexec)[[:space:]]#} ) + ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 0 "$__arg" $_start_pos $_end_pos 2>/dev/null && continue + } + + (( this_word & 1 )) && { + # !in_redirection needed particularly for exec {A}>b {C}>d + (( !in_redirection )) && active_command=$__arg + _mybuf=${${aliases[$active_command]:-${active_command##*/}}##[[:space:]]#(command|builtin|exec|noglob|nocorrect|pkexec)[[:space:]]#} + [[ "$_mybuf" = (#b)(FPATH+(#c0,1)=)* ]] && _mybuf="${match[1]} ${(j: :)${(s,:,)${_mybuf#FPATH+(#c0,1)=}}}" + [[ -n ${FAST_HIGHLIGHT[chroma-${_mybuf%% *}]} ]] && { + __list=( ${(z@)_mybuf} ) + if (( ${#__list} > 1 )) || [[ $active_command != $_mybuf ]]; then + __style=${FAST_THEME_NAME}alias + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + + ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 1 "${__list[1]}" "-100000" $_end_pos 2>/dev/null || \ + (( this_word = next_word, next_word = 2 )) + + for _mybuf in "${(@)__list[2,-1]}"; do + (( next_word = next_word | (this_word & (BIT_case_code|8192)) )) + ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 0 "$_mybuf" "-100000" $_end_pos 2>/dev/null || \ + (( this_word = next_word, next_word = 2 )) + done + + # This might have been done multiple times in chroma, but + # as _end_pos doesn't change, it can be done one more time + _start_pos=$_end_pos + + continue + else + ${${FAST_HIGHLIGHT[chroma-${__list[1]}]}%\%*} ${(M)FAST_HIGHLIGHT[chroma-${__list[1]}]%\%*} 1 "$__arg" $_start_pos $_end_pos 2>/dev/null && continue + fi + } || (( 1 )) + } + + expanded_path="" + + # The Great Fork: is this a command word? Is this a non-command word? + if (( this_word & 16 )) && [[ $__arg == 'always' ]]; then + # try-always construct + __style=${FAST_THEME_NAME}reserved-word # de facto a reserved word, although not de jure + (( next_word = 1 | (this_word & BIT_case_code) )) + elif (( (this_word & 1) && (in_redirection == 0) )) || [[ $braces_stack = T* ]]; then # T - typedef, etc. + if (( __arg_type == 1 )); then + __style=${FAST_THEME_NAME}precommand + [[ $__arg = "command" || $__arg = "exec" ]] && (( next_word = next_word | 64 )) + elif [[ $__arg = (sudo|doas) ]]; then + __style=${FAST_THEME_NAME}precommand + (( next_word = (next_word & ~2) | 4 | 1 )) + else + _mybuf=${${(Q)__arg}#\"} + if (( ${+parameters} )) && \ + [[ $_mybuf = (#b)(*)(*)\$([a-zA-Z_][a-zA-Z0-9_]#|[0-9]##)(*) || \ + $_mybuf = (#b)(*)(*)\$\{([a-zA-Z_][a-zA-Z0-9_:-]#|[0-9]##)(*) ]] && \ + (( ${+parameters[${match[3]%%:-*}]} )) + then + -fast-highlight-main-type ${match[1]}${match[2]}${(P)match[3]%%:-*}${match[4]#\}} + elif [[ $braces_stack = T* ]]; then # T - typedef, etc. + REPLY=none + else + : ${expanded_path::=${~_mybuf}} + -fast-highlight-main-type $expanded_path + fi + + case $REPLY in + reserved) # reserved word + [[ $__arg = "[[" ]] && __style=${FAST_THEME_NAME}double-sq-bracket || __style=${FAST_THEME_NAME}reserved-word + if [[ $__arg == $'\x7b' ]]; then # Y - '{' + braces_stack='Y'$braces_stack + + elif [[ $__arg == $'\x7d' && $braces_stack = Y* ]]; then # Y - '}' + # We're at command word, so no need to check right_brace_is_recognised_everywhere + braces_stack=${braces_stack#Y} + __style=${FAST_THEME_NAME}reserved-word + (( next_word = next_word | 16 )) + + elif [[ $__arg == "[[" ]]; then # A - [[ + braces_stack='A'$braces_stack + + # Counting complex brackets (for brackets-highlighter): 1. [[ as command + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) + elif [[ $__arg == "for" ]]; then + (( next_word = next_word | 32 )) # BIT_for + + elif [[ $__arg == "case" ]]; then + (( next_word = BIT_case_preamble )) + + elif [[ $__arg = (typeset|declare|local|float|integer|export|readonly) ]]; then + braces_stack='T'$braces_stack + fi + ;; + 'suffix alias') __style=${FAST_THEME_NAME}suffix-alias;; + 'global alias') __style=${FAST_THEME_NAME}global-alias;; + + alias) + if [[ $__arg = ?*'='* ]]; then + # The so called (by old code) "insane_alias" + __style=${FAST_THEME_NAME}unknown-token + else + __style=${FAST_THEME_NAME}alias + (( ${+aliases} )) && alias_target=${aliases[$__arg]} || alias_target="${"$(alias -- $__arg)"#*=}" + [[ ${__FAST_HIGHLIGHT_TOKEN_TYPES[$alias_target]} = "1" && $__arg_type != "1" ]] && __FAST_HIGHLIGHT_TOKEN_TYPES[$__arg]="1" + fi + ;; + + builtin) [[ $__arg = "[" ]] && { + __style=${FAST_THEME_NAME}single-sq-bracket + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) + } || __style=${FAST_THEME_NAME}builtin + # T - typeset, etc. mode + [[ $__arg = (typeset|declare|local|float|integer|export|readonly) ]] && braces_stack='T'$braces_stack + [[ $__arg = eval ]] && (( next_word = next_word | 256 )) + ;; + + function) __style=${FAST_THEME_NAME}function;; + + command) __style=${FAST_THEME_NAME}command;; + + hashed) __style=${FAST_THEME_NAME}hashed-command;; + + dirpath) __style=${FAST_THEME_NAME}path-to-dir;; + + none) # Assign? + if [[ $__arg == [a-zA-Z_][a-zA-Z0-9_]#(|\[[^\]]#\])(|[^\]]#\])(|[+])=* || $__arg == [0-9]##(|[+])=* || ( $braces_stack = T* && ${__arg_type} != 3 ) ]] { + __style=${FAST_THEME_NAME}assign + FAST_ASSIGNS_SEEN[${__arg%%=*}]=1 + + # Handle array assignment + [[ $__arg = (#b)*=(\()*(\))* || $__arg = (#b)*=(\()* ]] && { + (( __start=_start_pos-__PBUFLEN+${mbegin[1]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") + # Counting complex brackets (for brackets-highlighter): 2. ( in array assign + _FAST_COMPLEX_BRACKETS+=( $__start ) + (( mbegin[2] >= 1 )) && { + (( __start=_start_pos-__PBUFLEN+${mbegin[2]}-1, __end=__start+1, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") + # Counting complex brackets (for brackets-highlighter): 3a. ) in array assign + _FAST_COMPLEX_BRACKETS+=( $__start ) + } || in_array_assignment=1 + } || { [[ ${braces_stack[1]} != 'T' ]] && (( next_word = (next_word | 1) & ~2 )); } + + # Handle no-string highlight, string "/' highlight, math mode highlight + local ctmp="\"" dtmp="'" + itmp=${__arg[(i)$ctmp]}-1 iitmp=${__arg[(i)$dtmp]}-1 + integer jtmp=${__arg[(b:itmp+2:i)$ctmp]} jjtmp=${__arg[(b:iitmp+2:i)$dtmp]} + (( itmp < iitmp && itmp <= __asize - 1 )) && (( jtmp > __asize && (jtmp = __asize), 1 > 0 )) && \ + (( __start=_start_pos-__PBUFLEN+itmp, __end=_start_pos-__PBUFLEN+jtmp, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") && \ + { itmp=${__arg[(i)=]}; __arg=${__arg[itmp,__asize]}; (( _start_pos += itmp - 1 )); + -fast-highlight-string; (( _start_pos = _start_pos - itmp + 1, 1 > 0 )); } || \ + { + (( iitmp <= __asize - 1 )) && (( jjtmp > __asize && (jjtmp = __asize), 1 > 0 )) && \ + (( __start=_start_pos-__PBUFLEN+iitmp, __end=_start_pos-__PBUFLEN+jjtmp, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}single-quoted-argument]}") + } || \ + { + itmp=${__arg[(i)=]}; __arg=${__arg[itmp,__asize]}; (( _start_pos += itmp - 1 )); + [[ ${__arg[2,4]} = '$((' ]] && { -fast-highlight-math-string; + (( __start=_start_pos-__PBUFLEN+2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + # Counting complex brackets (for brackets-highlighter): 4. $(( in assign argument + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + (( jtmp = ${__arg[(I)\)\)]}-1, jtmp > 0 )) && { + (( __start=_start_pos-__PBUFLEN+jtmp, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + # Counting complex brackets (for brackets-highlighter): 5. )) in assign argument + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + } + } || -fast-highlight-string; + (( _start_pos = _start_pos - itmp + 1, 1 > 0 )) + } + + } elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]] { + __style=${FAST_THEME_NAME}history-expansion + + } elif [[ $__arg == ${histchars[2]}* ]] { + __style=${FAST_THEME_NAME}history-expansion + + } elif (( __arg_type == 3 )) { + # This highlights empty commands (semicolon follows nothing) as an error. + # Zsh accepts them, though. + (( this_word & 3 )) && __style=${FAST_THEME_NAME}commandseparator + + } elif [[ $__arg[1,2] == '((' ]] { + # Arithmetic evaluation. + # + # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} + # splitter would only output the '((' token if the matching '))' had + # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" + # would be highlighted as an error until the matching "))" are typed. + # + # We highlight just the opening parentheses, as a reserved word; this + # is how [[ ... ]] is highlighted, too. + + # ADD + (( __start=_start_pos-__PBUFLEN, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + already_added=1 + + # Counting complex brackets (for brackets-highlighter): 6. (( as command + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + + -fast-highlight-math-string + + # ADD + [[ $__arg[-2,-1] == '))' ]] && { + (( __start=_end_pos-__PBUFLEN-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + (( __delimited = __delimited ? 2 : __delimited )) + + # Counting complex brackets (for brackets-highlighter): 7. )) for as-command (( + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + } + + } elif [[ $__arg == '()' ]] { + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) + # anonymous function + __style=${FAST_THEME_NAME}reserved-word + } elif [[ $__arg == $'\x28' ]] { + # subshell '(', stack: letter 'R' + __style=${FAST_THEME_NAME}reserved-word + braces_stack='R'$braces_stack + + } elif [[ $__arg == $'\x29' ]] { + # ')', stack: letter 'R' for subshell + [[ $braces_stack = R* ]] && { braces_stack=${braces_stack#R}; __style=${FAST_THEME_NAME}reserved-word; } + + } elif (( this_word & 14 )) { + __style=${FAST_THEME_NAME}default + + } elif [[ $__arg = (';;'|';&'|';|') ]] && (( this_word & BIT_case_code )) { + (( next_word = (next_word | BIT_case_item) & ~(BIT_case_code+3) )) + __style=${FAST_THEME_NAME}default + + } elif [[ $__arg = \$\([^\(]* ]] { + already_added=1 + } + ;; + *) + # ADD + # (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end commandtypefromthefuture-$REPLY") + already_added=1 + ;; + esac + fi + # in_redirection || BIT_regular || BIT_sudo_opt || BIT_sudo_arg + elif (( in_redirection + this_word & 14 )) + then # $__arg is a non-command word + case $__arg in + ']]') + # A - [[ + [[ $braces_stack = A* ]] && { + __style=${FAST_THEME_NAME}double-sq-bracket + (( __delimited = __delimited ? 2 : __delimited )) + # Counting complex brackets (for brackets-highlighter): 8a. ]] for as-command [[ + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) + } || { + [[ $braces_stack = *A* ]] && { + __style=${FAST_THEME_NAME}unknown-token + # Counting complex brackets (for brackets-highlighter): 8b. ]] for as-command [[ + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) + } || __style=${FAST_THEME_NAME}default + } + braces_stack=${braces_stack#A} + ;; + ']') + __style=${FAST_THEME_NAME}single-sq-bracket + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) + ;; + $'\x28') + # '(' inside [[ + __style=${FAST_THEME_NAME}reserved-word + braces_stack='R'$braces_stack + ;; + $'\x29') # ')' - subshell or end of array assignment + if (( in_array_assignment )); then + in_array_assignment=0 + (( next_word = next_word | 1 )) + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}assign-array-bracket]}") + already_added=1 + # Counting complex brackets (for brackets-highlighter): 3b. ) in array assign + _FAST_COMPLEX_BRACKETS+=( $__start ) + elif [[ $braces_stack = R* ]]; then + braces_stack=${braces_stack#R} + __style=${FAST_THEME_NAME}reserved-word + # Zsh doesn't tokenize final ) if it's just single ')', + # but logically what's below is correct, so it is kept + # in case Zsh will be changed / fixed, etc. + elif [[ $braces_stack = F* ]]; then + __style=${FAST_THEME_NAME}builtin + fi + ;; + $'\x28\x29') # '()' - possibly a function definition + # || false # TODO: or if the previous word was a command word + (( FAST_HIGHLIGHT[multi_func_def] )) && (( next_word = next_word | 1 )) + __style=${FAST_THEME_NAME}reserved-word + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN + 1 )) ) + # Remove possible annoying unknown-token __style, or misleading function __style + reply[-1]=() + __fast_highlight_main__command_type_cache[$active_command]="function" + ;; + '--'*) [[ $__arg == "--" ]] && { _was_double_hyphen=1; __style=${FAST_THEME_NAME}double-hyphen-option; } || { + (( !_was_double_hyphen )) && { + [[ "$__arg" = (#b)(--[a-zA-Z0-9_]##)=(*) ]] && { + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") + (( __start=_start_pos-__PBUFLEN+1+mend[1], __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") + already_added=1 + } || __style=${FAST_THEME_NAME}double-hyphen-option + } || __style=${FAST_THEME_NAME}default + } + ;; + '-'*) (( !_was_double_hyphen )) && __style=${FAST_THEME_NAME}single-hyphen-option || __style=${FAST_THEME_NAME}default;; + \$\'*) + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}dollar-quoted-argument]}") + -fast-highlight-dollar-string + already_added=1 + ;; + [\"\']*|[^\"\\]##([\\][\\])#\"*|[^\'\\]##([\\][\\])#\'*) + # 256 is eval-mode + if (( this_word & 256 )) && [[ $__arg = [\'\"]* ]]; then + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}recursive-base]}") + if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then + __idx=1 + _mybuf=$FAST_THEME_NAME + FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} + (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh + else + __idx=0 + fi + (( _start_pos-__PBUFLEN >= 0 )) && \ + -fast-highlight-process "$PREBUFFER" "${${__arg%[\'\"]}#[\'\"]}" $(( _start_pos + 1 )) + (( __idx )) && FAST_THEME_NAME=$_mybuf + already_added=1 + else + [[ $__arg = *([^\\][\#][\#]|"(#b)"|"(#B)"|"(#m)"|"(#c")* && $highlight_glob -ne 0 ]] && \ + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}globbing-ext]}") + # Reusing existing vars, treat this code like C++ STL + # header, full of underscores and unhelpful var names + itmp=0 __workbuf=$__arg __tmp="" cdpath_dir=$__arg + while [[ $__workbuf = (#b)[^\"\'\\]#(([\"\'])|[\\](*))(*) ]]; do + [[ -n ${match[3]} ]] && { + itmp+=${mbegin[1]} + # Optionally skip 1 quoted char + [[ $__tmp = \' ]] && __workbuf=${match[3]} || { itmp+=1; __workbuf=${match[3]:1}; } + } || { + itmp+=${mbegin[1]} + __workbuf=${match[4]} + # Toggle quoting + [[ ( ${match[1]} = \" && $__tmp != \' ) || ( ${match[1]} = \' && $__tmp != \" ) ]] && { + [[ $__tmp = [\"\'] ]] && { + # End of quoting + (( __start=_start_pos-__PBUFLEN+iitmp-1, __end=_start_pos-__PBUFLEN+itmp, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}${${${__tmp#\'}:+double-quoted-argument}:-single-quoted-argument}]}") + already_added=1 + + [[ $__tmp = \" ]] && { + __arg=${cdpath_dir[iitmp+1,itmp-1]} + (( _start_pos += iitmp - 1 + 1 )) + -fast-highlight-string + (( _start_pos = _start_pos - iitmp + 1 - 1 )) + } + # The end-of-quoting proper algorithm action + __tmp= + } || { + # Beginning of quoting + iitmp=itmp + # The beginning-of-quoting proper algorithm action + __tmp=${match[1]} + } + } + } + done + [[ $__tmp = [\"\'] ]] && { + (( __start=_start_pos-__PBUFLEN+iitmp-1, __end=_start_pos-__PBUFLEN+__asize, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}${${${__tmp#\'}:+double-quoted-argument}:-single-quoted-argument}]}") + already_added=1 + + [[ $__tmp = \" ]] && { + __arg=${cdpath_dir[iitmp+1,__asize]} + (( _start_pos += iitmp - 1 + 1 )) + -fast-highlight-string + (( _start_pos = _start_pos - iitmp + 1 - 1 )) + } + } + fi + ;; + \$\(\(*) + already_added=1 + -fast-highlight-math-string + # ADD + (( __start=_start_pos-__PBUFLEN+1, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + # Counting complex brackets (for brackets-highlighter): 9. $(( as argument + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + # ADD + [[ $__arg[-2,-1] == '))' ]] && (( __start=_end_pos-__PBUFLEN-2, __end=__start+2, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-paren]}") + # Counting complex brackets (for brackets-highlighter): 10. )) for as-argument $(( + _FAST_COMPLEX_BRACKETS+=( $__start $(( __start + 1 )) ) + ;; + '`'*) + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-quoted-argument]}") + if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then + __idx=1 + _mybuf=$FAST_THEME_NAME + FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} + (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh + else + __idx=0 + fi + (( _start_pos-__PBUFLEN >= 0 )) && \ + -fast-highlight-process "$PREBUFFER" "${${__arg%[\`]}#[\`]}" $(( _start_pos + 1 )) + (( __idx )) && FAST_THEME_NAME=$_mybuf + already_added=1 + ;; + '((') # 'F' - (( after for + (( this_word & 32 )) && { + braces_stack='F'$braces_stack + __style=${FAST_THEME_NAME}double-paren + # Counting complex brackets (for brackets-highlighter): 11. (( as for-syntax + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) + # This is set after __arg_type == 2, and also here, + # when another alternate-syntax capable command occurs + __delimited=1 + } + ;; + '))') # 'F' - (( after for + [[ $braces_stack = F* ]] && { + braces_stack=${braces_stack#F} + __style=${FAST_THEME_NAME}double-paren + # Counting complex brackets (for brackets-highlighter): 12. )) as for-syntax + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) $(( _start_pos-__PBUFLEN+1 )) ) + (( __delimited = __delimited ? 2 : __delimited )) + } + ;; + '<<<') + (( next_word = (next_word | 128) & ~3 )) + [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-tri]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-tri]}") + already_added=1 + ;; + *) # F - (( after for + if [[ $braces_stack = F* ]]; then + -fast-highlight-string + _mybuf=$__arg + __idx=_start_pos + while [[ $_mybuf = (#b)[^a-zA-Z\{\$]#([a-zA-Z][a-zA-Z0-9]#)(*) ]]; do + (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-variable]}") + __idx+=${mend[1]} + _mybuf=${match[2]} + done + + _mybuf=$__arg + __idx=_start_pos + while [[ $_mybuf = (#b)[^+\<\>=:\*\|\&\^\~-]#([+\<\>=:\*\|\&\^\~-]##)(*) ]]; do + (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-operator]}") + __idx+=${mend[1]} + _mybuf=${match[2]} + done + + _mybuf=$__arg + __idx=_start_pos + while [[ $_mybuf = (#b)[^0-9]#([0-9]##)(*) ]]; do + (( __start=__idx-__PBUFLEN+${mbegin[1]}-1, __end=__idx-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-number]}") + __idx+=${mend[1]} + _mybuf=${match[2]} + done + + if [[ $__arg = (#b)[^\;]#(\;)[\ ]# ]]; then + (( __start=_start_pos-__PBUFLEN+${mbegin[1]}-1, __end=_start_pos-__PBUFLEN+${mend[1]}+1-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") + fi + + already_added=1 + elif [[ $__arg = *([^\\][\#][\#]|"(#b)"|"(#B)"|"(#m)"|"(#c")* ]]; then + (( highlight_glob )) && __style=${FAST_THEME_NAME}globbing-ext || __style=${FAST_THEME_NAME}default + elif [[ $__arg = ([*?]*|*[^\\][*?]*) ]]; then + (( highlight_glob )) && __style=${FAST_THEME_NAME}globbing || __style=${FAST_THEME_NAME}default + elif [[ $__arg = \$* ]]; then + __style=${FAST_THEME_NAME}variable + elif [[ $__arg = $'\x7d' && $braces_stack = Y* && ${FAST_HIGHLIGHT[right_brace_is_recognised_everywhere]} = "1" ]]; then + # right brace, i.e. $'\x7d' == '}' + # Parsing rule: # { + # + # Additionally, `tt(})' is recognized in any position if neither the + # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set.""" + braces_stack=${braces_stack#Y} + __style=${FAST_THEME_NAME}reserved-word + (( next_word = next_word | 16 )) + elif [[ $__arg = (';;'|';&'|';|') ]] && (( this_word & BIT_case_code )); then + (( next_word = (next_word | BIT_case_item) & ~(BIT_case_code+3) )) + __style=${FAST_THEME_NAME}default + elif [[ $__arg = ${histchars[1]}* && -n ${__arg[2]} ]]; then + __style=${FAST_THEME_NAME}history-expansion + elif (( __arg_type == 3 )); then + __style=${FAST_THEME_NAME}commandseparator + elif (( in_redirection == 2 )); then + __style=${FAST_THEME_NAME}redirection + elif (( ${+galiases[(e)$__arg]} )); then + __style=${FAST_THEME_NAME}global-alias + else + if [[ ${FAST_HIGHLIGHT[no_check_paths]} != 1 ]]; then + if [[ ${FAST_HIGHLIGHT[use_async]} != 1 ]]; then + if -fast-highlight-check-path noasync; then + # ADD + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + already_added=1 + + # TODO: path separators, optimize and add to async code-path + [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} ]] && { + for (( __pos = _start_pos; __pos <= _end_pos; __pos++ )) ; do + # ADD + [[ ${__buf[__pos]} == "/" ]] && (( __start=__pos-__PBUFLEN, __start >= 0 )) && reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") + done + } + else + __style=${FAST_THEME_NAME}default + fi + else + if [[ -z ${FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]} || $(( EPOCHSECONDS - FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}-born-at] )) -gt 8 ]]; then + if [[ $LASTWIDGET != *-or-beginning-search ]]; then + exec {PCFD}< <(-fast-highlight-check-path; sleep 5) + command sleep 0 + FAST_HIGHLIGHT[path-queue]+=";$_start_pos $_end_pos;" + is-at-least 5.0.6 && __pos=1 || __pos=0 + zle -F ${${__pos:#0}:+-w} $PCFD fast-highlight-check-path-handler + already_added=1 + else + __style=${FAST_THEME_NAME}default + fi + elif [[ ${FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]%D} -eq 1 ]]; then + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path${${(M)FAST_HIGHLIGHT[cache-path-${(q)__arg}-${_start_pos}]%D}:+-to-dir}]}") + already_added=1 + else + __style=${FAST_THEME_NAME}default + fi + fi + else + __style=${FAST_THEME_NAME}default + fi + fi + ;; + esac + elif (( this_word & 128 )) + then + (( next_word = (next_word | 2) & ~129 )) + [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-text]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-text]}") + -fast-highlight-string ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}here-string-var]:#none} + already_added=1 + elif (( this_word & (BIT_case_preamble + BIT_case_item) )) + then + if (( this_word & BIT_case_preamble )); then + [[ $__arg = "in" ]] && { + __style=${FAST_THEME_NAME}reserved-word + (( next_word = BIT_case_item )) + } || { + __style=${FAST_THEME_NAME}case-input + (( next_word = BIT_case_preamble )) + } + else + if (( this_word & BIT_case_nempty_item == 0 )) && [[ $__arg = "esac" ]]; then + (( next_word = 1 )) + __style=${FAST_THEME_NAME}reserved-word + elif [[ $__arg = (\(*\)|\)|\() ]]; then + [[ $__arg = *\) ]] && (( next_word = BIT_case_code | 1 )) || (( next_word = BIT_case_item | BIT_case_nempty_item )) + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos-__PBUFLEN )) ) + (( ${#__arg} > 1 )) && { + _FAST_COMPLEX_BRACKETS+=( $(( _start_pos+${#__arg}-1-__PBUFLEN )) ) + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}") + (( __start=_start_pos+1-__PBUFLEN, __end=_end_pos-1-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}") + already_added=1 + } || { + __style=${FAST_THEME_NAME}case-parentheses + } + else + (( next_word = BIT_case_item | BIT_case_nempty_item )) + __style=${FAST_THEME_NAME}case-condition + fi + fi + fi + if [[ $__arg = (#b)*'#'(([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])|([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]))* || $__arg = (#b)*'rgb('(([0-9a-fA-F][0-9a-fA-F](#c0,1)),([0-9a-fA-F][0-9a-fA-F](#c0,1)),([0-9a-fA-F][0-9a-fA-F](#c0,1)))* ]]; then + if [[ -n $match[2] ]]; then + if [[ $match[2] = ?? || $match[3] = ?? || $match[4] = ?? ]]; then + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#${(l:2::0:)match[2]}${(l:2::0:)match[3]}${(l:2::0:)match[4]}") + else + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#$match[2]$match[3]$match[4]") + fi + else + (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end bg=#$match[5]$match[6]$match[7]") + fi + already_added=1 + fi + + # ADD + (( already_added == 0 )) && [[ ${FAST_HIGHLIGHT_STYLES[$__style]} != "none" ]] && (( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + + if (( (__arg_type == 3) && ((this_word & (BIT_case_preamble|BIT_case_item)) == 0) )); then + if [[ $__arg == ';' ]] && (( in_array_assignment )); then + # literal newline inside an array assignment + (( next_word = 2 | (next_word & BIT_case_code) )) + elif [[ -n ${braces_stack[(r)A]} ]]; then + # 'A' in stack -> inside [[ ... ]] + (( next_word = 2 | (next_word & BIT_case_code) )) + else + braces_stack=${braces_stack#T} + (( next_word = 1 | (next_word & BIT_case_code) )) + highlight_glob=1 + # A new command means that we should not expect that alternate + # syntax will occur (this is also in the ';' short-path), but + # || and && mean going down just 1 step, not all the way to 0 + [[ $__arg != ("||"|"&&") ]] && __delimited=0 || (( __delimited = __delimited == 2 ? 1 : __delimited )) + fi + elif (( ( (__arg_type == 1) || (__arg_type == 2) ) && (this_word & 1) )); then # (( __arg_type == 1 || __arg_type == 2 )) && (( this_word & 1 )) + __delimited=1 + (( next_word = 1 | (next_word & (64 | BIT_case_code)) )) + elif [[ $__arg == "repeat" ]] && (( this_word & 1 )); then + __delimited=1 + # skip the repeat-count word + in_redirection=2 + # The redirection mechanism assumes $this_word describes the word + # following the redirection. Make it so. + # + # That word can be a command word with shortloops (`repeat 2 ls`) + # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). + # + # The repeat-count word will be handled like a redirection target. + (( this_word = 3 )) + fi + _start_pos=$_end_pos + # This is the default/common codepath. + (( this_word = in_redirection == 0 ? next_word : this_word )) #else # Stall $this_word. + done + + # Do we have whole buffer? I.e. start at zero + [[ $3 != 0 ]] && return 0 + + # The loop overwrites ")" with "x", except those from $( ) substitution + # + # __pos: current nest level, starts from 0 + # __workbuf: copy of __buf, with limit on 250 characters + # __idx: index in whole command line buffer + # __list: list of coordinates of ) which shouldn't be ovewritten + _mybuf=${__buf[1,250]} __workbuf=$_mybuf __idx=0 __pos=0 __list=() + + while [[ $__workbuf = (#b)[^\(\)]#([\(\)])(*) ]]; do + if [[ ${match[1]} == \( ]]; then + __arg=${_mybuf[__idx+${mbegin[1]}-1,__idx+${mbegin[1]}-1+2]} + [[ $__arg = '$('[^\(] ]] && __list+=( $__pos ) + [[ $__arg = '$((' ]] && _mybuf[__idx+${mbegin[1]}-1]=x + # Increase parenthesis level + __pos+=1 + else + # Decrease parenthesis level + __pos=__pos-1 + [[ -z ${__list[(r)$__pos]} ]] && [[ $__pos -gt 0 ]] && _mybuf[__idx+${mbegin[1]}]=x + fi + __idx+=${mbegin[2]}-1 + __workbuf=${match[2]} + done + + # Run on fake buffer with replaced parentheses: ")" into "x" + if [[ "$_mybuf" = *$__nul* ]]; then + # Try to avoid conflict with the \0, however + # we have to split at *some* character - \7 + # is ^G, so one cannot have null and ^G at + # the same time on the command line + __nul=$'\7' + fi + + __inputs=( ${(ps:$__nul:)${(S)_mybuf//(#b)*\$\(([^\)]#)(\)|(#e))/${mbegin[1]};${mend[1]}${__nul}}%$__nul*} ) + if [[ "${__inputs[1]}" != "$_mybuf" && -n "${__inputs[1]}" ]]; then + if [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]} ]]; then + __idx=1 + __tmp=$FAST_THEME_NAME + FAST_THEME_NAME=${${${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}secondary]}:t:r}#(XDG|LOCAL|HOME|OPT):} + (( ${+FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}default]} )) || source $FAST_WORK_DIR/secondary_theme.zsh + else + __idx=0 + fi + for _mybuf in $__inputs; do + (( __start=${_mybuf%%;*}-__PBUFLEN-1, __end=${_mybuf##*;}-__PBUFLEN, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${__tmp}recursive-base]}") + # Pass authentic buffer for recursive analysis + -fast-highlight-process "$PREBUFFER" "${__buf[${_mybuf%%;*},${_mybuf##*;}]}" $(( ${_mybuf%%;*} - 1 )) + done + # Restore theme + (( __idx )) && FAST_THEME_NAME=$__tmp + fi + + return 0 +} + +-fast-highlight-check-path() +{ + (( _start_pos-__PBUFLEN >= 0 )) || \ + { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } + [[ $1 != "noasync" ]] && { + print -r -- ${sysparams[pid]} + # This is to fill cache + print -r -- $__arg + } + + : ${expanded_path:=${(Q)~__arg}} + [[ -n ${FAST_BLIST_PATTERNS[(k)${${(M)expanded_path:#/*}:-$PWD/$expanded_path}]} ]] && { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } + + [[ -z $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos"; return 1; } + [[ -d $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos ${_end_pos}D" || __style=${FAST_THEME_NAME}path-to-dir; return 0; } + [[ -e $expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos $_end_pos" || __style=${FAST_THEME_NAME}path; return 0; } + + # Search the path in CDPATH, only for CD command + [[ $active_command = "cd" ]] && for cdpath_dir in $cdpath; do + [[ -d $cdpath_dir/$expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos ${_end_pos}D" || __style=${FAST_THEME_NAME}path-to-dir; return 0; } + [[ -e $cdpath_dir/$expanded_path ]] && { [[ $1 != "noasync" ]] && print -r -- "$_start_pos $_end_pos" || __style=${FAST_THEME_NAME}path; return 0; } + done + + # It's not a path. + [[ $1 != "noasync" ]] && print -r -- "- $_start_pos $_end_pos" + return 1 +} + +-fast-highlight-check-path-handler() { + local IFS=$'\n' pid PCFD=$1 line stripped val + integer idx + + if read -r -u $PCFD pid; then + if read -r -u $PCFD val; then + if read -r -u $PCFD line; then + stripped=${${line#- }%D} + FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}-born-at]=$EPOCHSECONDS + idx=${${FAST_HIGHLIGHT[path-queue]}[(I)$stripped]} + (( idx > 0 )) && { + if [[ $line != -* ]]; then + FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]="1${(M)line%D}" + region_highlight+=("${line%% *} ${${line##* }%D} ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path${${(M)line%D}:+-to-dir}]}") + else + FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]=0 + fi + val=${FAST_HIGHLIGHT[path-queue]} + val[idx-1,idx+${#stripped}]="" + FAST_HIGHLIGHT[path-queue]=$val + [[ ${FAST_HIGHLIGHT[cache-path-${(q)val}-${stripped%% *}]%D} = 1 && ${#val} -le 27 ]] && zle -R + } + fi + fi + kill -9 $pid 2>/dev/null + fi + + zle -F -w ${PCFD} + exec {PCFD}<&- +} + +zle -N -- fast-highlight-check-path-handler -fast-highlight-check-path-handler + +# Highlight special blocks inside double-quoted strings +# +# The while [[ ... ]] pattern is logically ((A)|(B)|(C)|(D)|(E))(*), where: +# - A matches $var[abc] +# - B matches ${(...)var[abc]} +# - C matches $ +# - D matches \$ or \" or \' +# - E matches \* +# +# and the first condition -n ${match[7] uses D to continue searching when +# backslash-something (not ['"$]) is occured. +# +# $1 - additional style to glue-in to added style +-fast-highlight-string() +{ + (( _start_pos-__PBUFLEN >= 0 )) || return 0 + _mybuf=$__arg + __idx=_start_pos + + # 7 8 + while [[ $_mybuf = (#b)[^\$\\]#((\$(#B)([#+^=~](#c1,2))(#c0,1)(#B)([a-zA-Z_:][a-zA-Z0-9_:]#|[0-9]##)(#b)(\[[^\]]#\])(#c0,1))|(\$[{](#B)([#+^=~](#c1,2))(#c0,1)(#b)(\([a-zA-Z0-9_:@%#]##\))(#c0,1)[a-zA-Z0-9_:#]##(\[[^\]]#\])(#c0,1)[}])|\$|[\\][\'\"\$]|[\\](*))(*) ]]; do + [[ -n ${match[7]} ]] && { + # Skip following char – it is quoted. Choice is + # made to not highlight such quoting + __idx+=${mbegin[1]}+1 + _mybuf=${match[7]:1} + } || { + __idx+=${mbegin[1]}-1 + _end_idx=__idx+${mend[1]}-${mbegin[1]}+1 + _mybuf=${match[8]} + + # ADD + (( __start=__idx-__PBUFLEN, __end=_end_idx-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${${1:+$1}:-${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}}") + + __idx=_end_idx + } + done + return 0 +} + +# Highlight math and non-math context variables inside $(( )) and (( )) +# +# The while [[ ... ]] pattern is logically ((A)|(B)|(C)|(D))(*), where: +# - A matches $var[abc] +# - B matches ${(...)var[abc]} +# - C matches $ +# - D matches words [a-zA-Z]## (variables) +# +# Parameters used: _mybuf, __idx, _end_idx, __style +-fast-highlight-math-string() +{ + (( _start_pos-__PBUFLEN >= 0 )) || return 0 + _mybuf=$__arg + __idx=_start_pos + + # 7 + while [[ $_mybuf = (#b)[^\$_a-zA-Z0-9]#((\$(#B)(+|)(#B)([a-zA-Z_:][a-zA-Z0-9_:]#|[0-9]##)(#b)(\[[^\]]##\])(#c0,1))|(\$[{](#B)(+|)(#b)(\([a-zA-Z0-9_:@%#]##\))(#c0,1)[a-zA-Z0-9_:#]##(\[[^\]]##\])(#c0,1)[}])|\$|[a-zA-Z_][a-zA-Z0-9_]#|[0-9]##)(*) ]]; do + __idx+=${mbegin[1]}-1 + _end_idx=__idx+${mend[1]}-${mbegin[1]}+1 + _mybuf=${match[7]} + + [[ ${match[1]} = [0-9]* ]] && __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]} || { + [[ ${match[1]} = [a-zA-Z_]* ]] && { + [[ ${+parameters[${match[1]}]} = 1 || ${FAST_ASSIGNS_SEEN[${match[1]}]} = 1 ]] && \ + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathvar]} || \ + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}matherr]} + } || { + [[ ${match[1]} = "$"* ]] && { + match[1]=${match[1]//[\{\}+]/} + if [[ ${match[1]} = "$" || ${FAST_ASSIGNS_SEEN[${match[1]:1}]} = 1 ]] || \ + { eval "[[ -n \${(P)\${match[1]:1}} ]]" } 2>> /dev/null; then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]} + else + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}matherr]} + fi + } + } + } + + # ADD + [[ $__style != "none" && -n $__style ]] && (( __start=__idx-__PBUFLEN, __end=_end_idx-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end $__style") + + __idx=_end_idx + done +} + +# Highlight special chars inside dollar-quoted strings +-fast-highlight-dollar-string() +{ + (( _start_pos-__PBUFLEN >= 0 )) || return 0 + local i j k __style + local AA + integer c + + # Starting dollar-quote is at 1:2, so __start parsing at offset 3 in the string. + for (( i = 3 ; i < _end_pos - _start_pos ; i += 1 )) ; do + (( j = i + _start_pos - 1 )) + (( k = j + 1 )) + + case ${__arg[$i]} in + "\\") __style=${FAST_THEME_NAME}back-dollar-quoted-argument + for (( c = i + 1 ; c <= _end_pos - _start_pos ; c += 1 )); do + [[ ${__arg[$c]} != ([0-9xXuUa-fA-F]) ]] && break + done + AA=$__arg[$i+1,$c-1] + # Matching for HEX and OCT values like \0xA6, \xA6 or \012 + if [[ "$AA" == (#m)(#s)(x|X)[0-9a-fA-F](#c1,2) + || "$AA" == (#m)(#s)[0-7](#c1,3) + || "$AA" == (#m)(#s)u[0-9a-fA-F](#c1,4) + || "$AA" == (#m)(#s)U[0-9a-fA-F](#c1,8) + ]]; then + (( k += MEND )) + (( i += MEND )) + else + if (( __asize > i+1 )) && [[ $__arg[i+1] == [xXuU] ]]; then + # \x not followed by hex digits is probably an error + __style=${FAST_THEME_NAME}unknown-token + fi + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + fi + ;; + *) continue ;; + + esac + # ADD + (( __start=j-__PBUFLEN, __end=k-__PBUFLEN, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + done +} + +-fast-highlight-init() { + _FAST_COMPLEX_BRACKETS=() + __fast_highlight_main__command_type_cache=() +} + +typeset -ga FSH_LIST +-fsh_sy_h_shappend() { + FSH_LIST+=( "$(( $1 - 1 ));;$(( $2 ))" ) +} + +functions -M fsh_sy_h_append 2 2 -fsh_sy_h_shappend 2>/dev/null + +# vim:ft=zsh:sw=2:sts=2 diff --git a/.zsh/fsh/fast-string-highlight b/.zsh/fsh/fast-string-highlight new file mode 100644 index 0000000..cc8d860 --- /dev/null +++ b/.zsh/fsh/fast-string-highlight @@ -0,0 +1,77 @@ +# vim:ft=zsh:sw=4:sts=4 + +# +# $1 - PREBUFFER +# $2 - BUFFER +# +function -fast-highlight-string-process { + emulate -LR zsh + setopt extendedglob warncreateglobal typesetsilent + + local -A pos_to_level level_to_pos pair_map final_pairs + local input=$1$2 _mybuf=$1$2 __style __quoting + integer __idx=0 __pair_idx __level=0 __start __end + local -a match mbegin mend + + pair_map=( "(" ")" "{" "}" "[" "]" ) + + while [[ $_mybuf = (#b)([^"{}()[]\\\"'"]#)((["({[]})\"'"])|[\\](*))(*) ]]; do + if [[ -n ${match[4]} ]] { + __idx+=${mbegin[2]} + + [[ $__quoting = \' ]] && _mybuf=${match[4]} || { _mybuf=${match[4]:1}; (( ++ __idx )); } + } else { + __idx+=${mbegin[2]} + [[ -z $__quoting && -z ${_FAST_COMPLEX_BRACKETS[(r)$((__idx-${#PREBUFFER}-1))]} ]] && { + if [[ ${match[2]} = ["({["] ]]; then + pos_to_level[$__idx]=$(( ++__level )) + level_to_pos[$__level]=$__idx + elif [[ ${match[2]} = ["]})"] ]]; then + if (( __level > 0 )); then + __pair_idx=${level_to_pos[$__level]} + pos_to_level[$__idx]=$(( __level -- )) + [[ ${pair_map[${input[__pair_idx]}]} = ${input[__idx]} ]] && { + final_pairs[$__idx]=$__pair_idx + final_pairs[$__pair_idx]=$__idx + } + else + pos_to_level[$__idx]=-1 + fi + fi + } + + if [[ ${match[2]} = \" && $__quoting != \' ]] { + [[ $__quoting = '"' ]] && __quoting="" || __quoting='"'; + } + if [[ ${match[2]} = \' && $__quoting != \" ]] { + if [[ $__quoting = ("'"|"$'") ]] { + __quoting="" + } else { + if [[ $match[1] = *\$ ]] { + __quoting="\$'"; + } else { + __quoting="'"; + } + } + } + _mybuf=${match[5]} + } + done + + for __idx in ${(k)pos_to_level}; do + (( ${+final_pairs[$__idx]} )) && __style=${FAST_THEME_NAME}bracket-level-$(( ( (pos_to_level[$__idx]-1) % 3 ) + 1 )) || __style=${FAST_THEME_NAME}unknown-token + (( __start=__idx-${#PREBUFFER}-1, __end=__idx-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + done + + # If cursor is on a bracket, then highlight corresponding bracket, if any. + if [[ $WIDGET != zle-line-finish ]]; then + __idx=$(( CURSOR + 1 )) + if (( ${+pos_to_level[$__idx]} )) && (( ${+final_pairs[$__idx]} )); then + (( __start=final_pairs[$__idx]-${#PREBUFFER}-1, __end=final_pairs[$__idx]-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") && \ + reply+=("$CURSOR $__idx ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}paired-bracket]}") + fi + fi + return 0 +} diff --git a/.zsh/fsh/fast-syntax-highlighting.plugin.zsh b/.zsh/fsh/fast-syntax-highlighting.plugin.zsh new file mode 100644 index 0000000..c05dc4f --- /dev/null +++ b/.zsh/fsh/fast-syntax-highlighting.plugin.zsh @@ -0,0 +1,384 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors +# Copyright (c) 2017-2019 Sebastian Gniazdowski (modifications) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + + +# Standarized way of handling finding plugin dir, +# regardless of functionargzero and posixargzero, +# and with an option for a plugin manager to alter +# the plugin directory (i.e. set ZERO parameter) +# http://zdharma.org/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html +0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" +0="${${(M)0:#/*}:-$PWD/$0}" + +typeset -g FAST_HIGHLIGHT_VERSION=1.55 +typeset -g FAST_BASE_DIR="${0:h}" +typeset -ga _FAST_MAIN_CACHE +# Holds list of indices pointing at brackets that +# are complex, i.e. e.g. part of "[[" in [[ ... ]] +typeset -ga _FAST_COMPLEX_BRACKETS + +typeset -g FAST_WORK_DIR=${FAST_WORK_DIR:-${XDG_CACHE_HOME:-~/.cache}/fast-syntax-highlighting} +: ${FAST_WORK_DIR:=$FAST_BASE_DIR} +# Expand any tilde in the (supposed) path. +FAST_WORK_DIR=${~FAST_WORK_DIR} + +# Last (currently, possibly) loaded plugin isn't "fast-syntax-highlighting"? +# And FPATH isn't containing plugin dir? +if [[ ${zsh_loaded_plugins[-1]} != */fast-syntax-highlighting && -z ${fpath[(r)${0:h}]} ]] +then + fpath+=( "${0:h}" ) +fi + +if [[ ! -w $FAST_WORK_DIR ]]; then + FAST_WORK_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/fsh" + command mkdir -p "$FAST_WORK_DIR" +fi + +# Invokes each highlighter that needs updating. +# This function is supposed to be called whenever the ZLE state changes. +_zsh_highlight() +{ + # Store the previous command return code to restore it whatever happens. + local ret=$? + + # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains. + # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'. + if [[ $WIDGET == zle-isearch-update ]] && ! (( $+ISEARCHMATCH_ACTIVE )); then + region_highlight=() + return $ret + fi + + emulate -LR zsh + setopt extendedglob warncreateglobal typesetsilent noshortloops + + local REPLY # don't leak $REPLY into global scope + local -a reply + + # Do not highlight if there are more than 300 chars in the buffer. It's most + # likely a pasted command or a huge list of files in that case.. + [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret + + # Do not highlight if there are pending inputs (copy/paste). + [[ $PENDING -gt 0 ]] && return $ret + + # Reset region highlight to build it from scratch + # may need to remove path_prefix highlighting when the line ends + if [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified; then + -fast-highlight-init + -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + (( FAST_HIGHLIGHT[use_brackets] )) && { + _FAST_MAIN_CACHE=( $reply ) + -fast-highlight-string-process "$PREBUFFER" "$BUFFER" + } + region_highlight=( $reply ) + else + local char="${BUFFER[CURSOR+1]}" + if [[ "$char" = ["{([])}"] || "${FAST_HIGHLIGHT[prev_char]}" = ["{([])}"] ]]; then + FAST_HIGHLIGHT[prev_char]="$char" + (( FAST_HIGHLIGHT[use_brackets] )) && { + reply=( $_FAST_MAIN_CACHE ) + -fast-highlight-string-process "$PREBUFFER" "$BUFFER" + region_highlight=( $reply ) + } + fi + fi + + { + local cache_place + local -a region_highlight_copy + + # Re-apply zle_highlight settings + + # region + if (( REGION_ACTIVE == 1 )); then + _zsh_highlight_apply_zle_highlight region standout "$MARK" "$CURSOR" + elif (( REGION_ACTIVE == 2 )); then + () { + local needle=$'\n' + integer min max + if (( MARK > CURSOR )) ; then + min=$CURSOR max=$(( MARK + 1 )) + else + min=$MARK max=$CURSOR + fi + (( min = ${${BUFFER[1,$min]}[(I)$needle]} )) + (( max += ${${BUFFER:($max-1)}[(i)$needle]} - 1 )) + _zsh_highlight_apply_zle_highlight region standout "$min" "$max" + } + fi + + # yank / paste (zsh-5.1.1 and newer) + (( $+YANK_ACTIVE )) && (( YANK_ACTIVE )) && _zsh_highlight_apply_zle_highlight paste standout "$YANK_START" "$YANK_END" + + # isearch + (( $+ISEARCHMATCH_ACTIVE )) && (( ISEARCHMATCH_ACTIVE )) && _zsh_highlight_apply_zle_highlight isearch underline "$ISEARCHMATCH_START" "$ISEARCHMATCH_END" + + # suffix + (( $+SUFFIX_ACTIVE )) && (( SUFFIX_ACTIVE )) && _zsh_highlight_apply_zle_highlight suffix bold "$SUFFIX_START" "$SUFFIX_END" + + return $ret + + } always { + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER" + typeset -g _ZSH_HIGHLIGHT_PRIOR_RACTIVE="$REGION_ACTIVE" + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR + } +} + +# Apply highlighting based on entries in the zle_highlight array. +# This function takes four arguments: +# 1. The exact entry (no patterns) in the zle_highlight array: +# region, paste, isearch, or suffix +# 2. The default highlighting that should be applied if the entry is unset +# 3. and 4. Two integer values describing the beginning and end of the +# range. The order does not matter. +_zsh_highlight_apply_zle_highlight() { + local entry="$1" default="$2" + integer first="$3" second="$4" + + # read the relevant entry from zle_highlight + local region="${zle_highlight[(r)${entry}:*]}" + + if [[ -z "$region" ]]; then + # entry not specified at all, use default value + region=$default + else + # strip prefix + region="${region#${entry}:}" + + # no highlighting when set to the empty string or to 'none' + if [[ -z "$region" ]] || [[ "$region" == none ]]; then + return + fi + fi + + integer start end + if (( first < second )); then + start=$first end=$second + else + start=$second end=$first + fi + region_highlight+=("$start $end $region") +} + + +# ------------------------------------------------------------------------------------------------- +# API/utility functions for highlighters +# ------------------------------------------------------------------------------------------------- + +# Whether the command line buffer has been modified or not. +# +# Returns 0 if the buffer has changed since _zsh_highlight was last called. +_zsh_highlight_buffer_modified() +{ + [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]] || [[ "$REGION_ACTIVE" != "$_ZSH_HIGHLIGHT_PRIOR_RACTIVE" ]] || { _zsh_highlight_cursor_moved && [[ "$REGION_ACTIVE" = 1 || "$REGION_ACTIVE" = 2 ]] } +} + +# Whether the cursor has moved or not. +# +# Returns 0 if the cursor has moved since _zsh_highlight was last called. +_zsh_highlight_cursor_moved() +{ + [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR)) +} + +# ------------------------------------------------------------------------------------------------- +# Setup functions +# ------------------------------------------------------------------------------------------------- + +# Helper for _zsh_highlight_bind_widgets +# $1 is name of widget to call +_zsh_highlight_call_widget() +{ + integer ret + builtin zle "$@" + ret=$? + _zsh_highlight + return $ret +} + +# Rebind all ZLE widgets to make them invoke _zsh_highlights. +_zsh_highlight_bind_widgets() +{ + setopt localoptions noksharrays + local -F2 SECONDS + local prefix=orig-s${SECONDS/./}-r$(( RANDOM % 1000 )) # unique each time, in case we're sourced more than once + + # Load ZSH module zsh/zleparameter, needed to override user defined widgets. + zmodload zsh/zleparameter 2>/dev/null || { + print -r -- >&2 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' + return 1 + } + + # Override ZLE widgets to make them invoke _zsh_highlight. + local -U widgets_to_bind + widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|zle-line-pre-redraw|zle-keymap-select)}) + + # Always wrap special zle-line-finish widget. This is needed to decide if the + # current line ends and special highlighting logic needs to be applied. + # E.g. remove cursor imprint, don't highlight partial paths, ... + widgets_to_bind+=(zle-line-finish) + + # Always wrap special zle-isearch-update widget to be notified of updates in isearch. + # This is needed because we need to disable highlighting in that case. + widgets_to_bind+=(zle-isearch-update) + + local cur_widget + for cur_widget in $widgets_to_bind; do + case $widgets[$cur_widget] in + + # Already rebound event: do nothing. + user:_zsh_highlight_widget_*);; + + # The "eval"'s are required to make $cur_widget a closure: the value of the parameter at function + # definition time is used. + # + # We can't use ${0/_zsh_highlight_widget_} because these widgets are always invoked with + # NO_function_argzero, regardless of the option's setting here. + + # User defined widget: override and rebind old one with prefix "orig-". + user:*) zle -N -- $prefix-$cur_widget ${widgets[$cur_widget]#*:} + eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" + zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Completion widget: override and rebind old one with prefix "orig-". + completion:*) zle -C $prefix-$cur_widget ${${(s.:.)widgets[$cur_widget]}[2,3]} + eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" + zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Builtin widget: override and make it call the builtin ".widget". + builtin) eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }" + zle -N -- $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; + + # Incomplete or nonexistent widget: Bind to z-sy-h directly. + *) + if [[ $cur_widget == zle-* ]] && [[ -z $widgets[$cur_widget] ]]; then + _zsh_highlight_widget_${cur_widget}() { :; _zsh_highlight } + zle -N -- $cur_widget _zsh_highlight_widget_$cur_widget + else + # Default: unhandled case. + print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget ${(qq)cur_widget}" + fi + esac + done +} + +# ------------------------------------------------------------------------------------------------- +# Setup +# ------------------------------------------------------------------------------------------------- + +# Try binding widgets. +_zsh_highlight_bind_widgets || { + print -r -- >&2 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.' + return 1 +} + +# Reset scratch variables when commandline is done. +_zsh_highlight_preexec_hook() +{ + typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER= + typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=0 + typeset -ga _FAST_MAIN_CACHE + _FAST_MAIN_CACHE=() +} + +autoload -Uz add-zsh-hook +add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { + print -r -- >&2 'zsh-syntax-highlighting: failed loading add-zsh-hook.' +} + +/fshdbg() { + print -r -- "$@" >>! /tmp/reply +} + +ZSH_HIGHLIGHT_MAXLENGTH=10000 + +# Load zsh/parameter module if available +zmodload zsh/parameter 2>/dev/null +zmodload zsh/system 2>/dev/null + +autoload -Uz -- is-at-least fast-theme .fast-read-ini-file .fast-run-git-command \ + .fast-make-targets .fast-run-command .fast-zts-read-all +autoload -Uz -- →chroma/-git.ch →chroma/-hub.ch →chroma/-lab.ch →chroma/-example.ch \ + →chroma/-grep.ch →chroma/-perl.ch →chroma/-make.ch →chroma/-awk.ch \ + →chroma/-vim.ch →chroma/-source.ch →chroma/-sh.ch →chroma/-docker.ch \ + →chroma/-autoload.ch →chroma/-ssh.ch →chroma/-scp.ch →chroma/-which.ch \ + →chroma/-printf.ch →chroma/-ruby.ch →chroma/-whatis.ch →chroma/-alias.ch \ + →chroma/-subcommand.ch →chroma/-autorandr.ch →chroma/-nmcli.ch \ + →chroma/-fast-theme.ch →chroma/-node.ch →chroma/-fpath_peq.ch \ + →chroma/-precommand.ch →chroma/-subversion.ch →chroma/-ionice.ch \ + →chroma/-nice.ch →chroma/main-chroma.ch →chroma/-ogit.ch →chroma/-zinit.ch + +source "${0:h}/fast-highlight" +source "${0:h}/fast-string-highlight" + +local __fsyh_theme +zstyle -s :plugin:fast-syntax-highlighting theme __fsyh_theme + +[[ ( "${+termcap}" != 1 || "${termcap[Co]}" != <-> || "${termcap[Co]}" -lt "256" ) && "$__fsyh_theme" = (default|) ]] && { + FAST_HIGHLIGHT_STYLES[defaultvariable]="none" + FAST_HIGHLIGHT_STYLES[defaultglobbing-ext]="fg=blue,bold" + FAST_HIGHLIGHT_STYLES[defaulthere-string-text]="bg=blue" + FAST_HIGHLIGHT_STYLES[defaulthere-string-var]="fg=cyan,bg=blue" + FAST_HIGHLIGHT_STYLES[defaultcorrect-subtle]="bg=blue" + FAST_HIGHLIGHT_STYLES[defaultsubtle-bg]="bg=blue" + [[ "${FAST_HIGHLIGHT_STYLES[variable]}" = "fg=113" ]] && FAST_HIGHLIGHT_STYLES[variable]="none" + [[ "${FAST_HIGHLIGHT_STYLES[globbing-ext]}" = "fg=13" ]] && FAST_HIGHLIGHT_STYLES[globbing-ext]="fg=blue,bold" + [[ "${FAST_HIGHLIGHT_STYLES[here-string-text]}" = "bg=18" ]] && FAST_HIGHLIGHT_STYLES[here-string-text]="bg=blue" + [[ "${FAST_HIGHLIGHT_STYLES[here-string-var]}" = "fg=cyan,bg=18" ]] && FAST_HIGHLIGHT_STYLES[here-string-var]="fg=cyan,bg=blue" + [[ "${FAST_HIGHLIGHT_STYLES[correct-subtle]}" = "fg=12" ]] && FAST_HIGHLIGHT_STYLES[correct-subtle]="bg=blue" + [[ "${FAST_HIGHLIGHT_STYLES[subtle-bg]}" = "bg=18" ]] && FAST_HIGHLIGHT_STYLES[subtle-bg]="bg=blue" +} + +unset __fsyh_theme + +alias fsh-alias=fast-theme + +-fast-highlight-fill-option-variables + +if [[ ! -e $FAST_WORK_DIR/secondary_theme.zsh ]] { + if { type curl &>/dev/null } { + curl -fsSL -o "$FAST_WORK_DIR/secondary_theme.zsh" \ + https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/share/free_theme.zsh \ + &>/dev/null + } elif { type wget &>/dev/null } { + wget -O "$FAST_WORK_DIR/secondary_theme.zsh" \ + https://raw.githubusercontent.com/zdharma/fast-syntax-highlighting/master/share/free_theme.zsh \ + &>/dev/null + } + touch "$FAST_WORK_DIR/secondary_theme.zsh" +} + +if [[ $(uname -a) = (#i)*darwin* ]] { + typeset -gA FAST_HIGHLIGHT + FAST_HIGHLIGHT[chroma-man]= +} + +[[ $COLORTERM == (24bit|truecolor) || ${terminfo[colors]} -eq 16777216 ]] || zmodload zsh/nearcolor &>/dev/null diff --git a/.zsh/fsh/fast-theme b/.zsh/fsh/fast-theme new file mode 100644 index 0000000..06ad005 --- /dev/null +++ b/.zsh/fsh/fast-theme @@ -0,0 +1,385 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (c) 2018, 2019 Philippe Troin (F-i-f on GitHub) +# +# Theme support using ini-files. +# + +zmodload zsh/zutil 2>/dev/null + +emulate -LR zsh +setopt extendedglob typesetsilent warncreateglobal +autoload colors; colors + +typeset -g FAST_WORK_DIR +: ${FAST_WORK_DIR:=$FAST_BASE_DIR} +FAST_WORK_DIR=${~FAST_WORK_DIR} + +local -A map +map=( "XDG:" "${XDG_CONFIG_HOME:-$HOME/.config}/fsh/" + "LOCAL:" "/usr/local/share/fsh/" + "HOME:" "$HOME/.fsh/" + "OPT:" "/opt/local/share/fsh/" +) + +FAST_WORK_DIR=${${FAST_WORK_DIR/(#m)(#s)(XDG|LOCAL|HOME|OPT):(#c0,1)/${map[${MATCH%:}:]}}%/} + +local OPT_HELP OPT_VERBOSE OPT_QUIET OPT_RESET OPT_LIST OPT_TEST OPT_SECONDARY OPT_SHOW OPT_COPY OPT_OV_RESET +local OPT_PALETTE OPT_CDWD OPT_XCHG OPT_OV_XCHG +local -A opthash +zparseopts -E -D -A opthash h -help v -verbose q -quiet r -reset l -list t -test -secondary \ + s -show -copy-shipped-theme: R -ov-reset p -palette w -workdir \ + x -xchg y -ov-xchg || \ + { echo "Improper options given, see help (-h/--help)"; return 1; } + +(( ${+opthash[-h]} + ${+opthash[--help]} )) && OPT_HELP="-h" +(( ${+opthash[-v]} + ${+opthash[--verbose]} )) && OPT_VERBOSE="-v" +(( ${+opthash[-q]} + ${+opthash[--quiet]} )) && OPT_QUIET="-q" +(( ${+opthash[-r]} + ${+opthash[--reset]} )) && OPT_RESET="-r" +(( ${+opthash[-l]} + ${+opthash[--list]} )) && OPT_LIST="-l" +(( ${+opthash[-t]} + ${+opthash[--test]} )) && OPT_TEST="-t" +(( ${+opthash[--secondary]} )) && OPT_SECONDARY="--secondary" +(( ${+opthash[-s]} + ${+opthash[--show]} )) && OPT_SHOW="-s" +(( ${+opthash[--copy-shipped-theme]} )) && OPT_COPY="${opthash[--copy-shipped-theme]}" +(( ${+opthash[-R]} + ${+opthash[--ov-reset]} )) && OPT_OV_RESET="-R" +(( ${+opthash[-p]} + ${+opthash[--palette]} )) && OPT_PALETTE="-p" +(( ${+opthash[-w]} + ${+opthash[--workdir]} )) && OPT_CDWD="-w" +(( ${+opthash[-x]} + ${+opthash[--xchg]} )) && OPT_XCHG="-x" +(( ${+opthash[-y]} + ${+opthash[--ov-xchg]} )) && OPT_OV_XCHG="-y" + +local -a match mbegin mend +local MATCH; integer MBEGIN MEND + +[[ -n "$OPT_CDWD" ]] && { + builtin cd $FAST_WORK_DIR + return 0 +} + +[[ -n "$OPT_PALETTE" ]] && { + local n + local -a __colors + for n in {000..255} + do + __colors+=("%F{$n}$n%f") + done + print -cP $__colors + return +} + +[[ -n "$OPT_SHOW" ]] && { + print -r -- "Currently active theme: ${fg_bold[yellow]}$FAST_THEME_NAME$reset_color" + ( source "$FAST_WORK_DIR"/current_theme.zsh 2>/dev/null && print "Main theme (loaded at startup of a session): ${fg_bold[yellow]}$FAST_THEME_NAME$reset_color" || print "No main theme is set"; ) + return 0 +} + +[[ -n "$OPT_COPY" ]] && { + [[ ! -f "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" ]] && { print "Theme \`$OPT_COPY' doesn't exist in FSH plugin dir ($FAST_BASE_DIR/themes)"; return 1; } + [[ ! -r "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" ]] && { print "Theme \`$OPT_COPY' isn't readable in FSH plugin dir ($FAST_BASE_DIR/themes)"; return 1; } + [[ -n "$1" ]] && { + [[ ! -e "$1" && ! -e ${1:h} ]] && { print "Destination path doesn't exist, aborting"; return 1; } + } + command cp -vf "$FAST_BASE_DIR"/themes/"${OPT_COPY%.ini}.ini" "${${1:-.}%.ini}.ini" || return 1 + return 0 +} + +[[ -n "$OPT_RESET" ]] && { command rm -f "$FAST_WORK_DIR"/{current_theme.zsh,secondary_theme.zsh}; [[ -z "$OPT_QUIET" ]] && print "Reset done (no theme is now set, restart is required)"; return 0; } + +[[ -n "$OPT_OV_RESET" ]] && { command rm -f "$FAST_WORK_DIR"/theme_overlay.zsh; [[ -z "$OPT_QUIET" ]] && print "Overlay-reset done, it is inactive (restart is required)"; return 0; } + +[[ -n "$OPT_LIST" ]] && { + [[ -z "$OPT_QUIET" ]] && print -r -- "Available themes:" + print -rl -- "$FAST_BASE_DIR"/themes/*.ini(:t:r) + return 0 +} + +[[ -n "$OPT_HELP" ]] && { + print -r -- "Usage: fast-theme [-h/--help] [-v/--verbose] [-q/--quiet] [-t/--test] " + print -r -- " fast-theme [-r/--reset] [-l/--list] [-s/--show] [-p/--palette] [-w/--workdir]" + print -r -- " fast-theme --copy-shipped-theme {theme-name} [destination-path]" + print -r -- "" + print -r -- "Default action (after providing or ) is to switch" + print -r -- "current session and any future sessions to the new theme. Using ," + print -r -- "i.e.: a path to an ini file means using custom, own theme. The path can use an" + print -r -- "\"XDG:\" shorthand (e.g.: \"XDG:mytheme\") that will point to ~/.config/fsh/.ini" + print -r -- "(or \$XDG_CONFIG_HOME/fsh/.ini in general if the variable is set in the" + print -r -- "environment). If the INI file pointed in the path is \"*overlay*\", then it is" + print -r -- "not a full theme, but an additional theme-snippet that overwrites only selected" + print -r -- "styles of the main theme." + print -r -- "" + print -r -- "Other path-shorthands:" + print -r -- "LOCAL: = /usr/local/share/fsh/" + print -r -- "HOME: = $HOME/.fsh/" + print -r -- "OPT: = /opt/local/share/fsh/" + print -r -- "" + print -r -- "-r/--reset - unset any theme, use default highlighting (requires restart)" + print -r -- "-R/--ov-reset - unset overlay, use styles only from main-theme (requires restart)" + print -r -- "-l/--list - list names of available themes" + print -r -- "-t/--test - show test block of code after switching theme" + print -r -- "-s/--show - get and display the theme currently being set" + print -r -- "-p/--palette - just print all 256 colors and exit (useful when creating a theme)" + print -r -- "-w/--workdir - cd into \$FAST_WORK_DIR (if not set, then into the plugin directory)" + print -r -- "-v/--verbose - more messages during operation" + print -r -- "-q/--quiet - no default messages" + print -r -- "" + print -r -- "The option --copy-shipped-theme allows easy copying of one of the 6 shipped" + print -r -- "themes into given destination path. Normal use means changing directory to" + print -r -- "e.g.: ~/.config/fsh, and then issuing e.g.: \`fast-theme --copy-shipped-theme" + print -r -- "clean mytheme', to obtain a template for own new theme." + return 0 +} + +[[ -z "$1" ]] && { print -u2 "Provide a theme (its name or path to its file) to switch to, aborting (see -h/--help)"; return 1; } + +# FAST_HIGHLIGHT_STYLES key onto ini-file key +map=( + default "-" + unknown-token "-" + reserved-word "-" + subcommand "- reserved-word" + alias "- command builtin" + suffix-alias "- alias command builtin" + builtin "-" + function "- builtin command" + command "-" + precommand "- command" + commandseparator "-" + hashed-command "- command" + path "-" + path_pathseparator "pathseparator" + globbing "- back-or-dollar-double-quoted-argument" # fallback: variable in string "text $var text" + globbing-ext "- double-quoted-argument" # fallback: the string "abc..." + history-expansion "-" + single-hyphen-option "- single-quoted-argument" + double-hyphen-option "- double-quoted-argument" + back-quoted-argument "-" + single-quoted-argument "-" + double-quoted-argument "-" + dollar-quoted-argument "-" + back-or-dollar-double-quoted-argument "- back-dollar-quoted-argument" + back-dollar-quoted-argument "- back-or-dollar-double-quoted-argument" + assign "- reserved-word" + redirection "- reserved-word" + comment "-" + variable "-" + mathvar "- forvar variable" + mathnum "- fornum" + matherr "- incorrect-subtle" + assign-array-bracket "-" + for-loop-variable "forvar mathvar variable" + for-loop-number "fornum mathnum" + for-loop-operator "foroper reserved-word" + for-loop-separator "forsep commandseparator" + exec-descriptor "- reserved-word" + here-string-tri "-" + here-string-text "- subtle-bg" + here-string-var "- back-or-dollar-double-quoted-argument" + secondary "-" + recursive-base "- default" + case-input "- variable" + case-parentheses "- reserved-word" + case-condition "- correct-subtle" + correct-subtle "-" + incorrect-subtle "-" + subtle-separator "- commandseparator" + subtle-bg "- correct-subtle" + path-to-dir "- path" + paired-bracket "- subtle-bg correct-subtle" + bracket-level-1 "-" + bracket-level-2 "-" + bracket-level-3 "-" + global-alias "- alias suffix-alias" + single-sq-bracket "-" + double-sq-bracket "-" + double-paren "-" + optarg-string "- double-quoted-argument" + optarg-number "- mathnum" +) + +# In which order to generate entries +local -a order +order=( + default unknown-token reserved-word alias suffix-alias builtin function command precommand + commandseparator hashed-command path path_pathseparator globbing globbing-ext history-expansion + single-hyphen-option double-hyphen-option back-quoted-argument single-quoted-argument + double-quoted-argument dollar-quoted-argument back-or-dollar-double-quoted-argument + back-dollar-quoted-argument assign redirection comment variable mathvar + mathnum matherr assign-array-bracket for-loop-variable for-loop-number for-loop-operator + for-loop-separator exec-descriptor here-string-tri here-string-text here-string-var secondary + case-input case-parentheses case-condition correct-subtle incorrect-subtle subtle-separator subtle-bg + path-to-dir paired-bracket bracket-level-1 bracket-level-2 bracket-level-3 + global-alias subcommand single-sq-bracket double-sq-bracket double-paren + optarg-string optarg-number recursive-base +) + +[[ -n "$OPT_VERBOSE" ]] && print "Number of styles available for customization: ${#order}" + +# Named colors +local -a color +color=( red green blue yellow cyan magenta black white default ) + +# +# Execution starts here +# + +local -A out +local THEME_NAME THEME_PATH="$1" +if [[ "$1" = */* || "$1" = (XDG|LOCAL|HOME|OPT):* ]]; then + 1="${${1/(#s)XDG:/${${XDG_CONFIG_HOME:-$HOME/.config}%/}/fsh/}%.ini}.ini" + 1="${${1/(#s)LOCAL://usr/local/share/fsh/}%.ini}.ini" + 1="${${1/(#s)HOME:/$HOME/.fsh/}%.ini}.ini" + 1="${${1/(#s)OPT://opt/local/share/fsh/}%.ini}.ini" + 1=${~1} # allow user to quote ~ + + [[ ! -f "$1" ]] && { print -u2 "No such theme \`$1', aborting"; return 1; } + [[ ! -r "$1" ]] && { print -u2 "Theme \`$1' unreadable, aborting"; return 1; } + + THEME_NAME="${1:t:r}" + .fast-read-ini-file "$1" out "" +else + [[ ! -f "$FAST_BASE_DIR/themes/$1.ini" ]] && { print -u2 "No such theme \`$1', aborting"; return 1; } + [[ ! -r "$FAST_BASE_DIR/themes/$1.ini" ]] && { print -u2 "Theme \`$1' unreadable, aborting"; return 1; } + + THEME_NAME="$1" + .fast-read-ini-file "$FAST_BASE_DIR/themes/$1.ini" out "" +fi + +[[ -z "$OPT_SECONDARY" ]] && { [[ "$THEME_NAME" = *"overlay"* ]] && local outfile="theme_overlay.zsh" || local outfile="current_theme.zsh"; } || local outfile="secondary_theme.zsh" +[[ -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]] && command rm -f "$FAST_WORK_DIR"/"$outfile" + +# Set a zstyle and a parameter to carry theme name +if [[ -z "$OPT_SECONDARY" && -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]]; then + [[ "$THEME_NAME" != *"overlay"* ]] && { + print -r -- 'zstyle :plugin:fast-syntax-highlighting theme "'"$THEME_NAME"'"' >>! "$FAST_WORK_DIR"/"$outfile" + print -r -- 'typeset -g FAST_THEME_NAME="'"$THEME_NAME"'"' >>! "$FAST_WORK_DIR"/"$outfile" + zstyle :plugin:fast-syntax-highlighting theme "$THEME_NAME" + typeset -g FAST_THEME_NAME="$THEME_NAME" + } +elif [[ -z "$OPT_XCHG" && -z "$OPT_OV_XCHG" ]]; then + local FAST_THEME_NAME="$THEME_NAME" +fi + +# Store from which file the theme or overlay is being loaded +[[ "$THEME_NAME" != *"overlay" && -z "$OPT_OV_XCHG" ]] && FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}-path]="$THEME_PATH" || FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}-ov-path]="$THEME_PATH" + +# Generate current_theme.zsh or secondary_theme.zsh, traversing ini-file associative array +local k kk +local inikey inival result result2 first_val isbg +integer ov_counter=0 first +for k in "${order[@]}"; do + first=1 + for kk in ${(s. .)map[$k]} default; do + [[ "$kk" = "-" ]] && kk="$k" + (( first )) && first_val="$kk" + inikey="${out[(i)<*>_${kk}]}" + [[ -n "$inikey" ]] && { + (( !first )) && [[ -z "$OPT_QUIET" ]] && { + [[ $kk = default ]] && { + [[ "$THEME_NAME" != *"overlay"* ]] && print "Missing style: $first_val" + } || print "For style $first_val, went for fallback style $kk" + } + break + } + first=0 + [[ "$THEME_NAME" = *"overlay"* ]] && break + done + + # ORIG: Clear orig-style when loading a new theme, not overlay + [[ -z "$OPT_OV_XCHG" ]] && unset "FAST_HIGHLIGHT_STYLES[orig-style-$k]" + # ORIG: Restore orig-style when loading a new overlay + [[ -n "$OPT_OV_XCHG" && -n "${FAST_HIGHLIGHT_STYLES[orig-style-$k]}" ]] && { FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="${FAST_HIGHLIGHT_STYLES[orig-style-$k]}"; unset "FAST_HIGHLIGHT_STYLES[orig-style-$k]"; } + # Set only the keys provided in theme + [[ -z "$inikey" ]] && { [[ -z "$OPT_QUIET" && "$THEME_NAME" != *"overlay"* ]] && print "Missing style $first_val"; continue; } + + inival="${out[$inikey]}" + if [[ "$k" = "secondary" && -z "$OPT_SECONDARY" && -n "$inival" ]]; then + fast-theme -q --secondary "$inival" + fi + + result="" + if [[ $k = secondary ]]; then + result="$inival" + else + for kk in ${(s:,:)inival} + do + if [[ $kk = (none|(no-|)(bold|blink|conceal|reverse|standout|underline)) ]]; then + result+="${result:+,}$kk" + else + isbg=0 + if [[ $kk = bg:* ]]; then + isbg=1 + kk=${kk#bg:} + fi + if [[ $kk = (${(~j:|:)color}) || $kk = [0-9]## || $kk = \#[0-9a-fA-F](#c6,6) ]]; then + result+="${result:+,}" + (( isbg )) && result+="bg=" || result+="fg=" + result+="$kk" + else + print "cannot parse style $k: unknown color or style element $kk" + fi + fi + done + fi + + if [[ "$THEME_NAME" = *"overlay"* || -n "$OPT_OV_XCHG" ]]; then + (( ++ ov_counter )) + [[ -z "$OPT_XCHG$OPT_OV_XCHG" ]] && print -r -- ': ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}'"$k"']::='"$result"'}' >>! "$FAST_WORK_DIR"/"$outfile" + # ORIG: Save original value of the overwritten style + FAST_HIGHLIGHT_STYLES[orig-style-$k]=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]} + # Overwrite theme's style + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="$result" + else + [[ -z "$OPT_XCHG$OPT_OV_XCHG" ]] && print -r -- ': ${FAST_HIGHLIGHT_STYLES['"${FAST_THEME_NAME}$k"']:='"$result"'}' >>! "$FAST_WORK_DIR"/"$outfile" + FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}$k]="$result" + fi +done + +# This can overwrite some of *_STYLES fields +# Re-apply overlay on top of the theme we switched to +[[ "$THEME_NAME" != *"overlay"* ]] && [[ -r "$FAST_WORK_DIR"/theme_overlay.zsh ]] && source "$FAST_WORK_DIR"/theme_overlay.zsh + +zcompile $FAST_WORK_DIR/$outfile 2>/dev/null + +[[ -z "$OPT_QUIET" ]] && { + if [[ "$THEME_NAME" != *"overlay"* ]]; then + print "Switched to theme \`$THEME_NAME' (current session, and future sessions)" || \ + else + print "Processed the overlay ($ov_counter keys found), it is now active (for current session, and future sessions)" + fi +} + +[[ -n "$OPT_TEST" ]] && { + print -zr ' +# Subshell, assignments, math-mode +echo $(cat /etc/hosts |& grep -i "hello337") +local param1="text ${+variable[test]} text ${var} text"; typeset param2='"'"'other $variable'"'"' +math=$(( 10 + HISTSIZ + HISTSIZE + $SAVEHIST )) size=$(( 0 )) + +# Programming-like usage, bracket matching - through distinct colors; note the backslash quoting +for (( ii = 1; ii <= size; ++ ii )); do + if [[ "${cmds[ii]} string" = "| string" ]] + then + sidx=${buffer[(in:ii:)\$\(?#[^\\\\]\)]} # find opening cmd-subst + (( sidx <= len + 100 )) && { + eidx=${buffer[(b:sidx:ii)[^\\\\]\)]} # find closing cmd-subst + } + fi +done + +# Regular command-line usage +repeat 0 { + zsh -i -c "cat /etc/shells* | grep -x --line-buffered -i '"'/bin/zsh'"'" + builtin exit $return_value + fast-theme -tq default + fsh-alias -tq default-X # alias '"'"'fsh-alias=fast-theme'"'"' works just like the previous line + command -v git | grep ".+git" && echo $'"'"'Git is installed'"'"' + git checkout -m --ours /etc/shells && git status-X + gem install asciidoctor + cat <<<$PATH | tr : \\n > /dev/null 2>/usr/local + man -a fopen fopen-X + CFLAGS="-g -Wall -O0" ./configure +} +' +} + +return 0 +# vim:ft=zsh:et:sw=4:sts=4 diff --git a/.zsh/fsh/highlighters/README.md b/.zsh/fsh/highlighters/README.md deleted file mode 100644 index 8490ddf..0000000 --- a/.zsh/fsh/highlighters/README.md +++ /dev/null @@ -1,8 +0,0 @@ -zsh-syntax-highlighting / highlighters -====================================== - -Navigate into the individual highlighters' documentation to see -what styles (`$ZSH_HIGHLIGHT_STYLES` keys) each highlighter defines. - -Refer to the [documentation on highlighters](../docs/highlighters.md) for further -information. diff --git a/.zsh/fsh/highlighters/brackets/README.md b/.zsh/fsh/highlighters/brackets/README.md deleted file mode 120000 index 6997bd6..0000000 --- a/.zsh/fsh/highlighters/brackets/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/brackets.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/brackets/brackets-highlighter.zsh b/.zsh/fsh/highlighters/brackets/brackets-highlighter.zsh deleted file mode 100644 index bc388fd..0000000 --- a/.zsh/fsh/highlighters/brackets/brackets-highlighter.zsh +++ /dev/null @@ -1,107 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Define default styles. -: ${ZSH_HIGHLIGHT_STYLES[bracket-error]:=fg=red,bold} -: ${ZSH_HIGHLIGHT_STYLES[bracket-level-1]:=fg=blue,bold} -: ${ZSH_HIGHLIGHT_STYLES[bracket-level-2]:=fg=green,bold} -: ${ZSH_HIGHLIGHT_STYLES[bracket-level-3]:=fg=magenta,bold} -: ${ZSH_HIGHLIGHT_STYLES[bracket-level-4]:=fg=yellow,bold} -: ${ZSH_HIGHLIGHT_STYLES[bracket-level-5]:=fg=cyan,bold} -: ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout} - -# Whether the brackets highlighter should be called or not. -_zsh_highlight_highlighter_brackets_predicate() -{ - [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified -} - -# Brackets highlighting function. -_zsh_highlight_highlighter_brackets_paint() -{ - local char style - local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos - local -A levelpos lastoflevel matching - - # Find all brackets and remember which one is matching - pos=0 - for char in ${(s..)BUFFER} ; do - (( ++pos )) - case $char in - ["([{"]) - levelpos[$pos]=$((++level)) - lastoflevel[$level]=$pos - ;; - [")]}"]) - if (( level > 0 )); then - matchingpos=$lastoflevel[$level] - levelpos[$pos]=$((level--)) - if _zsh_highlight_brackets_match $matchingpos $pos; then - matching[$matchingpos]=$pos - matching[$pos]=$matchingpos - fi - else - levelpos[$pos]=-1 - fi - ;; - esac - done - - # Now highlight all found brackets - for pos in ${(k)levelpos}; do - if (( $+matching[$pos] )); then - if (( bracket_color_size )); then - _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 )) - fi - else - _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-error - fi - done - - # If cursor is on a bracket, then highlight corresponding bracket, if any. - if [[ $WIDGET != zle-line-finish ]]; then - pos=$((CURSOR + 1)) - if (( $+levelpos[$pos] )) && (( $+matching[$pos] )); then - local -i otherpos=$matching[$pos] - _zsh_highlight_add_highlight $((otherpos - 1)) $otherpos cursor-matchingbracket - fi - fi -} - -# Helper function to differentiate type -_zsh_highlight_brackets_match() -{ - case $BUFFER[$1] in - \() [[ $BUFFER[$2] == \) ]];; - \[) [[ $BUFFER[$2] == \] ]];; - \{) [[ $BUFFER[$2] == \} ]];; - *) false;; - esac -} diff --git a/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh b/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh deleted file mode 100644 index b2acd31..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -WIDGET=zle-line-finish - -BUFFER=': $foo[bar]' -CURSOR=6 # cursor is zero-based - -expected_region_highlight=( -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket.zsh b/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket.zsh deleted file mode 100644 index e05b4e9..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/cursor-matchingbracket.zsh +++ /dev/null @@ -1,47 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= -ZSH_HIGHLIGHT_STYLES[bracket-level-3]= - -BUFFER=': ((( )))' -CURSOR=2 # cursor is zero-based - -expected_region_highlight=( - "3 3 bracket-level-1" - "4 4 bracket-level-2" - "5 5 bracket-level-3" - "7 7 bracket-level-3" - "8 8 bracket-level-2" - "9 9 bracket-level-1" - "9 9 cursor-matchingbracket" -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/empty-styles.zsh b/.zsh/fsh/highlighters/brackets/test-data/empty-styles.zsh deleted file mode 100644 index e60657b..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/empty-styles.zsh +++ /dev/null @@ -1,33 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': (x)' - -expected_region_highlight=( -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/loop-styles.zsh b/.zsh/fsh/highlighters/brackets/test-data/loop-styles.zsh deleted file mode 100644 index e5cfcdf..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/loop-styles.zsh +++ /dev/null @@ -1,53 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= -ZSH_HIGHLIGHT_STYLES[bracket-level-3]= - -BUFFER=': ({[({[(x)]})]})' - -expected_region_highlight=( - "3 3 bracket-level-1" - "4 4 bracket-level-2" - "5 5 bracket-level-3" - "6 6 bracket-level-1" - "7 7 bracket-level-2" - "8 8 bracket-level-3" - "9 9 bracket-level-1" - "11 11 bracket-level-1" - "12 12 bracket-level-3" - "13 13 bracket-level-2" - "14 14 bracket-level-1" - "15 15 bracket-level-3" - "16 16 bracket-level-2" - "17 17 bracket-level-1" -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/mismatch-patentheses.zsh b/.zsh/fsh/highlighters/brackets/test-data/mismatch-patentheses.zsh deleted file mode 100644 index 5cc588f..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/mismatch-patentheses.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= - -BUFFER='echo ({x}]' - -expected_region_highlight=( - "6 6 bracket-error" # ( - "7 7 bracket-level-2" # { - "9 9 bracket-level-2" # } - "10 10 bracket-error" # ) -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/near-quotes.zsh b/.zsh/fsh/highlighters/brackets/test-data/near-quotes.zsh deleted file mode 100644 index 49f002b..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/near-quotes.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= - -BUFFER=': {"{x}"}' - -expected_region_highlight=( - "3 3 bracket-level-1" - "5 5 bracket-level-2" - "7 7 bracket-level-2" - "9 9 bracket-level-1" -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/nested-parentheses.zsh b/.zsh/fsh/highlighters/brackets/test-data/nested-parentheses.zsh deleted file mode 100644 index 21a20fb..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/nested-parentheses.zsh +++ /dev/null @@ -1,45 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= -ZSH_HIGHLIGHT_STYLES[bracket-level-3]= - -BUFFER='echo $(echo ${(z)array})' - -expected_region_highlight=( - "7 7 bracket-level-1" # ( - "14 14 bracket-level-2" # { - "15 15 bracket-level-3" # ( - "17 17 bracket-level-3" # ) - "23 23 bracket-level-2" # } - "24 24 bracket-level-1" # ) -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/only-error.zsh b/.zsh/fsh/highlighters/brackets/test-data/only-error.zsh deleted file mode 100644 index 00fe557..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/only-error.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': x)' - -expected_region_highlight=( - "4 4 bracket-error" # ) -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/quoted-patentheses.zsh b/.zsh/fsh/highlighters/brackets/test-data/quoted-patentheses.zsh deleted file mode 100644 index 81ee04f..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/quoted-patentheses.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "foo ( bar"' - -expected_region_highlight=( -"11 11 bracket-error" -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/simple-parentheses.zsh b/.zsh/fsh/highlighters/brackets/test-data/simple-parentheses.zsh deleted file mode 100644 index 2ccfbab..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/simple-parentheses.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= - -BUFFER='echo ({x})' - -expected_region_highlight=( - "6 6 bracket-level-1" # ( - "7 7 bracket-level-2" # { - "9 9 bracket-level-2" # } - "10 10 bracket-level-1" # ) -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses.zsh b/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses.zsh deleted file mode 100644 index d3f6560..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= -ZSH_HIGHLIGHT_STYLES[bracket-level-2]= - -BUFFER='echo ({x}' - -expected_region_highlight=( - "6 6 bracket-error" # ( - "7 7 bracket-level-2" # { - "9 9 bracket-level-2" # } -) diff --git a/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses2.zsh b/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses2.zsh deleted file mode 100644 index 2c489c3..0000000 --- a/.zsh/fsh/highlighters/brackets/test-data/unclosed-patentheses2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsorted=1 - -ZSH_HIGHLIGHT_STYLES[bracket-level-1]= - -BUFFER='echo {x})' - -expected_region_highlight=( - "6 6 bracket-level-1" # { - "8 8 bracket-level-1" # } - "9 9 bracket-error" # ) -) diff --git a/.zsh/fsh/highlighters/cursor/README.md b/.zsh/fsh/highlighters/cursor/README.md deleted file mode 120000 index 70e0c8c..0000000 --- a/.zsh/fsh/highlighters/cursor/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/cursor.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/cursor/cursor-highlighter.zsh b/.zsh/fsh/highlighters/cursor/cursor-highlighter.zsh deleted file mode 100644 index 81633a3..0000000 --- a/.zsh/fsh/highlighters/cursor/cursor-highlighter.zsh +++ /dev/null @@ -1,47 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Define default styles. -: ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout} - -# Whether the cursor highlighter should be called or not. -_zsh_highlight_highlighter_cursor_predicate() -{ - # remove cursor highlighting when the line is finished - [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved -} - -# Cursor highlighting function. -_zsh_highlight_highlighter_cursor_paint() -{ - [[ $WIDGET == zle-line-finish ]] && return - - _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor -} diff --git a/.zsh/fsh/highlighters/line/README.md b/.zsh/fsh/highlighters/line/README.md deleted file mode 120000 index 052fe20..0000000 --- a/.zsh/fsh/highlighters/line/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/line.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/line/line-highlighter.zsh b/.zsh/fsh/highlighters/line/line-highlighter.zsh deleted file mode 100644 index f922dc9..0000000 --- a/.zsh/fsh/highlighters/line/line-highlighter.zsh +++ /dev/null @@ -1,44 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Define default styles. -: ${ZSH_HIGHLIGHT_STYLES[line]:=} - -# Whether the root highlighter should be called or not. -_zsh_highlight_highlighter_line_predicate() -{ - _zsh_highlight_buffer_modified -} - -# root highlighting function. -_zsh_highlight_highlighter_line_paint() -{ - _zsh_highlight_add_highlight 0 $#BUFFER line -} diff --git a/.zsh/fsh/highlighters/main/README.md b/.zsh/fsh/highlighters/main/README.md deleted file mode 120000 index 0354731..0000000 --- a/.zsh/fsh/highlighters/main/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/main.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/main/main-highlighter.zsh b/.zsh/fsh/highlighters/main/main-highlighter.zsh deleted file mode 100644 index 6f14f53..0000000 --- a/.zsh/fsh/highlighters/main/main-highlighter.zsh +++ /dev/null @@ -1,1843 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Define default styles. -: ${ZSH_HIGHLIGHT_STYLES[default]:=none} -: ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} -: ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} -: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline} -: ${ZSH_HIGHLIGHT_STYLES[global-alias]:=fg=cyan} -: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline} -: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none} -: ${ZSH_HIGHLIGHT_STYLES[autodirectory]:=fg=green,underline} -: ${ZSH_HIGHLIGHT_STYLES[path]:=underline} -: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=} -: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=} -: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue} -: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue} -: ${ZSH_HIGHLIGHT_STYLES[command-substitution]:=none} -: ${ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]:=fg=magenta} -: ${ZSH_HIGHLIGHT_STYLES[process-substitution]:=none} -: ${ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]:=fg=magenta} -: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none} -: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none} -: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none} -: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]:=fg=magenta} -: ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} -: ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} -: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} -: ${ZSH_HIGHLIGHT_STYLES[rc-quote]:=fg=cyan} -: ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} -: ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} -: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} -: ${ZSH_HIGHLIGHT_STYLES[assign]:=none} -: ${ZSH_HIGHLIGHT_STYLES[redirection]:=fg=yellow} -: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold} -: ${ZSH_HIGHLIGHT_STYLES[named-fd]:=none} -: ${ZSH_HIGHLIGHT_STYLES[numeric-fd]:=none} -: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green} - -# Whether the highlighter should be called or not. -_zsh_highlight_highlighter_main_predicate() -{ - # may need to remove path_prefix highlighting when the line ends - [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified -} - -# Helper to deal with tokens crossing line boundaries. -_zsh_highlight_main_add_region_highlight() { - integer start=$1 end=$2 - shift 2 - - if (( $#in_alias )); then - [[ $1 == unknown-token ]] && alias_style=unknown-token - return - fi - if (( in_param )); then - if [[ $1 == unknown-token ]]; then - param_style=unknown-token - fi - if [[ -n $param_style ]]; then - return - fi - param_style=$1 - return - fi - - # The calculation was relative to $buf but region_highlight is relative to $BUFFER. - (( start += buf_offset )) - (( end += buf_offset )) - - list_highlights+=($start $end $1) -} - -_zsh_highlight_main_add_many_region_highlights() { - for 1 2 3; do - _zsh_highlight_main_add_region_highlight $1 $2 $3 - done -} - -_zsh_highlight_main_calculate_fallback() { - local -A fallback_of; fallback_of=( - alias arg0 - suffix-alias arg0 - global-alias dollar-double-quoted-argument - builtin arg0 - function arg0 - command arg0 - precommand arg0 - hashed-command arg0 - autodirectory arg0 - arg0_\* arg0 - - # TODO: Maybe these? — - # named-fd file-descriptor - # numeric-fd file-descriptor - - path_prefix path - # The path separator fallback won't ever be used, due to the optimisation - # in _zsh_highlight_main_highlighter_highlight_path_separators(). - path_pathseparator path - path_prefix_pathseparator path_prefix - - single-quoted-argument{-unclosed,} - double-quoted-argument{-unclosed,} - dollar-quoted-argument{-unclosed,} - back-quoted-argument{-unclosed,} - - command-substitution{-quoted,,-unquoted,} - command-substitution-delimiter{-quoted,,-unquoted,} - - command-substitution{-delimiter,} - process-substitution{-delimiter,} - back-quoted-argument{-delimiter,} - ) - local needle=$1 value - reply=($1) - while [[ -n ${value::=$fallback_of[(k)$needle]} ]]; do - unset "fallback_of[$needle]" # paranoia against infinite loops - reply+=($value) - needle=$value - done -} - -# Get the type of a command. -# -# Uses the zsh/parameter module if available to avoid forks, and a -# wrapper around 'type -w' as fallback. -# -# If $2 is 0, do not consider aliases. -# -# The result will be stored in REPLY. -_zsh_highlight_main__type() { - integer -r aliases_allowed=${2-1} - # We won't cache replies of anything that exists as an alias at all, to - # ensure the cached value is correct regardless of $aliases_allowed. - # - # ### We probably _should_ cache them in a cache that's keyed on the value of - # ### $aliases_allowed, on the assumption that aliases are the common case. - integer may_cache=1 - - # Cache lookup - if (( $+_zsh_highlight_main__command_type_cache )); then - REPLY=$_zsh_highlight_main__command_type_cache[(e)$1] - if [[ -n "$REPLY" ]]; then - return - fi - fi - - # Main logic - if (( $#options_to_set )); then - setopt localoptions $options_to_set; - fi - unset REPLY - if zmodload -e zsh/parameter; then - if (( $+aliases[(e)$1] )); then - may_cache=0 - fi - if (( ${+galiases[(e)$1]} )) && (( aliases_allowed )); then - REPLY='global alias' - elif (( $+aliases[(e)$1] )) && (( aliases_allowed )); then - REPLY=alias - elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[(e)${1##*.}] )); then - REPLY='suffix alias' - elif (( $reswords[(Ie)$1] )); then - REPLY=reserved - elif (( $+functions[(e)$1] )); then - REPLY=function - elif (( $+builtins[(e)$1] )); then - REPLY=builtin - elif (( $+commands[(e)$1] )); then - REPLY=command - # None of the special hashes had a match, so fall back to 'type -w', for - # forward compatibility with future versions of zsh that may add new command - # types. - # - # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly - # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo - # exists and is in $PATH). Avoid triggering the bug, at the expense of - # falling through to the $() below, incurring a fork. (Issue #354.) - # - # The first disjunct mimics the isrelative() C call from the zsh bug. - elif { [[ $1 != */* ]] || is-at-least 5.3 } && - # Add a subshell to avoid a zsh upstream bug; see issue #606. - # ### Remove the subshell when we stop supporting zsh 5.7.1 (I assume 5.8 will have the bugfix). - ! (builtin type -w -- "$1") >/dev/null 2>&1; then - REPLY=none - fi - fi - if ! (( $+REPLY )); then - # zsh/parameter not available or had no matches. - # - # Note that 'type -w' will run 'rehash' implicitly. - # - # We 'unalias' in a subshell, so the parent shell is not affected. - # - # The colon command is there just to avoid a command substitution that - # starts with an arithmetic expression [«((…))» as the first thing inside - # «$(…)»], which is area that has had some parsing bugs before 5.6 - # (approximately). - REPLY="${$(:; (( aliases_allowed )) || unalias -- "$1" 2>/dev/null; LC_ALL=C builtin type -w -- "$1" 2>/dev/null)##*: }" - if [[ $REPLY == 'alias' ]]; then - may_cache=0 - fi - fi - - # Cache population - if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then - _zsh_highlight_main__command_type_cache[(e)$1]=$REPLY - fi - [[ -n $REPLY ]] - return $? -} - -# Checks whether $1 is something that can be run. -# -# Return 0 if runnable, 1 if not runnable, 2 if trouble. -_zsh_highlight_main__is_runnable() { - if _zsh_highlight_main__type "$1"; then - [[ $REPLY != none ]] - else - return 2 - fi -} - -# Check whether the first argument is a redirection operator token. -# Report result via the exit code. -_zsh_highlight_main__is_redirection() { - # A redirection operator token: - # - starts with an optional single-digit number; - # - then, has a '<' or '>' character; - # - is not a process substitution [<(...) or >(...)]. - # - is not a numeric glob <-> - [[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]] && [[ $1 != *'<'*'-'*'>'* ]] -} - -# Resolve alias. -# -# Takes a single argument. -# -# The result will be stored in REPLY. -_zsh_highlight_main__resolve_alias() { - if zmodload -e zsh/parameter; then - REPLY=${aliases[$arg]} - else - REPLY="${"$(alias -- $arg)"#*=}" - fi -} - -# Return true iff $1 is a global alias -_zsh_highlight_main__is_global_alias() { - if zmodload -e zsh/parameter; then - (( ${+galiases[$arg]} )) - elif [[ $arg == '='* ]]; then - # avoid running into «alias -L '=foo'» erroring out with 'bad assignment' - return 1 - else - alias -L -g -- "$1" >/dev/null - fi -} - -# Check that the top of $braces_stack has the expected value. If it does, set -# the style according to $2; otherwise, set style=unknown-token. -# -# $1: character expected to be at the top of $braces_stack -# $2: optional assignment to style it if matches -# return value is 0 if there is a match else 1 -_zsh_highlight_main__stack_pop() { - if [[ $braces_stack[1] == $1 ]]; then - braces_stack=${braces_stack:1} - if (( $+2 )); then - style=$2 - fi - return 0 - else - style=unknown-token - return 1 - fi -} - -# Main syntax highlighting function. -_zsh_highlight_highlighter_main_paint() -{ - setopt localoptions extendedglob - - # At the PS3 prompt and in vared, highlight nothing. - # - # (We can't check this in _zsh_highlight_highlighter_main_predicate because - # if the predicate returns false, the previous value of region_highlight - # would be reused.) - if [[ $CONTEXT == (select|vared) ]]; then - return - fi - - typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR - typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW - local -a options_to_set reply # used in callees - local REPLY - - # $flags_with_argument is a set of letters, corresponding to the option letters - # that would be followed by a colon in a getopts specification. - local flags_with_argument - # $flags_sans_argument is a set of letters, corresponding to the option letters - # that wouldn't be followed by a colon in a getopts specification. - local flags_sans_argument - # $flags_solo is a set of letters, corresponding to option letters that, if - # present, mean the precommand will not be acting as a precommand, i.e., will - # not be followed by a :start: word. - local flags_solo - # $precommand_options maps precommand name to values of $flags_with_argument, - # $flags_sans_argument, and flags_solo for that precommand, joined by a - # colon. (The value is NOT a getopt(3) spec, although it resembles one.) - # - # Currently, setting $flags_sans_argument is only important for commands that - # have a non-empty $flags_with_argument; see test-data/precommand4.zsh. - local -A precommand_options - precommand_options=( - # Precommand modifiers as of zsh 5.6.2 cf. zshmisc(1). - '-' '' - 'builtin' '' - 'command' :pvV - 'exec' a:cl - 'noglob' '' - # 'time' and 'nocorrect' shouldn't be added here; they're reserved words, not precommands. - - 'doas' aCu:Lns # as of OpenBSD's doas(1) dated September 4, 2016 - 'nice' n: # as of current POSIX spec - 'pkexec' '' # doesn't take short options; immune to #121 because it's usually not passed --option flags - # Not listed: -h, which has two different meanings. - 'sudo' Cgprtu:AEHPSbilns:eKkVv # as of sudo 1.8.21p2 - 'stdbuf' ioe: - 'eatmydata' '' - 'catchsegv' '' - 'nohup' '' - 'setsid' :wc - 'env' u:i - 'ionice' cn:t:pPu # util-linux 2.33.1-0.1 - 'strace' IbeaosXPpEuOS:ACdfhikqrtTvVxyDc # strace 4.26-0.2 - 'proxychains' q:f # proxychains 4.4.0 - - # As of OpenSSH 8.1p1 - 'ssh-agent' aEPt:csDd:k - # suckless-tools v44 - # Argumentless flags that can't be followed by a command: -v - 'tabbed' gnprtTuU:cdfhs - - # moreutils 0.62-1 - 'chronic' :ev - 'ifne' :n - - ) - # Commands that would need to skip one positional argument: - # flock - # ssh - - if [[ $zsyh_user_options[ignorebraces] == on || ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]; then - local right_brace_is_recognised_everywhere=false - else - local right_brace_is_recognised_everywhere=true - fi - - if [[ $zsyh_user_options[pathdirs] == on ]]; then - options_to_set+=( PATH_DIRS ) - fi - - ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=( - '|' '||' ';' '&' '&&' - $'\n' # ${(z)} returns ';' but we convert it to $'\n' - '|&' - '&!' '&|' - # ### 'case' syntax, but followed by a pattern, not by a command - # ';;' ';&' ';|' - ) - - # Tokens that, at (naively-determined) "command position", are followed by - # a de jure command position. All of these are reserved words. - ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=( - $'\x7b' # block - $'\x28' # subshell - '()' # anonymous function - 'while' - 'until' - 'if' - 'then' - 'elif' - 'else' - 'do' - 'time' - 'coproc' - '!' # reserved word; unrelated to $histchars[1] - ) - - if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then - print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.' - ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST) - unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST - fi - - _zsh_highlight_main_highlighter_highlight_list -$#PREBUFFER '' 1 "$PREBUFFER$BUFFER" - - # end is a reserved word - local start end_ style - for start end_ style in $reply; do - (( start >= end_ )) && { print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_highlighter_main_paint: start($start) >= end($end_)"; return } - (( end_ <= 0 )) && continue - (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings - _zsh_highlight_main_calculate_fallback $style - _zsh_highlight_add_highlight $start $end_ $reply - done -} - -# Try to expand $1, if it's possible to do so safely. -# -# Uses two parameters from the caller: $parameter_name_pattern and $res. -# -# If expansion was done, set $reply to the expansion and return true. -# Otherwise, return false. -_zsh_highlight_main_highlighter__try_expand_parameter() -{ - local arg="$1" - unset reply - { - # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with - # ### no other features of the parameter expansion syntax. (No ${(x)foo}, - # ### no ${foo[x]}, no ${foo:-x}.) - { - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - local parameter_name - local -a words - if [[ $arg[1] != '$' ]]; then - return 1 - fi - if [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then - parameter_name=${${arg:2}%?} - else - parameter_name=${arg:1} - fi - if [[ $res == none ]] && - [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] && - [[ ${(tP)MATCH} != *special* ]] - then - # Set $arg and update $res. - case ${(tP)MATCH} in - (*array*|*assoc*) - words=( ${(P)MATCH} ) - ;; - ("") - # not set - words=( ) - ;; - (*) - # scalar, presumably - words=( ${(P)MATCH} ) - ;; - esac - reply=( "${words[@]}" ) - else - return 1 - fi - } - } -} - -# $1 is the offset of $4 from the parent buffer. Added to the returned highlights. -# $2 is the initial braces_stack (for a closing paren). -# $3 is 1 if $4 contains the end of $BUFFER, else 0. -# $4 is the buffer to highlight. -# Returns: -# $REPLY: $buf[REPLY] is the last character parsed. -# $reply is an array of region_highlight additions. -# exit code is 0 if the braces_stack is empty, 1 otherwise. -_zsh_highlight_main_highlighter_highlight_list() -{ - integer start_pos end_pos=0 buf_offset=$1 has_end=$3 - # alias_style is the style to apply to an alias once $#in_alias == 0 - # Usually 'alias' but set to 'unknown-token' if any word expanded from - # the alias would be highlighted as unknown-token - # param_style is analogous for parameter expansions - local alias_style param_style last_arg arg buf=$4 highlight_glob=true saw_assignment=false style - local in_array_assignment=false # true between 'a=(' and the matching ')' - # in_alias is an array of integers with each element equal to the number - # of shifts needed until arg=args[1] pops an arg from the next level up - # alias or from BUFFER. - # in_param is analogous for parameter expansions - integer in_param=0 len=$#buf - local -a in_alias match mbegin mend list_highlights - # seen_alias is a map of aliases already seen to avoid loops like alias a=b b=a - local -A seen_alias - # Pattern for parameter names - readonly parameter_name_pattern='([A-Za-z_][A-Za-z0-9_]*|[0-9]+)' - list_highlights=() - - # "R" for round - # "Q" for square - # "Y" for curly - # "T" for [[ ]] - # "S" for $( ), =( ), <( ), >( ) - # "D" for do/done - # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while) - # "?" for 'if'/'fi'; also checked by 'elif'/'else' - # ":" for 'then' - local braces_stack=$2 - - # State machine - # - # The states are: - # - :start: Command word - # - :start_of_pipeline: Start of a 'pipeline' as defined in zshmisc(1). - # Only valid when :start: is present - # - :sudo_opt: A leading-dash option to a precommand, whether it takes an - # argument or not. (Example: sudo's "-u" or "-i".) - # - :sudo_arg: The argument to a precommand's leading-dash option, - # when given as a separate word; i.e., "foo" in "-u foo" (two - # words) but not in "-ufoo" (one word). - # Note: :sudo_opt: and :sudo_arg: are used for any precommand - # declared in ${precommand_options}, not just for sudo(8). - # The naming is historical. - # - :regular: "Not a command word", and command delimiters are permitted. - # Mainly used to detect premature termination of commands. - # - :always: The word 'always' in the «{ foo } always { bar }» syntax. - # - # When the kind of a word is not yet known, $this_word / $next_word may contain - # multiple states. For example, after "sudo -i", the next word may be either - # another --flag or a command name, hence the state would include both ':start:' - # and ':sudo_opt:'. - # - # The tokens are always added with both leading and trailing colons to serve as - # word delimiters (an improvised array); [[ $x == *':foo:'* ]] and x=${x//:foo:/} - # will DTRT regardless of how many elements or repetitions $x has. - # - # Handling of redirections: upon seeing a redirection token, we must stall - # the current state --- that is, the value of $this_word --- for two iterations - # (one for the redirection operator, one for the word following it representing - # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a - # redirection operator, decrement it each iteration, and stall the current state - # when it is non-zero. Thus, upon reaching the next word (the one that follows - # the redirection operator and target), $this_word will still contain values - # appropriate for the word immediately following the word that preceded the - # redirection operator. - # - # The "the previous word was a redirection operator" state is not communicated - # to the next iteration via $next_word/$this_word as usual, but via - # $in_redirection. The value of $next_word from the iteration that processed - # the operator is discarded. - # - # $in_redirection is currently used for: - # - comments - # - aliases - # - redirections - # - parameter elision in command position - # - 'repeat' loops - # - local this_word next_word=':start::start_of_pipeline:' - integer in_redirection - # Processing buffer - local proc_buf="$buf" - local -a args - if [[ $zsyh_user_options[interactivecomments] == on ]]; then - args=(${(zZ+c+)buf}) - else - args=(${(z)buf}) - fi - - # Special case: $(<*) isn't globbing. - if [[ $braces_stack == 'S' ]] && (( $+args[3] && ! $+args[4] )) && [[ $args[3] == $'\x29' ]] && - [[ $args[1] == *'<'* ]] && _zsh_highlight_main__is_redirection $args[1]; then - highlight_glob=false - fi - - while (( $#args )); do - last_arg=$arg - arg=$args[1] - shift args - if (( $#in_alias )); then - (( in_alias[1]-- )) - # Remove leading 0 entries - in_alias=($in_alias[$in_alias[(i)<1->],-1]) - if (( $#in_alias == 0 )); then - seen_alias=() - # start_pos and end_pos are of the alias (previous $arg) here - _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style - else - # We can't unset keys that contain special characters (] \ and some others). - # More details: https://www.zsh.org/workers/43269 - (){ - local alias_name - for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do - seen_alias=("${(@kv)seen_alias[(I)^$alias_name]}") - done - } - fi - fi - if (( in_param )); then - (( in_param-- )) - if (( in_param == 0 )); then - # start_pos and end_pos are of the '$foo' word (previous $arg) here - _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style - param_style="" - fi - fi - - # Initialize this_word and next_word. - if (( in_redirection == 0 )); then - this_word=$next_word - next_word=':regular:' - elif (( !in_param )); then - # Stall $next_word. - (( --in_redirection )) - fi - - # Initialize per-"simple command" [zshmisc(1)] variables: - # - # $style how to highlight $arg - # $in_array_assignment boolean flag for "between '(' and ')' of array assignment" - # $highlight_glob boolean flag for "'noglob' is in effect" - # $saw_assignment boolean flag for "was preceded by an assignment" - # - style=unknown-token - if [[ $this_word == *':start:'* ]]; then - in_array_assignment=false - if [[ $arg == 'noglob' ]]; then - highlight_glob=false - fi - fi - - if (( $#in_alias == 0 && in_param == 0 )); then - # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf. - [[ "$proc_buf" = (#b)(#s)(([ $'\t']|[\\]$'\n')#)(?|)* ]] - # The first, outer parenthesis - integer offset="${#match[1]}" - (( start_pos = end_pos + offset )) - (( end_pos = start_pos + $#arg )) - - # The zsh lexer considers ';' and newline to be the same token, so - # ${(z)} converts all newlines to semicolons. Convert them back here to - # make later processing simpler. - [[ $arg == ';' && ${match[3]} == $'\n' ]] && arg=$'\n' - - # Compute the new $proc_buf. We advance it - # (chop off characters from the beginning) - # beyond what end_pos points to, by skipping - # as many characters as end_pos was advanced. - # - # end_pos was advanced by $offset (via start_pos) - # and by $#arg. Note the `start_pos=$end_pos` - # below. - # - # As for the [,len]. We could use [,len-start_pos+offset] - # here, but to make it easier on eyes, we use len and - # rely on the fact that Zsh simply handles that. The - # length of proc_buf is len-start_pos+offset because - # we're chopping it to match current start_pos, so its - # length matches the previous value of start_pos. - # - # Why [,-1] is slower than [,length] isn't clear. - proc_buf="${proc_buf[offset + $#arg + 1,len]}" - fi - - # Handle the INTERACTIVE_COMMENTS option. - # - # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. - if [[ $zsyh_user_options[interactivecomments] == on && $arg[1] == $histchars[3] ]]; then - if [[ $this_word == *(':regular:'|':start:')* ]]; then - style=comment - else - style=unknown-token # prematurely terminated - fi - _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style - # Stall this arg - in_redirection=1 - continue - fi - - if [[ $this_word == *':start:'* ]] && ! (( in_redirection )); then - # Expand aliases. - # An alias is ineligible for expansion while it's being expanded (see #652/#653). - _zsh_highlight_main__type "$arg" "$(( ! ${+seen_alias[$arg]} ))" - local res="$REPLY" - if [[ $res == "alias" ]]; then - # Mark insane aliases as unknown-token (cf. #263). - if [[ $arg == ?*=* ]]; then - _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token - continue - fi - seen_alias[$arg]=$#in_alias - _zsh_highlight_main__resolve_alias $arg - local -a alias_args - # Elision is desired in case alias x='' - if [[ $zsyh_user_options[interactivecomments] == on ]]; then - alias_args=(${(zZ+c+)REPLY}) - else - alias_args=(${(z)REPLY}) - fi - args=( $alias_args $args ) - if (( $#in_alias == 0 )); then - alias_style=alias - else - # Transfer the count of this arg to the new element about to be appended. - (( in_alias[1]-- )) - fi - # Add one because we will in_alias[1]-- on the next loop iteration so - # this iteration should be considered in in_alias as well - in_alias=( $(($#alias_args + 1)) $in_alias ) - (( in_redirection++ )) # Stall this arg - continue - else - _zsh_highlight_main_highlighter_expand_path $arg - _zsh_highlight_main__type "$REPLY" 0 - res="$REPLY" - fi - fi - - # Analyse the current word. - if _zsh_highlight_main__is_redirection $arg ; then - if (( in_redirection == 1 )); then - # Two consecuive redirection operators is an error. - _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token - else - in_redirection=2 - _zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection - fi - continue - elif [[ $arg == '{'${~parameter_name_pattern}'}' ]] && _zsh_highlight_main__is_redirection $args[1]; then - # named file descriptor: {foo}>&2 - in_redirection=3 - _zsh_highlight_main_add_region_highlight $start_pos $end_pos named-fd - continue - fi - - # Expand parameters. - if (( ! in_param )) && _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then - # That's not entirely correct --- if the parameter's value happens to be a reserved - # word, the parameter expansion will be highlighted as a reserved word --- but that - # incorrectness is outweighed by the usability improvement of permitting the use of - # parameters that refer to commands, functions, and builtins. - () { - local -a words; words=( "${reply[@]}" ) - if (( $#words == 0 )) && (( ! in_redirection )); then - # Parameter elision is happening - (( ++in_redirection )) - _zsh_highlight_main_add_region_highlight $start_pos $end_pos comment - continue - else - (( in_param = 1 + $#words )) - args=( $words $args ) - arg=$args[1] - _zsh_highlight_main__type "$arg" 0 - res=$REPLY - fi - } - fi - - # Parse the sudo command line - if (( ! in_redirection )); then - if [[ $this_word == *':sudo_opt:'* ]]; then - if [[ -n $flags_with_argument ]] && - { - # Trenary - if [[ -n $flags_sans_argument ]] - then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument] ]] - else [[ $arg == '-'[$flags_with_argument] ]] - fi - } then - # Flag that requires an argument - this_word=${this_word//:start:/} - next_word=':sudo_arg:' - elif [[ -n $flags_with_argument ]] && - { - # Trenary - if [[ -n $flags_sans_argument ]] - then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument]* ]] - else [[ $arg == '-'[$flags_with_argument]* ]] - fi - } then - # Argument attached in the same word - this_word=${this_word//:start:/} - next_word+=':start:' - next_word+=':sudo_opt:' - elif [[ -n $flags_sans_argument ]] && - [[ $arg == '-'[$flags_sans_argument]# ]]; then - # Flag that requires no argument - this_word=':sudo_opt:' - next_word+=':start:' - next_word+=':sudo_opt:' - elif [[ -n $flags_solo ]] && - { - # Trenary - if [[ -n $flags_sans_argument ]] - then [[ $arg == '-'[$flags_sans_argument]#[$flags_solo]* ]] - else [[ $arg == '-'[$flags_solo]* ]] - fi - } then - # Solo flags - this_word=':sudo_opt:' - next_word=':regular:' # no :start:, nor :sudo_opt: since we don't know whether the solo flag takes an argument or not - elif [[ $arg == '-'* ]]; then - # Unknown flag. We don't know whether it takes an argument or not, - # so modify $next_word as we do for flags that require no argument. - # With that behaviour, if the flag in fact takes no argument we'll - # highlight the inner command word correctly, and if it does take an - # argument we'll highlight the command word correctly if the argument - # was given in the same shell word as the flag (as in '-uphy1729' or - # '--user=phy1729' without spaces). - this_word=':sudo_opt:' - next_word+=':start:' - next_word+=':sudo_opt:' - else - # Not an option flag; nothing to do. (If the command line is - # syntactically valid, ${this_word//:sudo_opt:/} should be - # non-empty now.) - this_word=${this_word//:sudo_opt:/} - fi - elif [[ $this_word == *':sudo_arg:'* ]]; then - next_word+=':sudo_opt:' - next_word+=':start:' - fi - fi - - # The Great Fork: is this a command word? Is this a non-command word? - if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]] && - [[ $braces_stack != *T* || $arg != ('||'|'&&') ]]; then - - # First, determine the style of the command separator itself. - if _zsh_highlight_main__stack_pop T || _zsh_highlight_main__stack_pop Q; then - # Missing closing square bracket(s) - style=unknown-token - elif $in_array_assignment; then - case $arg in - # Literal newlines are just fine. - ($'\n') style=commandseparator;; - # Semicolons are parsed the same way as literal newlines. Nevertheless, - # highlight them as errors since they're probably unintended. Compare - # issue #691. - (';') style=unknown-token;; - # Other command separators aren't allowed. - (*) style=unknown-token;; - esac - elif [[ $this_word == *':regular:'* ]]; then - style=commandseparator - elif [[ $this_word == *':start:'* ]] && [[ $arg == $'\n' ]]; then - style=commandseparator - elif [[ $this_word == *':start:'* ]] && [[ $arg == ';' ]] && (( $#in_alias )); then - style=commandseparator - else - # Empty commands (semicolon follows nothing) are valid syntax. - # However, in interactive use they are likely to be erroneous; - # therefore, we highlight them as errors. - # - # Alias definitions are exempted from this check to allow multiline aliases - # with explicit (redundant) semicolons: «alias foo=$'bar;\nbaz'» (issue #677). - # - # See also #691 about possibly changing the style used here. - style=unknown-token - fi - - # Second, determine the style of next_word. - if [[ $arg == $'\n' ]] && $in_array_assignment; then - # literal newline inside an array assignment - next_word=':regular:' - elif [[ $arg == ';' ]] && $in_array_assignment; then - # literal semicolon inside an array assignment - next_word=':regular:' - else - next_word=':start:' - highlight_glob=true - saw_assignment=false - (){ - local alias_name - for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do - # We can't unset keys that contain special characters (] \ and some others). - # More details: https://www.zsh.org/workers/43269 - seen_alias=("${(@kv)seen_alias[(I)^$alias_name]}") - done - } - if [[ $arg != '|' && $arg != '|&' ]]; then - next_word+=':start_of_pipeline:' - fi - fi - - elif ! (( in_redirection)) && [[ $this_word == *':always:'* && $arg == 'always' ]]; then - # try-always construct - style=reserved-word # de facto a reserved word, although not de jure - highlight_glob=true - saw_assignment=false - next_word=':start::start_of_pipeline:' # only left brace is allowed, apparently - elif ! (( in_redirection)) && [[ $this_word == *':start:'* ]]; then # $arg is the command word - if (( ${+precommand_options[$arg]} )) && _zsh_highlight_main__is_runnable $arg; then - style=precommand - () { - set -- "${(@s.:.)precommand_options[$arg]}" - flags_with_argument=$1 - flags_sans_argument=$2 - flags_solo=$3 - } - next_word=${next_word//:regular:/} - next_word+=':sudo_opt:' - next_word+=':start:' - if [[ $arg == 'exec' || $arg == 'env' ]]; then - # To allow "exec 2>&1;" and "env | grep" where there's no command word - next_word+=':regular:' - fi - else - case $res in - (reserved) # reserved word - style=reserved-word - # Match braces and handle special cases. - case $arg in - (time|nocorrect) - next_word=${next_word//:regular:/} - next_word+=':start:' - ;; - ($'\x7b') - braces_stack='Y'"$braces_stack" - ;; - ($'\x7d') - # We're at command word, so no need to check $right_brace_is_recognised_everywhere - _zsh_highlight_main__stack_pop 'Y' reserved-word - if [[ $style == reserved-word ]]; then - next_word+=':always:' - fi - ;; - ($'\x5b\x5b') - braces_stack='T'"$braces_stack" - ;; - ('do') - braces_stack='D'"$braces_stack" - ;; - ('done') - _zsh_highlight_main__stack_pop 'D' reserved-word - ;; - ('if') - braces_stack=':?'"$braces_stack" - ;; - ('then') - _zsh_highlight_main__stack_pop ':' reserved-word - ;; - ('elif') - if [[ ${braces_stack[1]} == '?' ]]; then - braces_stack=':'"$braces_stack" - else - style=unknown-token - fi - ;; - ('else') - if [[ ${braces_stack[1]} == '?' ]]; then - : - else - style=unknown-token - fi - ;; - ('fi') - _zsh_highlight_main__stack_pop '?' - ;; - ('foreach') - braces_stack='$'"$braces_stack" - ;; - ('end') - _zsh_highlight_main__stack_pop '$' reserved-word - ;; - ('repeat') - # skip the repeat-count word - in_redirection=2 - # The redirection mechanism assumes $this_word describes the word - # following the redirection. Make it so. - # - # That word can be a command word with shortloops (`repeat 2 ls`) - # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). - # - # The repeat-count word will be handled like a redirection target. - this_word=':start::regular:' - ;; - ('!') - if [[ $this_word != *':start_of_pipeline:'* ]]; then - style=unknown-token - else - # '!' reserved word at start of pipeline; style already set above - fi - ;; - esac - if $saw_assignment && [[ $style != unknown-token ]]; then - style=unknown-token - fi - ;; - ('suffix alias') - style=suffix-alias - ;; - ('global alias') - style=global-alias - ;; - (alias) :;; - (builtin) style=builtin - [[ $arg == $'\x5b' ]] && braces_stack='Q'"$braces_stack" - ;; - (function) style=function;; - (command) style=command;; - (hashed) style=hashed-command;; - (none) if (( ! in_param )) && _zsh_highlight_main_highlighter_check_assign; then - _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign - local i=$(( arg[(i)=] + 1 )) - saw_assignment=true - if [[ $arg[i] == '(' ]]; then - in_array_assignment=true - _zsh_highlight_main_add_region_highlight start_pos+i-1 start_pos+i reserved-word - else - # assignment to a scalar parameter. - # (For array assignments, the command doesn't start until the ")" token.) - # - # Discard :start_of_pipeline:, if present, as '!' is not valid - # after assignments. - next_word+=':start:' - if (( i <= $#arg )); then - () { - local highlight_glob=false - [[ $zsyh_user_options[globassign] == on ]] && highlight_glob=true - _zsh_highlight_main_highlighter_highlight_argument $i - } - fi - fi - continue - elif (( ! in_param )) && - [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then - style=history-expansion - elif (( ! in_param )) && - [[ $arg[0,1] == $histchars[2,2] ]]; then - style=history-expansion - elif (( ! in_param )) && - ! $saw_assignment && - [[ $arg[1,2] == '((' ]]; then - # Arithmetic evaluation. - # - # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} - # splitter would only output the '((' token if the matching '))' had - # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" - # would be highlighted as an error until the matching "))" are typed. - # - # We highlight just the opening parentheses, as a reserved word; this - # is how [[ ... ]] is highlighted, too. - _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) reserved-word - if [[ $arg[-2,-1] == '))' ]]; then - _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos reserved-word - fi - continue - elif (( ! in_param )) && - [[ $arg == '()' ]]; then - # anonymous function - style=reserved-word - elif (( ! in_param )) && - ! $saw_assignment && - [[ $arg == $'\x28' ]]; then - # subshell - style=reserved-word - braces_stack='R'"$braces_stack" - elif (( ! in_param )) && - [[ $arg == $'\x29' ]]; then - # end of subshell or command substitution - if _zsh_highlight_main__stack_pop 'S'; then - REPLY=$start_pos - reply=($list_highlights) - return 0 - fi - _zsh_highlight_main__stack_pop 'R' reserved-word - else - if _zsh_highlight_main_highlighter_check_path $arg 1; then - style=$REPLY - else - style=unknown-token - fi - fi - ;; - (*) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res - continue - ;; - esac - fi - if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} ]]; then - next_word=':start::start_of_pipeline:' - fi - elif _zsh_highlight_main__is_global_alias "$arg"; then # $arg is a global alias that isn't in command position - style=global-alias - else # $arg is a non-command word - case $arg in - ($'\x29') - # subshell or end of array assignment - if $in_array_assignment; then - _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign - _zsh_highlight_main_add_region_highlight $start_pos $end_pos reserved-word - in_array_assignment=false - next_word+=':start:' - continue - elif (( in_redirection )); then - style=unknown-token - else - if _zsh_highlight_main__stack_pop 'S'; then - REPLY=$start_pos - reply=($list_highlights) - return 0 - fi - _zsh_highlight_main__stack_pop 'R' reserved-word - fi - ;; - ($'\x28\x29') - # possibly a function definition - if (( in_redirection )) || $in_array_assignment; then - style=unknown-token - else - if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word - then - next_word+=':start::start_of_pipeline:' - fi - style=reserved-word - fi - ;; - (*) if false; then - elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then - # Parsing rule: { - # - # Additionally, `tt(})' is recognized in any position if neither the - # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set. - if (( in_redirection )) || $in_array_assignment; then - style=unknown-token - else - _zsh_highlight_main__stack_pop 'Y' reserved-word - if [[ $style == reserved-word ]]; then - next_word+=':always:' - fi - fi - elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then - style=history-expansion - elif [[ $arg == $'\x5d\x5d' ]] && _zsh_highlight_main__stack_pop 'T' reserved-word; then - : - elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then - : - else - _zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 != in_redirection )) - continue - fi - ;; - esac - fi - _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style - done - (( $#in_alias )) && in_alias=() _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style - (( in_param == 1 )) && in_param=0 _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style - [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\$'\n')#) ]] - REPLY=$(( end_pos + ${#match[1]} - 1 )) - reply=($list_highlights) - return $(( $#braces_stack > 0 )) -} - -# Check if $arg is variable assignment -_zsh_highlight_main_highlighter_check_assign() -{ - setopt localoptions extended_glob - [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] || - [[ $arg == [0-9]##(|[+])=* ]] -} - -_zsh_highlight_main_highlighter_highlight_path_separators() -{ - local pos style_pathsep - style_pathsep=$1_pathseparator - reply=() - [[ -z "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" || "$ZSH_HIGHLIGHT_STYLES[$1]" == "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0 - for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do - if [[ $BUFFER[pos] == / ]]; then - reply+=($((pos - 1)) $pos $style_pathsep) - fi - done -} - -# Check if $1 is a path. -# If yes, return 0 and in $REPLY the style to use. -# Else, return non-zero (and the contents of $REPLY is undefined). -# -# $2 should be non-zero iff we're in command position. -_zsh_highlight_main_highlighter_check_path() -{ - _zsh_highlight_main_highlighter_expand_path "$1" - local expanded_path="$REPLY" tmp_path - integer in_command_position=$2 - - if [[ $zsyh_user_options[autocd] == on ]]; then - integer autocd=1 - else - integer autocd=0 - fi - - if (( in_command_position )); then - # ### Currently, this value is never returned: either it's overwritten - # ### below, or the return code is non-zero - REPLY=arg0 - else - REPLY=path - fi - - if [[ ${1[1]} == '=' && $1 == ??* && ${1[2]} != $'\x28' && $zsyh_user_options[equals] == 'on' && $expanded_path[1] != '/' ]]; then - REPLY=unknown-token # will error out if executed - return 0 - fi - - [[ -z $expanded_path ]] && return 1 - - # Check if this is a blacklisted path - if [[ $expanded_path[1] == / ]]; then - tmp_path=$expanded_path - else - tmp_path=$PWD/$expanded_path - fi - tmp_path=$tmp_path:a - - while [[ $tmp_path != / ]]; do - [[ -n ${(M)ZSH_HIGHLIGHT_DIRS_BLACKLIST:#$tmp_path} ]] && return 1 - tmp_path=$tmp_path:h - done - - if (( in_command_position )); then - if [[ -x $expanded_path ]]; then - if (( autocd )); then - if [[ -d $expanded_path ]]; then - REPLY=autodirectory - fi - return 0 - elif [[ ! -d $expanded_path ]]; then - # ### This seems unreachable for the current callers - return 0 - fi - fi - else - if [[ -L $expanded_path || -e $expanded_path ]]; then - return 0 - fi - fi - - # Search the path in CDPATH - if [[ $expanded_path != /* ]] && (( autocd || ! in_command_position )); then - # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here. - local cdpath_dir - for cdpath_dir in $cdpath ; do - if [[ -d "$cdpath_dir/$expanded_path" && -x "$cdpath_dir/$expanded_path" ]]; then - if (( in_command_position && autocd )); then - REPLY=autodirectory - fi - return 0 - fi - done - fi - - # If dirname($1) doesn't exist, neither does $1. - [[ ! -d ${expanded_path:h} ]] && return 1 - - # If this word ends the buffer, check if it's the prefix of a valid path. - if (( has_end && (len == end_pos) )) && - (( ! $#in_alias )) && - [[ $WIDGET != zle-line-finish ]]; then - # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here. - local -a tmp - if (( in_command_position )); then - # We include directories even when autocd is enabled, because those - # directories might contain executable files: e.g., BUFFER="/bi" en route - # to typing "/bin/sh". - tmp=( ${expanded_path}*(N-*,N-/) ) - else - tmp=( ${expanded_path}*(N) ) - fi - (( ${+tmp[1]} )) && REPLY=path_prefix && return 0 - fi - - # It's not a path. - return 1 -} - -# Highlight an argument and possibly special chars in quotes starting at $1 in $arg -# This command will at least highlight $1 to end_pos with the default style -# If $2 is set to 0, the argument cannot be highlighted as an option. -# -# This function currently assumes it's never called for the command word. -_zsh_highlight_main_highlighter_highlight_argument() -{ - local base_style=default i=$1 option_eligible=${2:-1} path_eligible=1 ret start style - local -a highlights - - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - - case "$arg[i]" in - '%') - if [[ $arg[i+1] == '?' ]]; then - (( i += 2 )) - fi - ;; - '-') - if (( option_eligible )); then - if [[ $arg[i+1] == - ]]; then - base_style=double-hyphen-option - else - base_style=single-hyphen-option - fi - path_eligible=0 - fi - ;; - '=') - if [[ $arg[i+1] == $'\x28' ]]; then - (( i += 2 )) - _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] - ret=$? - (( i += REPLY )) - highlights+=( - $(( start_pos + $1 - 1 )) $(( start_pos + i )) process-substitution - $(( start_pos + $1 - 1 )) $(( start_pos + $1 + 1 )) process-substitution-delimiter - $reply - ) - if (( ret == 0 )); then - highlights+=($(( start_pos + i - 1 )) $(( start_pos + i )) process-substitution-delimiter) - fi - fi - esac - - # This loop is a hot path. Keep it fast! - (( --i )) - while (( ++i <= $#arg )); do - i=${arg[(ib.i.)[\\\'\"\`\$\<\>\*\?]]} - case "$arg[$i]" in - "") break;; - "\\") (( i += 1 )); continue;; - "'") - _zsh_highlight_main_highlighter_highlight_single_quote $i - (( i = REPLY )) - highlights+=($reply) - ;; - '"') - _zsh_highlight_main_highlighter_highlight_double_quote $i - (( i = REPLY )) - highlights+=($reply) - ;; - '`') - _zsh_highlight_main_highlighter_highlight_backtick $i - (( i = REPLY )) - highlights+=($reply) - ;; - '$') - if [[ $arg[i+1] != "'" ]]; then - path_eligible=0 - fi - if [[ $arg[i+1] == "'" ]]; then - _zsh_highlight_main_highlighter_highlight_dollar_quote $i - (( i = REPLY )) - highlights+=($reply) - continue - elif [[ $arg[i+1] == $'\x28' ]]; then - if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then - # Arithmetic expansion - (( i = REPLY )) - highlights+=($reply) - continue - fi - start=$i - (( i += 2 )) - _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] - ret=$? - (( i += REPLY )) - highlights+=( - $(( start_pos + start - 1)) $(( start_pos + i )) command-substitution-unquoted - $(( start_pos + start - 1)) $(( start_pos + start + 1)) command-substitution-delimiter-unquoted - $reply - ) - if (( ret == 0 )); then - highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) command-substitution-delimiter-unquoted) - fi - continue - fi - while [[ $arg[i+1] == [=~#+'^'] ]]; do - (( i += 1 )) - done - if [[ $arg[i+1] == [*@#?$!-] ]]; then - (( i += 1 )) - fi;; - [\<\>]) - if [[ $arg[i+1] == $'\x28' ]]; then # \x28 = open paren - start=$i - (( i += 2 )) - _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] - ret=$? - (( i += REPLY )) - highlights+=( - $(( start_pos + start - 1)) $(( start_pos + i )) process-substitution - $(( start_pos + start - 1)) $(( start_pos + start + 1 )) process-substitution-delimiter - $reply - ) - if (( ret == 0 )); then - highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) process-substitution-delimiter) - fi - continue - fi - ;| - *) - if $highlight_glob && - [[ $zsyh_user_options[multios] == on || $in_redirection -eq 0 ]] && - [[ ${arg[$i]} =~ ^[*?] || ${arg:$i-1} =~ ^\<[0-9]*-[0-9]*\> ]]; then - highlights+=($(( start_pos + i - 1 )) $(( start_pos + i + $#MATCH - 1)) globbing) - (( i += $#MATCH - 1 )) - path_eligible=0 - else - continue - fi - ;; - esac - done - - if (( path_eligible )); then - if (( in_redirection )) && [[ $last_arg == *['<>']['&'] && $arg[$1,-1] == (<0->|p|-) ]]; then - if [[ $arg[$1,-1] == (p|-) ]]; then - base_style=redirection - else - base_style=numeric-fd - fi - # This function is currently never called for the command word, so $2 is hard-coded as 0. - elif _zsh_highlight_main_highlighter_check_path $arg[$1,-1] 0; then - base_style=$REPLY - _zsh_highlight_main_highlighter_highlight_path_separators $base_style - highlights+=($reply) - fi - fi - - highlights=($(( start_pos + $1 - 1 )) $end_pos $base_style $highlights) - _zsh_highlight_main_add_many_region_highlights $highlights -} - -# Quote Helper Functions -# -# $arg is expected to be set to the current argument -# $start_pos is expected to be set to the start of $arg in $BUFFER -# $1 is the index in $arg which starts the quote -# $REPLY is returned as the end of quote index in $arg -# $reply is returned as an array of region_highlight additions - -# Highlight single-quoted strings -_zsh_highlight_main_highlighter_highlight_single_quote() -{ - local arg1=$1 i q=\' style - i=$arg[(ib:arg1+1:)$q] - reply=() - - if [[ $zsyh_user_options[rcquotes] == on ]]; then - while [[ $arg[i+1] == "'" ]]; do - reply+=($(( start_pos + i - 1 )) $(( start_pos + i + 1 )) rc-quote) - (( i++ )) - i=$arg[(ib:i+1:)$q] - done - fi - - if [[ $arg[i] == "'" ]]; then - style=single-quoted-argument - else - # If unclosed, i points past the end - (( i-- )) - style=single-quoted-argument-unclosed - fi - reply=($(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style $reply) - REPLY=$i -} - -# Highlight special chars inside double-quoted strings -_zsh_highlight_main_highlighter_highlight_double_quote() -{ - local -a breaks match mbegin mend saved_reply - local MATCH; integer last_break=$(( start_pos + $1 - 1 )) MBEGIN MEND - local i j k ret style - reply=() - - for (( i = $1 + 1 ; i <= $#arg ; i += 1 )) ; do - (( j = i + start_pos - 1 )) - (( k = j + 1 )) - case "$arg[$i]" in - ('"') break;; - ('`') saved_reply=($reply) - _zsh_highlight_main_highlighter_highlight_backtick $i - (( i = REPLY )) - reply=($saved_reply $reply) - continue - ;; - ('$') style=dollar-double-quoted-argument - # Look for an alphanumeric parameter name. - if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then - (( k += $#MATCH )) # highlight the parameter name - (( i += $#MATCH )) # skip past it - elif [[ ${arg:$i} =~ ^[{]([A-Za-z_][A-Za-z0-9_]*|[0-9]+)[}] ]] ; then - (( k += $#MATCH )) # highlight the parameter name and braces - (( i += $#MATCH )) # skip past it - elif [[ $arg[i+1] == '$' ]]; then - # $$ - pid - (( k += 1 )) # highlight both dollar signs - (( i += 1 )) # don't consider the second one as introducing another parameter expansion - elif [[ $arg[i+1] == [-#*@?] ]]; then - # $#, $*, $@, $?, $- - like $$ above - (( k += 1 )) # highlight both dollar signs - (( i += 1 )) # don't consider the second one as introducing another parameter expansion - elif [[ $arg[i+1] == $'\x28' ]]; then - saved_reply=($reply) - if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then - # Arithmetic expansion - (( i = REPLY )) - reply=($saved_reply $reply) - continue - fi - - breaks+=( $last_break $(( start_pos + i - 1 )) ) - (( i += 2 )) - _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1] - ret=$? - (( i += REPLY )) - last_break=$(( start_pos + i )) - reply=( - $saved_reply - $j $(( start_pos + i )) command-substitution-quoted - $j $(( j + 2 )) command-substitution-delimiter-quoted - $reply - ) - if (( ret == 0 )); then - reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter-quoted) - fi - continue - else - continue - fi - ;; - "\\") style=back-double-quoted-argument - if [[ \\\`\"\$${histchars[1]} == *$arg[$i+1]* ]]; then - (( k += 1 )) # Color following char too. - (( i += 1 )) # Skip parsing the escaped char. - else - continue - fi - ;; - ($histchars[1]) # ! - may be a history expansion - if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then - style=history-expansion - else - continue - fi - ;; - *) continue ;; - - esac - reply+=($j $k $style) - done - - if [[ $arg[i] == '"' ]]; then - style=double-quoted-argument - else - # If unclosed, i points past the end - (( i-- )) - style=double-quoted-argument-unclosed - fi - (( last_break != start_pos + i )) && breaks+=( $last_break $(( start_pos + i )) ) - saved_reply=($reply) - reply=() - for 1 2 in $breaks; do - (( $1 != $2 )) && reply+=($1 $2 $style) - done - reply+=($saved_reply) - REPLY=$i -} - -# Highlight special chars inside dollar-quoted strings -_zsh_highlight_main_highlighter_highlight_dollar_quote() -{ - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - local i j k style - local AA - integer c - reply=() - - for (( i = $1 + 2 ; i <= $#arg ; i += 1 )) ; do - (( j = i + start_pos - 1 )) - (( k = j + 1 )) - case "$arg[$i]" in - "'") break;; - "\\") style=back-dollar-quoted-argument - for (( c = i + 1 ; c <= $#arg ; c += 1 )); do - [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break - done - AA=$arg[$i+1,$c-1] - # Matching for HEX and OCT values like \0xA6, \xA6 or \012 - if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}" - || "$AA" =~ "^[0-7]{1,3}" - || "$AA" =~ "^u[0-9a-fA-F]{1,4}" - || "$AA" =~ "^U[0-9a-fA-F]{1,8}" - ]]; then - (( k += $#MATCH )) - (( i += $#MATCH )) - else - if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then - # \x not followed by hex digits is probably an error - style=unknown-token - fi - (( k += 1 )) # Color following char too. - (( i += 1 )) # Skip parsing the escaped char. - fi - ;; - *) continue ;; - - esac - reply+=($j $k $style) - done - - if [[ $arg[i] == "'" ]]; then - style=dollar-quoted-argument - else - # If unclosed, i points past the end - (( i-- )) - style=dollar-quoted-argument-unclosed - fi - reply=($(( start_pos + $1 - 1 )) $(( start_pos + i )) $style $reply) - REPLY=$i -} - -# Highlight backtick substitutions -_zsh_highlight_main_highlighter_highlight_backtick() -{ - # buf is the contents of the backticks with a layer of backslashes removed. - # last is the index of arg for the start of the string to be copied into buf. - # It is either one past the beginning backtick or one past the last backslash. - # offset is a count of consumed \ (the delta between buf and arg). - # offsets is an array indexed by buf offset of when the delta between buf and arg changes. - # It is sparse, so search backwards to the last value - local buf highlight style=back-quoted-argument-unclosed style_end - local -i arg1=$1 end_ i=$1 last offset=0 start subshell_has_end=0 - local -a highlight_zone highlights offsets - reply=() - - last=$(( arg1 + 1 )) - # Remove one layer of backslashes and find the end - while i=$arg[(ib:i+1:)[\\\\\`]]; do # find the next \ or ` - if (( i > $#arg )); then - buf=$buf$arg[last,i] - offsets[i-arg1-offset]='' # So we never index past the end - (( i-- )) - subshell_has_end=$(( has_end && (start_pos + i == len) )) - break - fi - - if [[ $arg[i] == '\' ]]; then - (( i++ )) - # POSIX XCU 2.6.3 - if [[ $arg[i] == ('$'|'`'|'\') ]]; then - buf=$buf$arg[last,i-2] - (( offset++ )) - # offsets is relative to buf, so adjust by -arg1 - offsets[i-arg1-offset]=$offset - else - buf=$buf$arg[last,i-1] - fi - else # it's an unquoted ` and this is the end - style=back-quoted-argument - style_end=back-quoted-argument-delimiter - buf=$buf$arg[last,i-1] - offsets[i-arg1-offset]='' # So we never index past the end - break - fi - last=$i - done - - _zsh_highlight_main_highlighter_highlight_list 0 '' $subshell_has_end $buf - - # Munge the reply to account for removed backslashes - for start end_ highlight in $reply; do - start=$(( start_pos + arg1 + start + offsets[(Rb:start:)?*] )) - end_=$(( start_pos + arg1 + end_ + offsets[(Rb:end_:)?*] )) - highlights+=($start $end_ $highlight) - if [[ $highlight == back-quoted-argument-unclosed && $style == back-quoted-argument ]]; then - # An inner backtick command substitution is unclosed, but this level is closed - style_end=unknown-token - fi - done - - reply=( - $(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style - $(( start_pos + arg1 - 1 )) $(( start_pos + arg1 )) back-quoted-argument-delimiter - $highlights - ) - if (( $#style_end )); then - reply+=($(( start_pos + i - 1)) $(( start_pos + i )) $style_end) - fi - REPLY=$i -} - -# Highlight special chars inside arithmetic expansions -_zsh_highlight_main_highlighter_highlight_arithmetic() -{ - local -a saved_reply - local style - integer i j k paren_depth ret - reply=() - - for (( i = $1 + 3 ; i <= end_pos - start_pos ; i += 1 )) ; do - (( j = i + start_pos - 1 )) - (( k = j + 1 )) - case "$arg[$i]" in - [\'\"\\@{}]) - style=unknown-token - ;; - '(') - (( paren_depth++ )) - continue - ;; - ')') - if (( paren_depth )); then - (( paren_depth-- )) - continue - fi - [[ $arg[i+1] == ')' ]] && { (( i++ )); break; } - # Special case ) at the end of the buffer to avoid flashing command substitution for a character - (( has_end && (len == k) )) && break - # This is a single paren and there are no open parens, so this isn't an arithmetic expansion - return 1 - ;; - '`') - saved_reply=($reply) - _zsh_highlight_main_highlighter_highlight_backtick $i - (( i = REPLY )) - reply=($saved_reply $reply) - continue - ;; - '$' ) - if [[ $arg[i+1] == $'\x28' ]]; then - saved_reply=($reply) - if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then - # Arithmetic expansion - (( i = REPLY )) - reply=($saved_reply $reply) - continue - fi - - (( i += 2 )) - _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos] - ret=$? - (( i += REPLY )) - reply=( - $saved_reply - $j $(( start_pos + i )) command-substitution-quoted - $j $(( j + 2 )) command-substitution-delimiter-quoted - $reply - ) - if (( ret == 0 )); then - reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter) - fi - continue - else - continue - fi - ;; - ($histchars[1]) # ! - may be a history expansion - if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then - style=history-expansion - else - continue - fi - ;; - *) - continue - ;; - - esac - reply+=($j $k $style) - done - - if [[ $arg[i] != ')' ]]; then - # If unclosed, i points past the end - (( i-- )) - fi - style=arithmetic-expansion - reply=($(( start_pos + $1 - 1)) $(( start_pos + i )) arithmetic-expansion $reply) - REPLY=$i -} - - -# Called with a single positional argument. -# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value. -# -# Does not perform filename generation (globbing). -_zsh_highlight_main_highlighter_expand_path() -{ - (( $# == 1 )) || print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument" - - # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}. - setopt localoptions nonomatch - unset REPLY - : ${REPLY:=${(Q)${~1}}} -} - -# ------------------------------------------------------------------------------------------------- -# Main highlighter initialization -# ------------------------------------------------------------------------------------------------- - -_zsh_highlight_main__precmd_hook() { - # Unset the WARN_NESTED_VAR option, taking care not to error if the option - # doesn't exist (zsh older than zsh-5.3.1-test-2). - setopt localoptions - if eval '[[ -o warnnestedvar ]]' 2>/dev/null; then - unsetopt warnnestedvar - fi - - _zsh_highlight_main__command_type_cache=() -} - -autoload -Uz add-zsh-hook -if add-zsh-hook precmd _zsh_highlight_main__precmd_hook 2>/dev/null; then - # Initialize command type cache - typeset -gA _zsh_highlight_main__command_type_cache -else - print -r -- >&2 'zsh-syntax-highlighting: Failed to load add-zsh-hook. Some speed optimizations will not be used.' - # Make sure the cache is unset - unset _zsh_highlight_main__command_type_cache -fi -typeset -ga ZSH_HIGHLIGHT_DIRS_BLACKLIST diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1.zsh deleted file mode 100644 index cfc12a5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1.zsh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'/' - -expected_region_highlight=( - '1 1 path_prefix' # / -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1b.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1b.zsh deleted file mode 100644 index 88fe60c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position1b.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt autocd -BUFFER=$'/' - -expected_region_highlight=( - '1 1 autodirectory' # / -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position2.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position2.zsh deleted file mode 100644 index 5033d2c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position2.zsh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'/bi' - -expected_region_highlight=( - '1 3 path_prefix' # /bi -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3.zsh deleted file mode 100644 index 415e316..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'/bin; /bin' - -expected_region_highlight=( - '1 4 unknown-token' # /bin (in middle) - '5 5 commandseparator' # ; - '7 10 path_prefix' # /bin (at end) -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3b.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3b.zsh deleted file mode 100644 index 0e65c98..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position3b.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt autocd -BUFFER=$'/bin; /bin' - -expected_region_highlight=( - '1 4 autodirectory' # /bin (in middle) - '5 5 commandseparator' # ; - '7 10 autodirectory' # /bin (at end) -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position4.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position4.zsh deleted file mode 100644 index 9e935bf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position4.zsh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'/bin/s' - -expected_region_highlight=( - '1 6 path_prefix' # /bin/s -) diff --git a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position5.zsh b/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position5.zsh deleted file mode 100644 index e428b1a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/abspath-in-command-position5.zsh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'/bin/sh' - -expected_region_highlight=( - '1 7 command' # /bin/sh -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-assignment1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-assignment1.zsh deleted file mode 100644 index 0c101c8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-assignment1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Issue #263 (more-pathological case): aliases[x=y]=z works; the ${(z)} splitter considers -# that a single word; but it's not looked up as an alias. Hence, highlight it as an error. -aliases[x=y]='lorem ipsum dolor sit amet' -BUFFER='x=y ls' - -expected_region_highlight=( - "1 3 unknown-token" # x=y - "5 6 default" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-basic.zsh b/.zsh/fsh/highlighters/main/test-data/alias-basic.zsh deleted file mode 100644 index 7af8b7c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-basic.zsh +++ /dev/null @@ -1,35 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias foo="echo hello world" -BUFFER="foo" - -expected_region_highlight+=( - "1 3 alias" # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-brackets.zsh b/.zsh/fsh/highlighters/main/test-data/alias-brackets.zsh deleted file mode 100644 index ede6c9a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-brackets.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2021 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Have to use cat here as it must be a command that exists. -# Otherwise, the test would fail with the first token being recognized -# as an "unknown-token". -alias ]=cat - -BUFFER='] /' - -expected_region_highlight=( - '1 1 alias' # ] - '3 3 path' # / -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-command-substitution.zsh b/.zsh/fsh/highlighters/main/test-data/alias-command-substitution.zsh deleted file mode 100644 index a7b77df..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-command-substitution.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Alias must be at least 4 characters to test the regression -# cf. 139ea2b189819c43cc251825981c116959b15cc3 -alias foobar='echo "$(echo foobar)"' -BUFFER='foobar' - -expected_region_highlight=( - "1 6 alias" # foobar -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-comment1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-comment1.zsh deleted file mode 100644 index bae7ef6..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-comment1.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# see alias-comment2.zsh and comment-followed.zsh -setopt interactivecomments -alias x=$'# foo\npwd' -BUFFER='x' - -expected_region_highlight=( - '1 1 alias' # x -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-comment2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-comment2.zsh deleted file mode 100644 index 5a49822..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-comment2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# see alias-comment1.zsh -setopt NO_interactivecomments -alias x=$'# foo\npwd' -BUFFER='x' - -expected_region_highlight=( - '1 1 unknown-token' # x (#) -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-complex.zsh b/.zsh/fsh/highlighters/main/test-data/alias-complex.zsh deleted file mode 100644 index 5ad7c0a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-complex.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias x='echo && ls; >' - -BUFFER='x file echo' - -expected_region_highlight=( - '1 1 alias' # x - '3 6 default' # file - '8 11 builtin' # echo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-empty.zsh b/.zsh/fsh/highlighters/main/test-data/alias-empty.zsh deleted file mode 100644 index 535fccc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-empty.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias x='' - -BUFFER='x echo foo' - -expected_region_highlight=( - '1 1 alias' # x - '3 6 builtin' # echo - '8 10 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-eponymous1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-eponymous1.zsh deleted file mode 100644 index 2642e14..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-eponymous1.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias ls='command ls' - -BUFFER='ls' - -expected_region_highlight=( - "1 2 alias" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-eponymous2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-eponymous2.zsh deleted file mode 100644 index dcd8565..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-eponymous2.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias ls=tmp tmp='command ls' - -BUFFER='ls' - -expected_region_highlight=( - "1 2 alias" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-in-cmdsubst.zsh b/.zsh/fsh/highlighters/main/test-data/alias-in-cmdsubst.zsh deleted file mode 100644 index b3cf777..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-in-cmdsubst.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias p='print -r --' - -BUFFER=$'s=$(p foo)' - -expected_region_highlight=( - '1 10 assign' # s=$(p foo) - '3 10 default' # $(p foo) - '3 10 command-substitution-unquoted' # $(p foo) - '3 4 command-substitution-delimiter-unquoted' # $( - '5 5 alias' # p - '7 9 default' # foo - '10 10 command-substitution-delimiter-unquoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-loop.zsh b/.zsh/fsh/highlighters/main/test-data/alias-loop.zsh deleted file mode 100644 index 83992db..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-loop.zsh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -function b() {} # beware of ALIAS_FUNC_DEF -alias a=b b=c c=b - -BUFFER='a foo; :' - -expected_region_highlight=( - # An alias is ineligible for expansion whilst it's being expanded. - # Therefore, the "b" in the expansion of the alias "c" is not considered - # as an alias. - '1 1 alias' # a - '3 5 default' # foo - '6 6 commandseparator' # ; - '8 8 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-loop2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-loop2.zsh deleted file mode 100644 index 29e04ac..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-loop2.zsh +++ /dev/null @@ -1,35 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias ls="ls" -BUFFER="ls" - -expected_region_highlight+=( - "1 2 alias" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-nested-precommand.zsh b/.zsh/fsh/highlighters/main/test-data/alias-nested-precommand.zsh deleted file mode 100644 index 6d4172b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-nested-precommand.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=b b=sudo -sudo(){} - -BUFFER='a -u phy1729 echo; :' - -expected_region_highlight=( - '1 1 alias' # a - '3 4 single-hyphen-option' # -u - '6 12 default' # phy1729 - '14 17 builtin' # echo - '18 18 commandseparator' # ; - '20 20 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-nested.zsh b/.zsh/fsh/highlighters/main/test-data/alias-nested.zsh deleted file mode 100644 index b24b496..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-nested.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=b b=: - -BUFFER='a foo; :' - -expected_region_highlight=( - '1 1 alias' # a - '3 5 default' # foo - '6 6 commandseparator' # ; - '8 8 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-parameter.zsh b/.zsh/fsh/highlighters/main/test-data/alias-parameter.zsh deleted file mode 100644 index 21bc6b3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-parameter.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias '$foo'='echo alias' -local foo; foo=(echo param) - -BUFFER='$foo' - -expected_region_highlight=( - '1 4 alias' # $foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument1.zsh deleted file mode 100644 index 2d1f35c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument1.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See also param-precommand-option-argument1.zsh -alias sudo_u='sudo -u' -sudo(){} - -BUFFER='sudo_u phy1729 echo foo' - -expected_region_highlight=( - '1 6 alias' # sudo_u - '8 14 default' # phy1729 - '17 19 command "issue #540"' # echo (not builtin) - '21 23 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument2.zsh deleted file mode 100644 index fbc6eec..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument2.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias sudo_b='sudo -b' -alias sudo_b_u='sudo_b -u' -sudo(){} - -BUFFER='sudo_b_u phy1729 echo foo' - -expected_region_highlight=( - '1 8 alias' # sudo_b_u - '10 16 default' # phy1729 - '18 21 command "issue #540"' # echo (not builtin) - '23 25 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument3.zsh b/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument3.zsh deleted file mode 100644 index 373f12b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument3.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See also param-precommand-option-argument3.zsh -alias sudo_u='sudo -u' -sudo(){} - -BUFFER='sudo_u phy1729 ls foo' - -expected_region_highlight=( - '1 6 alias' # sudo_u - '8 14 default' # phy1729 - '16 17 command' # ls - '19 21 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument4.zsh b/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument4.zsh deleted file mode 100644 index d47dccb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-precommand-option-argument4.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias sudo_b='sudo -b' -alias sudo_b_u='sudo_b -u' -sudo(){} - -BUFFER='sudo_b_u phy1729 ls foo' - -expected_region_highlight=( - '1 8 alias' # sudo_b_u - '10 16 default' # phy1729 - '18 19 command' # ls - '21 23 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-quoted.zsh b/.zsh/fsh/highlighters/main/test-data/alias-quoted.zsh deleted file mode 100644 index e42e2f0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-quoted.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) YYYY zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: ls='ls -l' -BUFFER='"a" foo; \ls' - -expected_region_highlight=( - '1 3 unknown-token' # "a" - '5 7 default' # foo - '8 8 commandseparator' # ; - '10 12 command' # \ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-redirect.zsh b/.zsh/fsh/highlighters/main/test-data/alias-redirect.zsh deleted file mode 100644 index acc3dcb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-redirect.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias x=\> -BUFFER='x foo echo bar' - -expected_region_highlight=( - '1 1 alias' # x - '3 5 default' # foo - '7 10 builtin' # echo - '12 14 default' # bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-reuse1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-reuse1.zsh deleted file mode 100644 index 1fd61a0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-reuse1.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: b='a | a' - -BUFFER='b | b' - -expected_region_highlight=( - '1 1 alias' # b - '3 3 commandseparator' # | - '5 5 alias' # b -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-reuse2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-reuse2.zsh deleted file mode 100644 index 37251fb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-reuse2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: b='a && a' - -BUFFER='b && b' - -expected_region_highlight=( - '1 1 alias' # b - '3 4 commandseparator' # && - '6 6 alias' # b -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-reuse3.zsh b/.zsh/fsh/highlighters/main/test-data/alias-reuse3.zsh deleted file mode 100644 index 5d7150a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-reuse3.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: b='a; a' - -BUFFER='b; b' - -expected_region_highlight=( - '1 1 alias' # b - '2 2 commandseparator' # ; - '4 4 alias' # b -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-reuse4.zsh b/.zsh/fsh/highlighters/main/test-data/alias-reuse4.zsh deleted file mode 100644 index 7ad7038..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-reuse4.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: b='a $(a)' - -BUFFER='b $(b)' - -expected_region_highlight=( - '1 1 alias' # b - '3 6 default' # $(b) - '3 6 command-substitution-unquoted' # $(b) - '3 4 command-substitution-delimiter-unquoted' # $( - '5 5 alias' # b - '6 6 command-substitution-delimiter-unquoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-reuse5.zsh b/.zsh/fsh/highlighters/main/test-data/alias-reuse5.zsh deleted file mode 100644 index 881401b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-reuse5.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: b='a < <(a)' - -BUFFER='b < <(b)' - -expected_region_highlight=( - '1 1 alias' # b - '3 3 redirection' # < - '5 8 default' # <(b) - '5 8 process-substitution' # <(b) - '5 6 process-substitution-delimiter' # <( - '7 7 alias' # b - '8 8 process-substitution-delimiter' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-self.zsh b/.zsh/fsh/highlighters/main/test-data/alias-self.zsh deleted file mode 100644 index c6f12b1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-self.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias echo='echo foo' - -BUFFER='echo bar' - -expected_region_highlight=( - '1 4 alias' # echo - '6 8 default' # bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-self2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-self2.zsh deleted file mode 100644 index fd6ae03..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-self2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias cat='cat | cat' - -BUFFER='cat' - -expected_region_highlight=( - '1 3 alias' # cat -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-to-dir.zsh b/.zsh/fsh/highlighters/main/test-data/alias-to-dir.zsh deleted file mode 100644 index 30390d4..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-to-dir.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias x=/ -BUFFER=$'x' - -expected_region_highlight=( - '1 1 unknown-token' # x (/) -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-to-dir1b.zsh b/.zsh/fsh/highlighters/main/test-data/alias-to-dir1b.zsh deleted file mode 100644 index 62ec521..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-to-dir1b.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt autocd -alias x=/ -BUFFER=$'x' - -expected_region_highlight=( - '1 1 alias' # x -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-unknown-token1.zsh b/.zsh/fsh/highlighters/main/test-data/alias-unknown-token1.zsh deleted file mode 100644 index 9c996bf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-unknown-token1.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=b b=foo - -BUFFER='a ' - -expected_region_highlight=( - '1 1 unknown-token' # a -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias-unknown-token2.zsh b/.zsh/fsh/highlighters/main/test-data/alias-unknown-token2.zsh deleted file mode 100644 index ab9facd..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias-unknown-token2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a='() { ls "$@" ; foo }' - -BUFFER='a ' - -expected_region_highlight=( - '1 1 unknown-token' # a -) diff --git a/.zsh/fsh/highlighters/main/test-data/alias.zsh b/.zsh/fsh/highlighters/main/test-data/alias.zsh deleted file mode 100644 index 4cafa80..0000000 --- a/.zsh/fsh/highlighters/main/test-data/alias.zsh +++ /dev/null @@ -1,53 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias alias1="ls" -alias -s alias2="echo" -function alias1() {} # to check that it's highlighted as an alias, not as a function - -BUFFER='x.alias2; alias1; alias2' - -# Set expected_region_highlight as a function of zsh version. -# -# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126, -# and commit 36403 to zsh itself. Therefore, check if the requisite zsh -# functionality is present, and skip verifying suffix-alias highlighting -# if it isn't. -expected_region_highlight=() -if zmodload -e zsh/parameter || [[ "$(type -w x.alias2)" == *suffix* ]]; then - expected_region_highlight+=( - "1 8 suffix-alias" # x.alias2 - ) -fi -expected_region_highlight+=( - "9 9 commandseparator" # ; - "11 16 alias" # alias1 - "17 17 commandseparator" # ; - "19 24 unknown-token" # alias2 -) diff --git a/.zsh/fsh/highlighters/main/test-data/always1.zsh b/.zsh/fsh/highlighters/main/test-data/always1.zsh deleted file mode 100644 index ae40a72..0000000 --- a/.zsh/fsh/highlighters/main/test-data/always1.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='{ ls } always { pwd }' - -expected_region_highlight=( - '1 1 reserved-word' # { - '3 4 command' # ls - '6 6 reserved-word' # } - '8 13 reserved-word' # always - '15 15 reserved-word' # { - '17 19 builtin' # pwd - '21 21 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/always2.zsh b/.zsh/fsh/highlighters/main/test-data/always2.zsh deleted file mode 100644 index 991137c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/always2.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'{\nls\n} always { pwd }' - -expected_region_highlight=( - '1 1 reserved-word' # { - '2 2 commandseparator' # \n - '3 4 command' # ls - '5 5 commandseparator' # \n - '6 6 reserved-word' # } - '8 13 reserved-word' # always - '15 15 reserved-word' # { - '17 19 builtin' # pwd - '21 21 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/always3.zsh b/.zsh/fsh/highlighters/main/test-data/always3.zsh deleted file mode 100644 index d41beeb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/always3.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt ignorebraces -BUFFER='echo { foo } always { bar }' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 6 default' # { - '8 10 default' # foo - '12 12 default' # } - '14 19 default' # always - '21 21 default' # { - '23 25 default' # bar - '27 27 default' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/anonymous-function.zsh b/.zsh/fsh/highlighters/main/test-data/anonymous-function.zsh deleted file mode 100644 index 9d67fb1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/anonymous-function.zsh +++ /dev/null @@ -1,44 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='() echo hello; () { echo world } "argument"' - -expected_region_highlight=( - "1 2 reserved-word" # () - "4 7 builtin" # echo - "9 13 default" # hello - "14 14 commandseparator" # ; - "16 17 reserved-word" # () - "19 19 reserved-word" # { - "21 24 builtin" # echo - "26 30 default" # world - "32 32 reserved-word" # } - "34 43 default" # "argument" - "34 43 double-quoted-argument" # "argument" -) diff --git a/.zsh/fsh/highlighters/main/test-data/arg0-colon.zsh b/.zsh/fsh/highlighters/main/test-data/arg0-colon.zsh deleted file mode 100644 index 8955bd2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arg0-colon.zsh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=''\''x: /' - -expected_region_highlight=( - '1 5 unknown-token' # \'x: / -) diff --git a/.zsh/fsh/highlighters/main/test-data/arith-cmdsubst-mess.zsh b/.zsh/fsh/highlighters/main/test-data/arith-cmdsubst-mess.zsh deleted file mode 100644 index 82268ac..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arith-cmdsubst-mess.zsh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $((ls); (ls))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # $((ls); (ls)) - '3 15 command-substitution-unquoted' # $((ls); (ls)) - '3 4 command-substitution-delimiter-unquoted' # $( - '5 5 reserved-word' # ( - '6 7 command' # ls - '8 8 reserved-word' # ) - '9 9 commandseparator' # ; - '11 11 reserved-word' # ( - '12 13 command' # ls - '14 14 reserved-word' # ) - '15 15 command-substitution-delimiter-unquoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arith1.zsh b/.zsh/fsh/highlighters/main/test-data/arith1.zsh deleted file mode 100644 index 0462f73..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arith1.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( 6 * 9 ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 14 default' # $(( 6 * 9 )) - '3 14 arithmetic-expansion' # $(( 6 * 9 )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arith2.zsh b/.zsh/fsh/highlighters/main/test-data/arith2.zsh deleted file mode 100644 index af981d7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arith2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': "$(( 6 * 9 ))"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 16 default' # "$(( 6 * 9 ))" - '3 16 double-quoted-argument' # "$(( 6 * 9 ))" - '4 15 arithmetic-expansion' # $(( 6 * 9 )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-command-substitution.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-command-substitution.zsh deleted file mode 100644 index 07db0fb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-command-substitution.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( $(echo 2) + 2 ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 22 default' # $(( $(echo 2) + 2 )) - '3 22 arithmetic-expansion' # $(( $(echo 2) + 2 )) - '7 15 command-substitution-quoted' # $(echo 2) - '7 8 command-substitution-delimiter-quoted' # $( - '9 12 builtin' # echo - '14 14 default' # 2 - '15 15 command-substitution-delimiter' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-doubled-parens.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-doubled-parens.zsh deleted file mode 100644 index d582d67..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-doubled-parens.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( ((42)) ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # $(( ((42)) )) - '3 15 arithmetic-expansion' # $(( ((42)) )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-empty.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-empty.zsh deleted file mode 100644 index bd75996..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-empty.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': "foo"$(())"bar"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 17 default' # "foo"$(())"bar" - '3 7 double-quoted-argument' # "foo" - '8 12 arithmetic-expansion' # $(()) - '13 17 double-quoted-argument' # "bar" -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-evaluation.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-evaluation.zsh deleted file mode 100644 index e0eb6e7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-evaluation.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Must be at command word, since the word following 'if' isn't currently considered -# a command word (issue #207). -# -# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf -# or newer, only (issue #188). -BUFFER='(( x == 42 ))' - -expected_region_highlight=( - "1 2 reserved-word" # (( - "12 13 reserved-word" # )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-hist-expn.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-hist-expn.zsh deleted file mode 100644 index 79af723..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-hist-expn.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( \!\! ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 11 default' # $(( !! )) - '3 11 arithmetic-expansion' # $(( !! )) - '7 8 history-expansion "issue #713"' # !! -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-invalid-chars.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-invalid-chars.zsh deleted file mode 100644 index 9ace438..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-invalid-chars.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( 0 * 1\'\'000 ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 19 default' # $(( 0 * 1\'\'000 )) - '3 19 arithmetic-expansion' # $(( 0 * 1\'\'000 )) - '12 12 unknown-token' # \' - '13 13 unknown-token' # \' -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-multiplication.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-multiplication.zsh deleted file mode 100644 index 65df0c9..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-multiplication.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': foo*$(( 42 * 1729 ))*bar' - -expected_region_highlight=( - '1 1 builtin' # : - '3 26 default' # foo*$(( 42 * 1729 ))*bar - '6 6 globbing' # * - '7 22 arithmetic-expansion' # $(( 42 * 1729 )) - '23 23 globbing' # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-nested.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-nested.zsh deleted file mode 100644 index d734cd3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-nested.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( $(( 1 + 2 )) * 3 ))' - -expected_region_highlight=( - '1 1 builtin' # : - '3 25 default' # $(( $(( 1 + 2 )) * 3 )) - '3 25 arithmetic-expansion' # $(( $(( 1 + 2 )) * 3 )) - '7 18 arithmetic-expansion' # $(( 1 + 2 )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-quoted.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-quoted.zsh deleted file mode 100644 index 917ddf7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-quoted.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': "$(( 1 + 1 ))"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 16 default' # "$(( 1 + 1 ))" - '3 16 double-quoted-argument' # "$(( 1 + 1 ))" - '4 15 arithmetic-expansion' # $(( 1 + 1 )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-unclosed.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-unclosed.zsh deleted file mode 100644 index aa4eac7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-unclosed.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( 1' - -expected_region_highlight=( - '1 1 builtin' # : - '3 7 default' # $(( 1 - '3 7 arithmetic-expansion' # $(( 1 -) diff --git a/.zsh/fsh/highlighters/main/test-data/arithmetic-unfinished.zsh b/.zsh/fsh/highlighters/main/test-data/arithmetic-unfinished.zsh deleted file mode 100644 index 916c3da..0000000 --- a/.zsh/fsh/highlighters/main/test-data/arithmetic-unfinished.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(( 1729 )' - -expected_region_highlight=( - '1 1 builtin' # : - '3 12 default' # $(( 1729 ) - '3 12 arithmetic-expansion' # $(( 1729 ) -) - -if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug - expected_region_highlight[2]='3 13 default' # $(( 1729 ) -fi diff --git a/.zsh/fsh/highlighters/main/test-data/array-cmdsep1.zsh b/.zsh/fsh/highlighters/main/test-data/array-cmdsep1.zsh deleted file mode 100644 index 2fd55c0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/array-cmdsep1.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'a=( foo | bar )' -bar(){} - -expected_region_highlight=( - '1 3 assign' # a=( - '3 3 reserved-word' # ( - '5 7 default' # foo - '9 9 unknown-token' # | - # zsh reports a parse error at this point. Nevertheless, we test how we - # highlight the remainder of $BUFFER. Currently we recover by treating the pipe - # as a command separator. That's not the only reasonable behaviour, though; if - # we change the behaviour, we should adjust the following expectations accordingly. - '11 13 function' # bar - '15 15 unknown-token' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/array-cmdsep2.zsh b/.zsh/fsh/highlighters/main/test-data/array-cmdsep2.zsh deleted file mode 100644 index 0bda676..0000000 --- a/.zsh/fsh/highlighters/main/test-data/array-cmdsep2.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'a=( foo ; bar )' - -expected_region_highlight=( - '1 3 assign' # a=( - '3 3 reserved-word' # ( - '5 7 default' # foo - '9 9 unknown-token' # ; (not commandseparator; see highlighter source code) - '11 13 default' # bar - '15 15 assign' # ) - '15 15 reserved-word' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/array-cmdsep3.zsh b/.zsh/fsh/highlighters/main/test-data/array-cmdsep3.zsh deleted file mode 100644 index b4b3687..0000000 --- a/.zsh/fsh/highlighters/main/test-data/array-cmdsep3.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'a=( foo \n bar )' - -expected_region_highlight=( - '1 3 assign' # a=( - '3 3 reserved-word' # ( - '5 7 default' # foo - '9 9 commandseparator' # \n - '11 13 default' # bar - '15 15 assign' # ) - '15 15 reserved-word' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-append.zsh b/.zsh/fsh/highlighters/main/test-data/assign-append.zsh deleted file mode 100644 index feb68e5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-append.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='a+=(lorem ipsum)' - -expected_region_highlight=( - "1 4 assign" # a+=( - "4 4 reserved-word" # ( - "5 9 default" # lorem - "11 15 default" # ipsum - "16 16 assign" # ) - "16 16 reserved-word" # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-argv.zsh b/.zsh/fsh/highlighters/main/test-data/assign-argv.zsh deleted file mode 100644 index ec5acc2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-argv.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch foo -BUFFER='42=foo 43+=bar' - -expected_region_highlight=( - "1 6 assign" # 42=foo - "4 6 path" # foo - "8 14 assign" # 43+=bar - "12 14 default" # bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-array.zsh b/.zsh/fsh/highlighters/main/test-data/assign-array.zsh deleted file mode 100644 index ef0a666..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-array.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='(A=(hello world))' - -expected_region_highlight=( - "1 1 reserved-word" # ( - "2 4 assign" # A=( - "4 4 reserved-word" # ( - "5 9 default" # hello - "11 15 default" # world - "16 16 assign" # ) - "16 16 reserved-word" # ) - "17 17 reserved-word" # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-array2.zsh b/.zsh/fsh/highlighters/main/test-data/assign-array2.zsh deleted file mode 100644 index 2d48721..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-array2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='A=(hello world) ls' - -expected_region_highlight=( - "1 3 assign" # A=( - "3 3 reserved-word" # ( - "4 8 default" # hello - "10 14 default" # world - "15 15 assign" # ) - "15 15 reserved-word" # ) - "17 18 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-array3.zsh b/.zsh/fsh/highlighters/main/test-data/assign-array3.zsh deleted file mode 100644 index 5eb645e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-array3.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='A=(hello world) b=42' - -expected_region_highlight=( - "1 3 assign" # A=( - "3 3 reserved-word" # ( - "4 8 default" # hello - "10 14 default" # world - "15 15 assign" # ) - "15 15 reserved-word" # ) - "17 20 assign" # b=42 - "19 20 default" # 42 -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-invalid-command.zsh b/.zsh/fsh/highlighters/main/test-data/assign-invalid-command.zsh deleted file mode 100644 index 557327e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-invalid-command.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'x=y nosuchcommand' - -expected_region_highlight=( - '1 3 assign' # x=y - '3 3 default' # y - '5 17 unknown-token' # nosuchcommand -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-not-array.zsh b/.zsh/fsh/highlighters/main/test-data/assign-not-array.zsh deleted file mode 100644 index 651ab80..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-not-array.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='a=foo( bar ) :' - -expected_region_highlight=( - '1 12 assign' # a=foo( bar ) - '3 12 default' # foo( bar ) - '14 14 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-not-array2.zsh b/.zsh/fsh/highlighters/main/test-data/assign-not-array2.zsh deleted file mode 100644 index dfda106..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-not-array2.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='a=foo\( :' - -expected_region_highlight=( - '1 7 assign' # a=foo\( - '3 7 default' # foo\( - '9 9 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-quoted-cmdsubst.zsh b/.zsh/fsh/highlighters/main/test-data/assign-quoted-cmdsubst.zsh deleted file mode 100644 index d4a62df..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-quoted-cmdsubst.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'x="$(ls x y z)"' - -expected_region_highlight=( - '1 15 assign' # x="$(ls x y z)" - '3 15 default' # "$(ls x y z)" - '3 3 double-quoted-argument' # " - '15 15 double-quoted-argument' # " - '4 14 command-substitution-quoted' # $(ls x y z) - '4 5 command-substitution-delimiter-quoted' # $( - '6 7 command' # ls - '9 9 default' # x - '11 11 default' # y - '13 13 default' # z - '14 14 command-substitution-delimiter-quoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-semicolon.zsh b/.zsh/fsh/highlighters/main/test-data/assign-semicolon.zsh deleted file mode 100644 index f748c94..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-semicolon.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='A=1; echo hello world' - -expected_region_highlight=( - "1 3 assign" # A=1 - "3 3 default" # 1 - "4 4 commandseparator" # ; - "6 9 builtin" # echo - "11 15 default" # hello - "17 21 default" # world -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-subshell.zsh b/.zsh/fsh/highlighters/main/test-data/assign-subshell.zsh deleted file mode 100644 index 2022889..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-subshell.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='(A=1)' - -expected_region_highlight=( - "1 1 reserved-word" # ( - "2 4 assign" # A=1 - "4 4 default" # 1 - "5 5 reserved-word" # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-value-quote1.zsh b/.zsh/fsh/highlighters/main/test-data/assign-value-quote1.zsh deleted file mode 100644 index b6d04fe..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-value-quote1.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'s="foo\'bar"' - -expected_region_highlight=( - '1 11 assign' # s="foo'bar" - '3 11 default' # "foo'bar" - '3 11 double-quoted-argument' # "foo'bar" -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign-value-quote2.zsh b/.zsh/fsh/highlighters/main/test-data/assign-value-quote2.zsh deleted file mode 100644 index 3c5f93b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign-value-quote2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'s="foo \'\' bar"' - -expected_region_highlight=( - '1 14 assign' # s="foo '' bar" - '3 14 default' # "foo '' bar" - '3 14 double-quoted-argument' # "foo '' bar" -) diff --git a/.zsh/fsh/highlighters/main/test-data/assign.zsh b/.zsh/fsh/highlighters/main/test-data/assign.zsh deleted file mode 100644 index c6e8532..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assign.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='A=1 b=("foo" bar)' - -expected_region_highlight=( - "1 3 assign" # A=1 - "3 3 default" # 1 - "5 7 assign" # b=( - "7 7 reserved-word" # ( - "8 12 default" # "foo" - "8 12 double-quoted-argument" # "foo" - "14 16 default" # bar - "17 17 assign" # ) - "17 17 reserved-word" # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword1.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-before-resword1.zsh deleted file mode 100644 index b271d4a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword1.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar { :; }' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 9 unknown-token' # { - '11 11 builtin' # : - '12 12 commandseparator' # ; - '14 14 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword2.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-before-resword2.zsh deleted file mode 100644 index 247e41e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar ( :; )' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 9 unknown-token' # ( - '11 11 builtin' # : - '12 12 commandseparator' # ; - '14 14 unknown-token' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword3.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-before-resword3.zsh deleted file mode 100644 index 5204189..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword3.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar (( foo ))' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 17 unknown-token' # (( foo )) -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword4.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-before-resword4.zsh deleted file mode 100644 index cc3d523..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword4.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar [[ -n foo ]]' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 10 unknown-token' # [[ - '12 13 single-hyphen-option' # -n - '15 17 default' # foo - '19 20 reserved-word' # ]] -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword5.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-before-resword5.zsh deleted file mode 100644 index 33f1ed1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-before-resword5.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar \! :' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 9 unknown-token' # \! - '11 11 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/assignment-quoted.zsh b/.zsh/fsh/highlighters/main/test-data/assignment-quoted.zsh deleted file mode 100644 index 18638ad..0000000 --- a/.zsh/fsh/highlighters/main/test-data/assignment-quoted.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'1="foo"' - -expected_region_highlight=( - '1 7 assign' # 1="foo" - '3 7 default' # "foo" - '3 7 double-quoted-argument' # "foo" -) diff --git a/.zsh/fsh/highlighters/main/test-data/back-quoted-argument.zsh b/.zsh/fsh/highlighters/main/test-data/back-quoted-argument.zsh deleted file mode 100644 index d504a2c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/back-quoted-argument.zsh +++ /dev/null @@ -1,58 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo `echo \`42\`` "is `echo equal` to" `echo 6 times 9' - -expected_region_highlight=( - "1 4 builtin" # echo - "6 18 default" # `echo \`42\`` - "6 18 back-quoted-argument" # `echo \`42\`` - "6 6 back-quoted-argument-delimiter" # ` - "7 10 builtin" # echo - "12 17 default" # \`42\` - "12 17 back-quoted-argument" # \`42\` - "12 13 back-quoted-argument-delimiter" # \` - "14 15 unknown-token" # 42 - "16 17 back-quoted-argument-delimiter" # \` - "18 18 back-quoted-argument-delimiter" # ` - "20 39 default" # "is `echo equal` to" - "20 39 double-quoted-argument" # "is `echo equal` to" - "24 35 back-quoted-argument" # `echo equal` - "24 24 back-quoted-argument-delimiter" # ` - "25 28 builtin" # echo - "30 34 default" # equal - "35 35 back-quoted-argument-delimiter" # ` - "41 55 default" # `echo 6 times 9 - "41 55 back-quoted-argument-unclosed" # `echo 6 times 9 - "41 41 back-quoted-argument-delimiter" # ` - "42 45 builtin" # echo - "47 47 default" # 6 - "49 53 default" # times - "55 55 default" # 9 -) diff --git a/.zsh/fsh/highlighters/main/test-data/back-quoted-open.zsh b/.zsh/fsh/highlighters/main/test-data/back-quoted-open.zsh deleted file mode 100644 index f188d81..0000000 --- a/.zsh/fsh/highlighters/main/test-data/back-quoted-open.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch foo -BUFFER=$': `ls fo' - -expected_region_highlight=( - '1 1 builtin' # : - '3 8 default' # `ls fo - '3 8 back-quoted-argument-unclosed' # `ls fo - '3 3 back-quoted-argument-delimiter' # ` - '4 5 command' # ls - '7 8 path_prefix' # fo -) diff --git a/.zsh/fsh/highlighters/main/test-data/backslash-continuation.zsh b/.zsh/fsh/highlighters/main/test-data/backslash-continuation.zsh deleted file mode 100644 index ebcf2e1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/backslash-continuation.zsh +++ /dev/null @@ -1,35 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -PREBUFFER=$'echo \\\n' -BUFFER='noglob' - -expected_region_highlight=( - "1 6 default" # 'noglob' highlighted as a string, not as a precomand -) diff --git a/.zsh/fsh/highlighters/main/test-data/backslash-continuation2.zsh b/.zsh/fsh/highlighters/main/test-data/backslash-continuation2.zsh deleted file mode 100644 index 9e2ca62..0000000 --- a/.zsh/fsh/highlighters/main/test-data/backslash-continuation2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'echo foo\\\nbar"baz"' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 18 default "issue #705"' # foo\\\nbar"baz" - '14 18 double-quoted-argument "issue #705"' # "baz" -) diff --git a/.zsh/fsh/highlighters/main/test-data/backslash-space.zsh b/.zsh/fsh/highlighters/main/test-data/backslash-space.zsh deleted file mode 100644 index 0d8a63c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/backslash-space.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'echo \\ \'foo\' ; ls' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 12 default' # \ \'foo\' - '8 12 single-quoted-argument' # 'foo' - '14 14 commandseparator' # ; - '16 17 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/backslash.zsh b/.zsh/fsh/highlighters/main/test-data/backslash.zsh deleted file mode 100644 index ea0977f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/backslash.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'\\' - -expected_region_highlight=( - '1 1 unknown-token' # \\ -) diff --git a/.zsh/fsh/highlighters/main/test-data/bang-assign-array.zsh b/.zsh/fsh/highlighters/main/test-data/bang-assign-array.zsh deleted file mode 100644 index a54cf2d..0000000 --- a/.zsh/fsh/highlighters/main/test-data/bang-assign-array.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=(bar abaz) \! ls' - -expected_region_highlight=( - '1 5 assign' # foo=( - '5 5 reserved-word' # ( - '6 8 default' # bar - '10 13 default' # abaz - '14 14 assign' # ) - '14 14 reserved-word' # ) - '16 16 unknown-token' # \! - '18 19 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/bang-assign-scalar.zsh b/.zsh/fsh/highlighters/main/test-data/bang-assign-scalar.zsh deleted file mode 100644 index e919050..0000000 --- a/.zsh/fsh/highlighters/main/test-data/bang-assign-scalar.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=bar \! ls' - -expected_region_highlight=( - '1 7 assign' # foo=bar - '5 7 default' # bar - '9 9 unknown-token' # \! - '11 12 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/bang-pipeline.zsh b/.zsh/fsh/highlighters/main/test-data/bang-pipeline.zsh deleted file mode 100644 index fef25f1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/bang-pipeline.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'\! ls | \! ls' - -expected_region_highlight=( - '1 1 reserved-word' # \! - '3 4 command' # ls - '6 6 commandseparator' # | - '8 8 unknown-token' # \! - '10 11 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/braces1.zsh b/.zsh/fsh/highlighters/main/test-data/braces1.zsh deleted file mode 100644 index 3c5b1f0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/braces1.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'() { echo }\n}' -# no special setopts - -expected_region_highlight=( - '1 2 reserved-word' # () - '4 4 reserved-word' # { - '6 9 builtin' # echo - '11 11 reserved-word' # } - '12 12 commandseparator' # \n - '13 13 unknown-token' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/braces2.zsh b/.zsh/fsh/highlighters/main/test-data/braces2.zsh deleted file mode 100644 index a3ea7c9..0000000 --- a/.zsh/fsh/highlighters/main/test-data/braces2.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'() { echo }\n}' -setopt ignorebraces - -expected_region_highlight=( - '1 2 reserved-word' # () - '4 4 reserved-word' # { - '6 9 builtin' # echo - '11 11 default' # } - '12 12 commandseparator' # \n - '13 13 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-matching1.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-matching1.zsh deleted file mode 100644 index 7cc6de5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-matching1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='[[ -n foo ]]' - -expected_region_highlight=( - '1 2 reserved-word' # [[ - '4 5 single-hyphen-option' # -n - '7 9 default' # foo - '11 12 reserved-word' # ]] -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-matching2.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-matching2.zsh deleted file mode 100644 index 19c7f0d..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-matching2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='[ -n foo ]' - -expected_region_highlight=( - '1 1 builtin' # [ - '3 4 single-hyphen-option' # -n - '6 8 default' # foo - '10 10 builtin' # ] -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch1.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch1.zsh deleted file mode 100644 index 5e6e80f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch1.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='() { echo foo )' - -expected_region_highlight=( - '1 2 reserved-word' # () - '4 4 reserved-word' # { - '6 9 builtin' # echo - '11 13 default' # foo - '15 15 unknown-token' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh deleted file mode 100644 index 9d0b53c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='elif true; then echo two; fi' - -expected_region_highlight=( - '1 4 unknown-token' # elif - '6 9 builtin' # true - '10 10 commandseparator' # ; - '12 15 unknown-token' # then - '17 20 builtin' # echo - '22 24 default' # two - '25 25 commandseparator' # ; - '27 28 unknown-token' # fi -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch2.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch2.zsh deleted file mode 100644 index 2d98ac2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='() ( echo foo }' - -expected_region_highlight=( - '1 2 reserved-word' # () - '4 4 reserved-word' # ( - '6 9 builtin' # echo - '11 13 default' # foo - '15 15 unknown-token' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch3.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch3.zsh deleted file mode 100644 index e33040a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch3.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo )' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 6 unknown-token' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch4.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch4.zsh deleted file mode 100644 index a9b15dc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch4.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo }' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 6 unknown-token' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch5.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch5.zsh deleted file mode 100644 index 21e8bb2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch5.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo { }' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 6 default' # { - '8 8 unknown-token' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch6.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch6.zsh deleted file mode 100644 index 9df8388..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch6.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='(repeat 1; do)' - -expected_region_highlight=( - '1 1 reserved-word' # ( - '2 7 reserved-word' # repeat - '9 9 default' # 1 - '10 10 commandseparator' # ; - '12 13 reserved-word' # do - '14 14 unknown-token' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch7.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch7.zsh deleted file mode 100644 index 1caa936..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch7.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2012 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='for n in *; do echo $n; end' - -expected_region_highlight=( - '1 3 reserved-word' # for - '5 5 default' # n - '7 8 default' # in - '10 10 default' # * - '10 10 globbing' # * - '11 11 commandseparator' # ; - '13 14 reserved-word' # do - '16 19 builtin' # echo - '21 22 default' # $n - '23 23 commandseparator' # ; - '25 27 unknown-token' # end -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh deleted file mode 100644 index d6838f0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='if false; then echo one; elif true; then echo two; else echo three; fi' - -expected_region_highlight=( - '1 2 reserved-word' # if - '4 8 builtin' # false - '9 9 commandseparator' # ; - '11 14 reserved-word' # then - '16 19 builtin' # echo - '21 23 default' # one - '24 24 commandseparator' # ; - '26 29 reserved-word' # elif - '31 34 builtin' # true - '35 35 commandseparator' # ; - '37 40 reserved-word' # then - '42 45 builtin' # echo - '47 49 default' # two - '50 50 commandseparator' # ; - '52 55 reserved-word' # else - '57 60 builtin' # echo - '62 66 default' # three - '67 67 commandseparator' # ; - '69 70 reserved-word' # fi -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8.zsh deleted file mode 100644 index 07a42e3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch8.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='(ls&)' - -expected_region_highlight=( - '1 1 reserved-word' # ( - '2 3 command' # ls - '4 4 commandseparator' # & - '5 5 reserved-word' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh deleted file mode 100644 index 87c1ba7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='if false; then echo one; fi' - -expected_region_highlight=( - '1 2 reserved-word' # if - '4 8 builtin' # false - '9 9 commandseparator' # ; - '11 14 reserved-word' # then - '16 19 builtin' # echo - '21 23 default' # one - '24 24 commandseparator' # ; - '26 27 reserved-word' # fi -) diff --git a/.zsh/fsh/highlighters/main/test-data/brackets-premature-termination.zsh b/.zsh/fsh/highlighters/main/test-data/brackets-premature-termination.zsh deleted file mode 100644 index fa813da..0000000 --- a/.zsh/fsh/highlighters/main/test-data/brackets-premature-termination.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='[[ -n foo; echo ]]' - -expected_region_highlight=( - '1 2 reserved-word' # [[ - '4 5 single-hyphen-option' # -n - '7 9 default' # foo - '10 10 unknown-token' # ; - '12 15 builtin' # echo - '17 18 default' # ]] -) diff --git a/.zsh/fsh/highlighters/main/test-data/cdpath-abspath.zsh b/.zsh/fsh/highlighters/main/test-data/cdpath-abspath.zsh deleted file mode 100644 index 64707b2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/cdpath-abspath.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -cdpath=( $PWD ) -mkdir foo foo/bar - -BUFFER="/foo" - -expected_region_highlight=( - '1 4 unknown-token' # x (/) -) diff --git a/.zsh/fsh/highlighters/main/test-data/cmdpos-elision-partial.zsh b/.zsh/fsh/highlighters/main/test-data/cmdpos-elision-partial.zsh deleted file mode 100644 index 6eda0d7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/cmdpos-elision-partial.zsh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Test elision of some, but not all of the words -# See issue #667 for the case of eliding all words -local -a x; x=(sudo "") - -sudo(){} -BUFFER=$'$x -u phy1729 ls' - -expected_region_highlight=( - '1 2 precommand' # $x - # The "" is elided. If it weren't elided, the «ls» would be highlighted as an ordinary argument. - '4 5 single-hyphen-option' # -u - '7 13 default' # phy1729 - '15 16 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/command-substitution-adjacent.zsh b/.zsh/fsh/highlighters/main/test-data/command-substitution-adjacent.zsh deleted file mode 100644 index 3d5c0b9..0000000 --- a/.zsh/fsh/highlighters/main/test-data/command-substitution-adjacent.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "$(echo)$(echo)' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 20 default' # "$(echo)$(echo) - '6 6 double-quoted-argument-unclosed' # " - '7 13 command-substitution-quoted' # $(echo) - '7 8 command-substitution-delimiter-quoted' # $( - '9 12 builtin' # echo - '13 13 command-substitution-delimiter-quoted' # ) - '14 20 command-substitution-quoted' # $(echo) - '14 15 command-substitution-delimiter-quoted' # $( - '16 19 builtin' # echo - '20 20 command-substitution-delimiter-quoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/command-substitution-in-assignment.zsh b/.zsh/fsh/highlighters/main/test-data/command-substitution-in-assignment.zsh deleted file mode 100644 index fafda49..0000000 --- a/.zsh/fsh/highlighters/main/test-data/command-substitution-in-assignment.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=$(echo bar) :' - -expected_region_highlight=( - '1 15 assign' # foo=$(echo bar) - '5 15 default' # $(echo bar) - '5 15 command-substitution-unquoted' # $(echo bar) - '5 6 command-substitution-delimiter-unquoted' # $( - '7 10 builtin' # echo - '12 14 default' # bar - '15 15 command-substitution-delimiter-unquoted' # ) - '17 17 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/command-substitution-unclosed.zsh b/.zsh/fsh/highlighters/main/test-data/command-substitution-unclosed.zsh deleted file mode 100644 index 3229dfc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/command-substitution-unclosed.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': foo$(echo bar' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # foo$(echo bar - '6 15 command-substitution-unquoted' # $(echo bar - '6 7 command-substitution-delimiter-unquoted' # $( - '8 11 builtin' # echo - '13 15 default' # bar -) - -if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug - expected_region_highlight[2]='3 16 default' # foo$(echo bar - expected_region_highlight[3]='6 16 command-substitution-unquoted' # $(echo bar -fi diff --git a/.zsh/fsh/highlighters/main/test-data/commandseparator.zsh b/.zsh/fsh/highlighters/main/test-data/commandseparator.zsh deleted file mode 100644 index f504847..0000000 --- a/.zsh/fsh/highlighters/main/test-data/commandseparator.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=':; pwd &! ls' - -expected_region_highlight=( - "1 1 builtin" # : - "2 2 commandseparator" # ; - "4 6 builtin" # pwd - "8 9 commandseparator" # &! - "11 12 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/comment-followed.zsh b/.zsh/fsh/highlighters/main/test-data/comment-followed.zsh deleted file mode 100644 index 044f283..0000000 --- a/.zsh/fsh/highlighters/main/test-data/comment-followed.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# see alias-comment1.zsh -setopt interactivecomments -BUFFER=$'# foo\ntrue' - -expected_region_highlight=( - '1 5 comment' # # foo - '6 6 commandseparator' # \n - '7 10 builtin' # true -) diff --git a/.zsh/fsh/highlighters/main/test-data/comment-leading.zsh b/.zsh/fsh/highlighters/main/test-data/comment-leading.zsh deleted file mode 100644 index b4c9910..0000000 --- a/.zsh/fsh/highlighters/main/test-data/comment-leading.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt interactive_comments - -BUFFER='# echo foo' - -expected_region_highlight=( - "1 10 comment" # # echo foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/comment-off.zsh b/.zsh/fsh/highlighters/main/test-data/comment-off.zsh deleted file mode 100644 index 0381bdb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/comment-off.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsetopt interactive_comments - -BUFFER='# echo foo' - -expected_region_highlight=( - "1 1 unknown-token" # # - "3 6 default" # " echo foo" - "8 10 default" # " echo foo" -) diff --git a/.zsh/fsh/highlighters/main/test-data/comments.zsh b/.zsh/fsh/highlighters/main/test-data/comments.zsh deleted file mode 100644 index f3cc57e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/comments.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt interactive_comments - -BUFFER='echo "foo #bar" #baz # quux' - -expected_region_highlight=( - "1 4 builtin" # echo - "6 15 default" # "foo #bar" - "6 15 double-quoted-argument" # "foo #bar" - "17 27 comment" # #baz # quux -) diff --git a/.zsh/fsh/highlighters/main/test-data/commmand-parameter.zsh b/.zsh/fsh/highlighters/main/test-data/commmand-parameter.zsh deleted file mode 100644 index 48d20ba..0000000 --- a/.zsh/fsh/highlighters/main/test-data/commmand-parameter.zsh +++ /dev/null @@ -1,45 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local x=/usr/bin/env -local y=sudo -local -a z; z=(zsh -f) -sudo(){} - -BUFFER='$x "argument"; $y; $z' - -expected_region_highlight=( - "1 2 command" # $x - "4 13 default" # "argument" - "4 13 double-quoted-argument" # "argument" - "14 14 commandseparator" # ; - "16 17 precommand" # $y (sudo) - "18 18 unknown-token" # ; - "20 21 command" # $z - 'zsh' being the command -) diff --git a/.zsh/fsh/highlighters/main/test-data/control-flow.zsh b/.zsh/fsh/highlighters/main/test-data/control-flow.zsh deleted file mode 100644 index a610bdc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/control-flow.zsh +++ /dev/null @@ -1,57 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='while if echo Hello; then ls /; else ls; fi; do stat "x"; done; repeat 10 ls' - -expected_region_highlight+=( - "1 5 reserved-word" # while - "7 8 reserved-word" # if - "10 13 builtin" # echo - "15 19 default" # Hello - "20 20 commandseparator" # ; - "22 25 reserved-word" # then - "27 28 command" # ls - "30 30 path" # / - "31 31 commandseparator" # ; - "33 36 reserved-word" # else - "38 39 command" # ls - "40 40 commandseparator" # ; - "42 43 reserved-word" # fi - "44 44 commandseparator" # ; - "46 47 reserved-word" # do - "49 52 command" # stat - "54 56 default" # "x" - "54 56 double-quoted-argument" # "x" - "57 57 commandseparator" # ; - "59 62 reserved-word" # done - "63 63 commandseparator" # ; - "65 70 reserved-word" # repeat - "72 73 default" # 10 - "75 76 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/control-flow2.zsh b/.zsh/fsh/highlighters/main/test-data/control-flow2.zsh deleted file mode 100644 index acf99e1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/control-flow2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='repeat 42; do ls; done' - -expected_region_highlight+=( - "1 6 reserved-word" # repeat - "8 9 default" # 42 - "10 10 commandseparator" # ; - "12 13 reserved-word" # do - "15 16 command" # ls - "17 17 commandseparator" # ; - "19 22 reserved-word" # done -) diff --git a/.zsh/fsh/highlighters/main/test-data/control-flow3.zsh b/.zsh/fsh/highlighters/main/test-data/control-flow3.zsh deleted file mode 100644 index 58f507f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/control-flow3.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='repeat 42; ls; pwd' - -expected_region_highlight+=( - "1 6 reserved-word" # repeat - "8 9 default" # 42 - "10 10 commandseparator" # ; - "12 13 command" # ls - "14 14 commandseparator" # ; - "16 18 builtin" # pwd -) diff --git a/.zsh/fsh/highlighters/main/test-data/cthulhu.zsh b/.zsh/fsh/highlighters/main/test-data/cthulhu.zsh deleted file mode 100644 index c8119a8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/cthulhu.zsh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# 0000000 0 01111111111222222 222233333 3 333344 4 4 444444555555555 5 6 6666 6 6 6667777777777888 8 8 88888999 9 9999 9 9 00 00 0000001111 -# 1234567 8 90123456789012345 678901234 5 678901 2 3 456789012345678 9 0 1234 5 6 7890123456789012 3 4 56789012 3 4567 8 9 01 23 4567890123 -BUFFER=$'echo Ph\\\'ng`echo lui "mg"\\`echo lw\\\'nafh \\\\\\`echo Cthu"lhu\\\\\\` R\\\\\'ly$(echo eh wag\\\\\\`echo h\\\'nag\\\\\\`\'l\' fht)agn`' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 113 default' # Ph\'ng`echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` - '12 113 back-quoted-argument' # `echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn` - '12 12 back-quoted-argument-delimiter' # ` - '13 16 builtin' # echo - '18 20 default' # lui - '22 112 default' # "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn - '22 25 double-quoted-argument' # "mg" - '26 112 back-quoted-argument-unclosed' # \`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn - '26 27 back-quoted-argument-delimiter' # \` - '28 31 builtin' # echo - '33 40 default' # lw\'nafh - '42 62 default' # \\\`echo Cthu"lhu\\\` - '42 62 back-quoted-argument' # \\\`echo Cthu"lhu\\\` - '42 45 back-quoted-argument-delimiter' # \\\` - '46 49 builtin' # echo - '51 58 default' # Cthu"lhu - '55 58 double-quoted-argument-unclosed' # "lhu - '59 62 back-quoted-argument-delimiter' # \\\` - '64 112 default' # R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn - '70 109 command-substitution-unquoted' # $(echo eh wag\\\`echo h\'nag\\\`'l' fht) - '70 71 command-substitution-delimiter-unquoted' # $( - '72 75 builtin' # echo - '77 78 default' # eh - '80 104 default' # wag\\\`echo h\'nag\\\`'l' - '83 101 back-quoted-argument' # \\\`echo h\'nag\\\` - '83 86 back-quoted-argument-delimiter' # \\\` - '87 90 builtin' # echo - '92 97 default' # h\'nag - '98 101 back-quoted-argument-delimiter' # \\\` - '102 104 single-quoted-argument' # 'l' - '106 108 default' # fht - '109 109 command-substitution-delimiter-unquoted' # ) - '113 113 unknown-token' # ` -) diff --git a/.zsh/fsh/highlighters/main/test-data/dinbrack1.zsh b/.zsh/fsh/highlighters/main/test-data/dinbrack1.zsh deleted file mode 100644 index e2279d6..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dinbrack1.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'[[ foo && bar || baz ]]' - -expected_region_highlight=( - '1 2 reserved-word' # [[ - '4 6 default' # foo - '8 9 default' # && - '11 13 default' # bar - '15 16 default' # || - '18 20 default' # baz - '22 23 reserved-word' # ]] -) diff --git a/.zsh/fsh/highlighters/main/test-data/dirs_blacklist.zsh b/.zsh/fsh/highlighters/main/test-data/dirs_blacklist.zsh deleted file mode 100644 index 2d0222f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dirs_blacklist.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -mkdir foo -touch foo/bar -BUFFER=": foo/bar $PWD/foo foo/b" -ZSH_HIGHLIGHT_DIRS_BLACKLIST=($PWD/foo $PWD/bar) - -expected_region_highlight=( - '1 1 builtin' # : - '3 9 default' # foo/bar - "11 $(( 14 + $#PWD )) default" # $PWD/foo - "$(( 16 + $#PWD )) $(( 20 + $#PWD )) default" # foo/b -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-dollar.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-dollar.zsh deleted file mode 100644 index e3f387c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-dollar.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "$$ $$foo"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 12 default' # "$$ $$foo" - '3 12 double-quoted-argument' # "$$ $$foo" - '4 5 dollar-double-quoted-argument' # $$ - '7 8 dollar-double-quoted-argument' # $$ -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-noise.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-noise.zsh deleted file mode 100644 index 9bb11bd..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-noise.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "$- $# $* $@ $?"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 18 default' # "$- $# $* $@ $?" - '3 18 double-quoted-argument' # "$- $# $* $@ $?" - '4 5 dollar-double-quoted-argument' # $- - '7 8 dollar-double-quoted-argument' # $# - '10 11 dollar-double-quoted-argument' # $* - '13 14 dollar-double-quoted-argument' # $@ - '16 17 dollar-double-quoted-argument' # $? -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-paren.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-paren.zsh deleted file mode 100644 index 2bbcef1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-paren.zsh +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "$(:)" "foo$(:)bar' - -expected_region_highlight=( - '1 1 builtin' # : - '3 8 default' # "$(:)" - '3 3 double-quoted-argument' # "$(:)" - '8 8 double-quoted-argument' # "$(:)" - '4 7 command-substitution-quoted' # $(:) - '4 5 command-substitution-delimiter-quoted' # $( - '6 6 builtin' # : - '7 7 command-substitution-delimiter-quoted' # ) - '10 20 default' # "foo$(:)bar - '10 13 double-quoted-argument-unclosed' # "foo - '18 20 double-quoted-argument-unclosed' # bar - '14 17 command-substitution-quoted' # $(:) - '14 15 command-substitution-delimiter-quoted' # $( - '16 16 builtin' # : - '17 17 command-substitution-delimiter-quoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-quoted.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-quoted.zsh deleted file mode 100644 index 081a365..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-quoted.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=": \$'*' 'foo'" - -expected_region_highlight=( - "1 1 builtin" # : - "3 6 default" # $'*' - "3 6 dollar-quoted-argument" # $'*' - not a glob - "8 12 default" # 'foo' - "8 12 single-quoted-argument" # 'foo' -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-quoted2.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-quoted2.zsh deleted file mode 100644 index ed7428b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-quoted2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=": \$'foo\xbar\udeadbeef\uzzzz'" - -expected_region_highlight=( - "1 1 builtin" # : - "3 29 default" # $'foo\xbar\udeadbeef\uzzzz' - "3 29 dollar-quoted-argument" # $'foo\xbar\udeadbeef\uzzzz' - "8 11 back-dollar-quoted-argument" # \xba - "13 18 back-dollar-quoted-argument" # \dead - "23 24 unknown-token" # \u -) diff --git a/.zsh/fsh/highlighters/main/test-data/dollar-quoted3.zsh b/.zsh/fsh/highlighters/main/test-data/dollar-quoted3.zsh deleted file mode 100644 index 365f351..0000000 --- a/.zsh/fsh/highlighters/main/test-data/dollar-quoted3.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Similar to double-quoted2.zsh -# This test checks that the '1' gets highlighted correctly. Do not append to the BUFFER. -BUFFER=": \$'\xa1" - -expected_region_highlight=( - "1 1 builtin" # : - "3 8 default" # $'\xa1 - "3 8 dollar-quoted-argument-unclosed" # $'\xa1 - "5 8 back-dollar-quoted-argument" # \xa1 -) diff --git a/.zsh/fsh/highlighters/main/test-data/double-hyphen-option.zsh b/.zsh/fsh/highlighters/main/test-data/double-hyphen-option.zsh deleted file mode 100644 index e5cacd3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/double-hyphen-option.zsh +++ /dev/null @@ -1,35 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='hello --world' - -expected_region_highlight=( - "1 5 unknown-token" # hello - "7 13 double-hyphen-option" # --world -) diff --git a/.zsh/fsh/highlighters/main/test-data/double-quoted.zsh b/.zsh/fsh/highlighters/main/test-data/double-quoted.zsh deleted file mode 100644 index 0a4336c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/double-quoted.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "foo$bar:\`:\":\$:' -BUFFER+=\\\\:\" - -expected_region_highlight=( - "1 1 builtin" # : - "3 24 default" # "foo$bar:\`:\":\$:\\:" - "3 24 double-quoted-argument" # "foo$bar:\`:\":\$:\\:" - "7 10 dollar-double-quoted-argument" # $bar - "12 13 back-double-quoted-argument" # \` - "15 16 back-double-quoted-argument" # \$ - "18 19 back-double-quoted-argument" # \" - "21 22 back-double-quoted-argument" # \\ -) diff --git a/.zsh/fsh/highlighters/main/test-data/double-quoted2.zsh b/.zsh/fsh/highlighters/main/test-data/double-quoted2.zsh deleted file mode 100644 index c400e54..0000000 --- a/.zsh/fsh/highlighters/main/test-data/double-quoted2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Similar to dollar-quoted3.zsh -# This test checks that the 'r' gets highlighted correctly. Do not append to the BUFFER. -BUFFER=': "foo$bar' - -expected_region_highlight=( - "1 1 builtin" # : - "3 10 default" # "foo$bar - "3 10 double-quoted-argument-unclosed" # "foo$bar - "7 10 dollar-double-quoted-argument" # $bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/double-quoted3.zsh b/.zsh/fsh/highlighters/main/test-data/double-quoted3.zsh deleted file mode 100644 index 86e3ced..0000000 --- a/.zsh/fsh/highlighters/main/test-data/double-quoted3.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "$" "$42foo"' -BUFFER+=\ \"\\\'\\x\" - -expected_region_highlight=( - "1 1 builtin" # : - "3 5 default" # "$" - "3 5 double-quoted-argument" # "$" - "7 14 default" # "$42foo" - "7 14 double-quoted-argument" # "$42foo" - "8 10 dollar-double-quoted-argument" # $42 - "16 21 default" # "\'\x" - "16 21 double-quoted-argument" # "\'\x" - \' and \x are not escape sequences -) diff --git a/.zsh/fsh/highlighters/main/test-data/double-quoted4.zsh b/.zsh/fsh/highlighters/main/test-data/double-quoted4.zsh deleted file mode 100644 index c59d5d8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/double-quoted4.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': "${foo}bar"' - -expected_region_highlight=( - "1 1 builtin" # : - "3 13 default" # "${foo}bar" - "3 13 double-quoted-argument" # "${foo}bar" - "4 9 dollar-double-quoted-argument" # ${foo} -) diff --git a/.zsh/fsh/highlighters/main/test-data/empty-command-newline.zsh b/.zsh/fsh/highlighters/main/test-data/empty-command-newline.zsh deleted file mode 100644 index 4b7b35c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/empty-command-newline.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Newline after semicolon isn't unknown-token -BUFFER=$':;\n:' - -expected_region_highlight=( - '1 1 builtin' # : - '2 2 commandseparator' # ; - '3 3 commandseparator' # \n - '4 4 builtin' # : -) diff --git a/.zsh/fsh/highlighters/main/test-data/empty-command.zsh b/.zsh/fsh/highlighters/main/test-data/empty-command.zsh deleted file mode 100644 index 5831464..0000000 --- a/.zsh/fsh/highlighters/main/test-data/empty-command.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo; ;' - -expected_region_highlight=( - "1 4 builtin" # echo - "5 5 commandseparator" # ; - "7 7 unknown-token" # ; -) diff --git a/.zsh/fsh/highlighters/main/test-data/empty-command2.zsh b/.zsh/fsh/highlighters/main/test-data/empty-command2.zsh deleted file mode 100644 index dcb4e6f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/empty-command2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Same test data and expectations as empty-command.zsh; the only difference is: -touch ';' - -BUFFER='echo; ;' - -expected_region_highlight=( - "1 4 builtin" # echo - "5 5 commandseparator" # ; - "7 7 unknown-token" # ; -) diff --git a/.zsh/fsh/highlighters/main/test-data/empty-line.zsh b/.zsh/fsh/highlighters/main/test-data/empty-line.zsh deleted file mode 100644 index a4d6685..0000000 --- a/.zsh/fsh/highlighters/main/test-data/empty-line.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'\\\n; ls' - -expected_region_highlight=( - '3 3 unknown-token' # ; - '5 6 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/equals1.zsh b/.zsh/fsh/highlighters/main/test-data/equals1.zsh deleted file mode 100644 index 77f46e8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/equals1.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': =ls' - -expected_region_highlight=( - '1 1 builtin' # : - '3 5 path' # =ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/equals2.zsh b/.zsh/fsh/highlighters/main/test-data/equals2.zsh deleted file mode 100644 index bd59ff7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/equals2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsetopt equals - -BUFFER=$': =nosuchcommand' - -expected_region_highlight=( - '1 1 builtin' # : - '3 16 default' # =nosuchcommand -) diff --git a/.zsh/fsh/highlighters/main/test-data/equals3.zsh b/.zsh/fsh/highlighters/main/test-data/equals3.zsh deleted file mode 100644 index 8c10789..0000000 --- a/.zsh/fsh/highlighters/main/test-data/equals3.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': =nosuchcommand' - -expected_region_highlight=( - '1 1 builtin' # : - '3 16 unknown-token' # =nosuchcommand -) diff --git a/.zsh/fsh/highlighters/main/test-data/equals4.zsh b/.zsh/fsh/highlighters/main/test-data/equals4.zsh deleted file mode 100644 index 28bc214..0000000 --- a/.zsh/fsh/highlighters/main/test-data/equals4.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': =' - -expected_region_highlight=( - '1 1 builtin' # : - '3 3 default' # = -) diff --git a/.zsh/fsh/highlighters/main/test-data/escaped-single-quote.zsh b/.zsh/fsh/highlighters/main/test-data/escaped-single-quote.zsh deleted file mode 100644 index 4b2fe4b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/escaped-single-quote.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': \'foo\'\\\'\'bar\'' # <<<: 'foo'\''bar'>>> - -expected_region_highlight=( - '1 1 builtin' # : - '3 14 default' # 'foo'\''bar' - '3 7 single-quoted-argument' # 'foo' - '10 14 single-quoted-argument' # 'bar' -) diff --git a/.zsh/fsh/highlighters/main/test-data/exec-redirection1.zsh b/.zsh/fsh/highlighters/main/test-data/exec-redirection1.zsh deleted file mode 100644 index 78a0c62..0000000 --- a/.zsh/fsh/highlighters/main/test-data/exec-redirection1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='exec {foo}>&/tmp ls' - -expected_region_highlight=( - "1 4 precommand" # exec - "6 10 named-fd" # {foo} - "11 12 redirection" # >& - "13 16 path" # /tmp - "18 19 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/fd-target-not-filename.zsh b/.zsh/fsh/highlighters/main/test-data/fd-target-not-filename.zsh deleted file mode 100644 index 5c3cd08..0000000 --- a/.zsh/fsh/highlighters/main/test-data/fd-target-not-filename.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch 2 - -BUFFER=$'echo foo>&2' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 8 default' # foo - '9 10 redirection' # >& - '11 11 numeric-fd' # 2 (not path) -) diff --git a/.zsh/fsh/highlighters/main/test-data/function-altsyntax.zsh b/.zsh/fsh/highlighters/main/test-data/function-altsyntax.zsh deleted file mode 100644 index 0f9a833..0000000 --- a/.zsh/fsh/highlighters/main/test-data/function-altsyntax.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Define named and anonymous function using the alternative syntax -BUFFER=$'function f { pwd }; function { pwd }' - -expected_region_highlight=( - '1 8 reserved-word' # function - '10 10 default' # f - '12 12 reserved-word "issue #237"' # { - '14 16 command "issue #237"' # pwd - '18 18 reserved-word "issue #237"' # } - '19 19 commandseparator' # ; - '21 28 reserved-word' # function - '30 30 reserved-word "issue #237"' # { - '32 34 command "issue #237"' # pwd - '36 36 reserved-word "issue #237"' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/function-named1.zsh b/.zsh/fsh/highlighters/main/test-data/function-named1.zsh deleted file mode 100644 index c962ddb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/function-named1.zsh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='f() pwd; f() { balanced braces }' - -expected_region_highlight=( - '1 1 TBD "issue #223"' # f - '2 3 reserved-word' # () - '5 7 builtin' # pwd - '8 8 commandseparator' # ; - '10 10 TBD "issue #223"' # f - '11 12 reserved-word' # () - '14 14 reserved-word' # { - '16 23 unknown-token' # balanced - '25 30 default' # braces - '32 32 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/function-named2.zsh b/.zsh/fsh/highlighters/main/test-data/function-named2.zsh deleted file mode 100644 index e12fce6..0000000 --- a/.zsh/fsh/highlighters/main/test-data/function-named2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='f g h () pwd' - -expected_region_highlight=( - '1 1 TBD "issue #223"' # f - '3 3 TBD "issue #223"' # g - '5 5 TBD "issue #223"' # h - '7 8 reserved-word' # () - '10 12 builtin' # pwd -) diff --git a/.zsh/fsh/highlighters/main/test-data/function.zsh b/.zsh/fsh/highlighters/main/test-data/function.zsh deleted file mode 100644 index b1be853..0000000 --- a/.zsh/fsh/highlighters/main/test-data/function.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -cd() { - builtin cd "$@" -} -ls() { - command ls "$@" -} -BUFFER='cd;ls' - -expected_region_highlight=( - "1 2 function" # cd - "3 3 commandseparator" # ; - "4 5 function" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/glob.zsh b/.zsh/fsh/highlighters/main/test-data/glob.zsh deleted file mode 100644 index 2ff1022..0000000 --- a/.zsh/fsh/highlighters/main/test-data/glob.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': foo* bar? *baz qux\?' - -expected_region_highlight=( - "1 1 builtin" # : - "3 6 default" # foo* - "6 6 globbing" # * - "8 11 default" # bar? - "11 11 globbing" # ? - "13 16 default" # *baz - "13 13 globbing" # * - "18 22 default" # qux\? -) diff --git a/.zsh/fsh/highlighters/main/test-data/global-alias1.zsh b/.zsh/fsh/highlighters/main/test-data/global-alias1.zsh deleted file mode 100644 index 0022de3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/global-alias1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias -g foo=bar - -BUFFER=$'foo foo' - -expected_region_highlight=( - '1 3 global-alias' # foo - '5 7 global-alias' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/globs-with-quoting.zsh b/.zsh/fsh/highlighters/main/test-data/globs-with-quoting.zsh deleted file mode 100644 index d7d74bc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/globs-with-quoting.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': "foo"*\'bar\'?"baz?"<17-29>"qu*ux"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 34 default' # "foo"*'bar'?"baz?"<17-29>"qu*ux" - '3 7 double-quoted-argument' # "foo" - '8 8 globbing' # * - '9 13 single-quoted-argument' # 'bar' - '14 14 globbing' # ? - '15 20 double-quoted-argument' # "baz?" - '21 27 globbing' # <17-29> - '28 34 double-quoted-argument' # "qu*ux" -) diff --git a/.zsh/fsh/highlighters/main/test-data/hashed-command.zsh b/.zsh/fsh/highlighters/main/test-data/hashed-command.zsh deleted file mode 100644 index 2983ef8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/hashed-command.zsh +++ /dev/null @@ -1,35 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -hash zsh_syntax_highlighting_hash=/doesnotexist -BUFFER='zsh_syntax_highlighting_hash' - -expected_region_highlight=( - "1 28 hashed-command 'zsh/parameter cannot distinguish between hashed and command'" -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-escaped.zsh b/.zsh/fsh/highlighters/main/test-data/history-double-quoted-escaped.zsh deleted file mode 100644 index 7807cc0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-escaped.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "Hello\!"' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 14 default' # "Hello\!" - '6 14 double-quoted-argument' # "Hello\!" - '12 13 back-double-quoted-argument' # \! -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-followed.zsh b/.zsh/fsh/highlighters/main/test-data/history-double-quoted-followed.zsh deleted file mode 100644 index 6421ced..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-followed.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': !!= "!!="' - -expected_region_highlight=( - '1 1 builtin' # : - '3 4 history-expansion "issue #713"' # !! - '7 11 default' # "!!=" - '7 11 double-quoted-argument' # "!!=" - '8 9 history-expansion "issue #713' # !! -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-no.zsh b/.zsh/fsh/highlighters/main/test-data/history-double-quoted-no.zsh deleted file mode 100644 index e082dbc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-no.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "foo != bar !{baz}"' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 24 default' # "foo != bar !{baz}" - '6 24 double-quoted-argument' # "foo != bar !{baz}" - no history expansions -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-unescaped.zsh b/.zsh/fsh/highlighters/main/test-data/history-double-quoted-unescaped.zsh deleted file mode 100644 index cfe6a11..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-unescaped.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "Hello!"' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 13 default' # "Hello!" - '6 13 double-quoted-argument' # "Hello!" - '12 12 history-expansion' # ! -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-yes.zsh b/.zsh/fsh/highlighters/main/test-data/history-double-quoted-yes.zsh deleted file mode 100644 index e963c3b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-double-quoted-yes.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='echo "foo !bar"' - -expected_region_highlight=( - '1 4 builtin' # echo - '6 15 default' # "foo !bar" - '6 15 double-quoted-argument' # "foo !bar" - '11 11 history-expansion' # ! -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-expansion.zsh b/.zsh/fsh/highlighters/main/test-data/history-expansion.zsh deleted file mode 100644 index 05e20fc..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-expansion.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='!foo bar !baz ! ; !' - -expected_region_highlight=( - "1 4 history-expansion" # !foo - "6 8 default" # bar - "10 13 history-expansion" # !baz - "15 15 default" # ! - "17 17 commandseparator" # ; - "19 19 reserved-word" # ! -) diff --git a/.zsh/fsh/highlighters/main/test-data/history-expansion2.zsh b/.zsh/fsh/highlighters/main/test-data/history-expansion2.zsh deleted file mode 100644 index 386d0df..0000000 --- a/.zsh/fsh/highlighters/main/test-data/history-expansion2.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='^foo^bar' - -expected_region_highlight=( - "1 8 history-expansion" # ^foo^bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/inheritance.zsh b/.zsh/fsh/highlighters/main/test-data/inheritance.zsh deleted file mode 100644 index e851ca3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/inheritance.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -_zsh_highlight_add_highlight() -{ - region_highlight+=("$1 $2 ${(j.,.)argv[3,-1]}") -} - -BUFFER='type' - -expected_region_highlight=( - '1 4 builtin,arg0' # type -) diff --git a/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob.zsh b/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob.zsh deleted file mode 100644 index 3a7e325..0000000 --- a/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018.9958 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': %? %?foo' - -expected_region_highlight=( - '1 1 builtin' # : - '3 4 default' # %? - '6 10 default' # %?foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob2.zsh b/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob2.zsh deleted file mode 100644 index 51930bf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/jobsubst-isnt-glob2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': foo%?bar' - -expected_region_highlight=( - '1 1 builtin' # : - '3 10 default' # foo%?bar - '7 7 globbing' # ? -) diff --git a/.zsh/fsh/highlighters/main/test-data/loop-newline.zsh b/.zsh/fsh/highlighters/main/test-data/loop-newline.zsh deleted file mode 100644 index d39ee11..0000000 --- a/.zsh/fsh/highlighters/main/test-data/loop-newline.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'for i in \\\n; do done' - -expected_region_highlight=( - '1 3 reserved-word' # for - '5 5 default' # i - '7 8 default' # in - '12 12 commandseparator' # ; - '14 15 reserved-word' # do - '17 20 reserved-word' # done -) diff --git a/.zsh/fsh/highlighters/main/test-data/meta-no-eval1.zsh b/.zsh/fsh/highlighters/main/test-data/meta-no-eval1.zsh deleted file mode 100644 index bb04077..0000000 --- a/.zsh/fsh/highlighters/main/test-data/meta-no-eval1.zsh +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $(kill -9 $$) ${:-$(kill -9 $$)}' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # $(kill -9 $$) - '3 15 command-substitution-unquoted' # $(kill -9 $$) - '3 4 command-substitution-delimiter-unquoted' # $( - '5 8 builtin' # kill - '10 11 single-hyphen-option' # -9 - '13 14 default' # $$ - '15 15 command-substitution-delimiter-unquoted' # ) - '17 34 default' # ${:-$(kill -9 $$)} - '21 33 command-substitution-unquoted' # $(kill -9 $$) - '21 22 command-substitution-delimiter-unquoted' # $( - '23 26 builtin' # kill - '28 29 single-hyphen-option' # -9 - '31 32 default' # $$ - '33 33 command-substitution-delimiter-unquoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/meta-no-eval2.zsh b/.zsh/fsh/highlighters/main/test-data/meta-no-eval2.zsh deleted file mode 100644 index 61ef089..0000000 --- a/.zsh/fsh/highlighters/main/test-data/meta-no-eval2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# We aren't testing how this is highlighted; we're testing that it's not -# evaluated. If it gets evaluated, the test suite will die. -BUFFER=$': /(e*exit 42*)' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # /(e*exit 42*) - '6 6 globbing' # * - '14 14 globbing' # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/multiline-array-assignment1.zsh b/.zsh/fsh/highlighters/main/test-data/multiline-array-assignment1.zsh deleted file mode 100644 index 8906cfd..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multiline-array-assignment1.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'foo=(\nbar) env' - -expected_region_highlight=( - '1 5 assign' # foo=( - '5 5 reserved-word' # ( - '6 6 commandseparator' # \n - '7 9 default' # bar - '10 10 assign' # ) - '10 10 reserved-word' # ) - '12 14 precommand' # env -) diff --git a/.zsh/fsh/highlighters/main/test-data/multiline-string.zsh b/.zsh/fsh/highlighters/main/test-data/multiline-string.zsh deleted file mode 100644 index 0127b4b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multiline-string.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -PREBUFFER=$'echo "foo1\n' -BUFFER='foo2" ./' - -expected_region_highlight=( - "1 5 default" # 'foo2"' - "1 5 double-quoted-argument" # 'foo2"' - "7 8 path" # './' -) diff --git a/.zsh/fsh/highlighters/main/test-data/multiline-string2.zsh b/.zsh/fsh/highlighters/main/test-data/multiline-string2.zsh deleted file mode 100644 index 3a90dce..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multiline-string2.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'echo \'foo1\n' - -expected_region_highlight=( - "1 4 builtin" # echo - "6 11 default" # 'foo1\n - "6 11 single-quoted-argument-unclosed" # 'foo1\n -) diff --git a/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing.zsh b/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing.zsh deleted file mode 100644 index 7ece670..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -unsetopt multios - -BUFFER=$'cat < *' - -expected_region_highlight=( - '1 3 command' # cat - '5 5 redirection' # < - '7 7 default' # * - not globbing -) diff --git a/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing2.zsh b/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing2.zsh deleted file mode 100644 index b6db983..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multios-negates-globbing2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'cat < *' - -expected_region_highlight=( - '1 3 command' # cat - '5 5 redirection' # < - '7 7 default' # * - '7 7 globbing' # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/multiple-quotes.zsh b/.zsh/fsh/highlighters/main/test-data/multiple-quotes.zsh deleted file mode 100644 index dabf70c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multiple-quotes.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': \'foo\'bar"baz$quux/foo\\\\bar"baz$\'quux\\nfoo\\001bar\'baz' - -expected_region_highlight=( - "1 1 builtin" # : - "3 54 default" # 'foo'bar"baz$quux/foo\\bar"baz$'quux\nfoo\001'baz - "3 7 single-quoted-argument" # 'foo' - "11 29 double-quoted-argument" #"baz - "15 19 dollar-double-quoted-argument" # $quux - "24 25 back-double-quoted-argument" # \\ - "33 51 dollar-quoted-argument" # $'quux\nfoo\001bar' - "39 40 back-dollar-quoted-argument" # \n - "44 47 back-dollar-quoted-argument" # \001 -) diff --git a/.zsh/fsh/highlighters/main/test-data/multiple-redirections.zsh b/.zsh/fsh/highlighters/main/test-data/multiple-redirections.zsh deleted file mode 100644 index 778e712..0000000 --- a/.zsh/fsh/highlighters/main/test-data/multiple-redirections.zsh +++ /dev/null @@ -1,46 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='ps aux | grep java | sort | uniq | tail | head' - -expected_region_highlight=( - "1 2 command" # ps - "4 6 default" # aux - "8 8 commandseparator" # | - "10 13 command" # grep - "15 18 default" # java - "20 20 commandseparator" # | - "22 25 command" # sort - "27 27 commandseparator" # | - "29 32 command" # uniq - "34 34 commandseparator" # | - "36 39 command" # tail - "41 41 commandseparator" # | - "43 46 command" # head -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob-alias.zsh b/.zsh/fsh/highlighters/main/test-data/noglob-alias.zsh deleted file mode 100644 index 2f96445..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob-alias.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias x=command -BUFFER='x ls' - -expected_region_highlight=( - "1 1 alias" # x - "3 4 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob-always.zsh b/.zsh/fsh/highlighters/main/test-data/noglob-always.zsh deleted file mode 100644 index 6d55048..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob-always.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'{ noglob echo * } always { echo * }' - -expected_region_highlight=( - '1 1 reserved-word' # { - '3 8 precommand' # noglob - '10 13 builtin' # echo - '15 15 default' # * - '17 17 reserved-word' # } - '19 24 reserved-word' # always - '26 26 reserved-word' # { - '28 31 builtin' # echo - '33 33 default' # * - '33 33 globbing' # * - '35 35 reserved-word' # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob1.zsh b/.zsh/fsh/highlighters/main/test-data/noglob1.zsh deleted file mode 100644 index 1857db0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=':; noglob echo *' - -expected_region_highlight=( - "1 1 builtin" # : - "2 2 commandseparator" # ; - "4 9 precommand" # noglob - "11 14 builtin" # echo - "16 16 default" # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob2.zsh b/.zsh/fsh/highlighters/main/test-data/noglob2.zsh deleted file mode 100644 index 3b4fcd7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='noglob echo *; echo *' - -expected_region_highlight=( - "1 6 precommand" # noglob - "8 11 builtin" # echo - "13 13 default" # * - "14 14 commandseparator" # ; - "16 19 builtin" # echo - "21 21 default" # * - "21 21 globbing" # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob3.zsh b/.zsh/fsh/highlighters/main/test-data/noglob3.zsh deleted file mode 100644 index c404aaa..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob3.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch \* - -BUFFER='noglob echo *' - -expected_region_highlight=( - "1 6 precommand" # noglob - "8 11 builtin" # echo - "13 13 path" # * -) diff --git a/.zsh/fsh/highlighters/main/test-data/noglob4.zsh b/.zsh/fsh/highlighters/main/test-data/noglob4.zsh deleted file mode 100644 index cc7065f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/noglob4.zsh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'noglob cat <(print -r -- *)' - -expected_region_highlight=( - '1 6 precommand' # noglob - '8 10 command' # cat - '12 27 default' # <(print -r -- *) - '12 27 process-substitution' # <(print -r -- *) - '12 13 process-substitution-delimiter' # <( - '14 18 builtin' # print - '20 21 single-hyphen-option' # -r - '23 24 double-hyphen-option' # -- - '26 26 default' # * - '26 26 globbing' # * - '27 27 process-substitution-delimiter' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/null-exec.zsh b/.zsh/fsh/highlighters/main/test-data/null-exec.zsh deleted file mode 100644 index be1e306..0000000 --- a/.zsh/fsh/highlighters/main/test-data/null-exec.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'exec >/dev/null;' - -expected_region_highlight=( - '1 4 precommand' # exec - '6 6 redirection' # > - '7 15 path' # /dev/null - '16 16 commandseparator' # ; -) diff --git a/.zsh/fsh/highlighters/main/test-data/null-exec2-printenv.zsh b/.zsh/fsh/highlighters/main/test-data/null-exec2-printenv.zsh deleted file mode 100644 index 59a2cef..0000000 --- a/.zsh/fsh/highlighters/main/test-data/null-exec2-printenv.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2021 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'env | grep $needle' - -expected_region_highlight=( - '1 3 precommand' # env - '5 5 commandseparator' # | - '7 10 command' # grep - '12 18 default' # $needle -) diff --git a/.zsh/fsh/highlighters/main/test-data/number_range-glob.zsh b/.zsh/fsh/highlighters/main/test-data/number_range-glob.zsh deleted file mode 100644 index c840951..0000000 --- a/.zsh/fsh/highlighters/main/test-data/number_range-glob.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='print <-> x<->y ' - -expected_region_highlight=( - '1 5 builtin' # print - '7 9 default' # <-> - '7 9 globbing' # <-> - '11 15 default' # x<->y - '12 14 globbing' # <-> - '17 17 redirection' # < - '18 23 default' # foo2-3 (the filename) - '24 24 redirection' # > -) diff --git a/.zsh/fsh/highlighters/main/test-data/off-by-one.zsh b/.zsh/fsh/highlighters/main/test-data/off-by-one.zsh deleted file mode 100644 index 872143a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/off-by-one.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -alias a=: -f() {} - -BUFFER='a;f;' - -expected_region_highlight=( - "1 1 alias" # a - "2 2 commandseparator" # ; - "3 3 function" # f - "4 4 commandseparator" # ; -) diff --git a/.zsh/fsh/highlighters/main/test-data/opt-shwordsplit1.zsh b/.zsh/fsh/highlighters/main/test-data/opt-shwordsplit1.zsh deleted file mode 100644 index 7455785..0000000 --- a/.zsh/fsh/highlighters/main/test-data/opt-shwordsplit1.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt shwordsplit -local EDITOR='ed -s' - -ed() { command ed "$@" } - -BUFFER=$'$EDITOR' - -expected_region_highlight=( - '1 7 function "issue #687"' # $EDITOR -) diff --git a/.zsh/fsh/highlighters/main/test-data/optimized-cmdsubst-input.zsh b/.zsh/fsh/highlighters/main/test-data/optimized-cmdsubst-input.zsh deleted file mode 100644 index ca55ef8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/optimized-cmdsubst-input.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See getoutput() and getoutputfile() in zsh's C source code. - -BUFFER=$': $(<*)' - -expected_region_highlight=( - '1 1 builtin' # : - '3 7 default' # $(<*) - '3 7 command-substitution-unquoted' # $(<*) - '3 4 command-substitution-delimiter-unquoted' # $( - '5 5 redirection' # < - '6 6 default' # * - not globbing! - '7 7 command-substitution-delimiter-unquoted' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh b/.zsh/fsh/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh deleted file mode 100644 index 897a02e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': -$\'n\'' - -touch ./-n - -expected_region_highlight=( - '1 1 builtin' # : - '3 7 single-hyphen-option' # -$'n' - '4 7 dollar-quoted-argument' # $'n' -) diff --git a/.zsh/fsh/highlighters/main/test-data/option-path_dirs.zsh b/.zsh/fsh/highlighters/main/test-data/option-path_dirs.zsh deleted file mode 100644 index 0300c7e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/option-path_dirs.zsh +++ /dev/null @@ -1,44 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -if [[ $OSTYPE == msys ]]; then - skip_test='Cannot chmod +x in msys2' -else - setopt PATH_DIRS - mkdir -p foo/bar - touch foo/bar/testing-issue-228 - chmod +x foo/bar/testing-issue-228 - path+=( "$PWD"/foo ) - - BUFFER='bar/testing-issue-228' - - expected_region_highlight=( - "1 21 command" # bar/testing-issue-228 - ) -fi diff --git a/.zsh/fsh/highlighters/main/test-data/option-with-quotes.zsh b/.zsh/fsh/highlighters/main/test-data/option-with-quotes.zsh deleted file mode 100644 index 6286f03..0000000 --- a/.zsh/fsh/highlighters/main/test-data/option-with-quotes.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': --user="phy1729"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 18 double-hyphen-option' # --user="phy1729" - '10 18 double-quoted-argument' # "phy1729" -) diff --git a/.zsh/fsh/highlighters/main/test-data/order-path-after-dollar.zsh b/.zsh/fsh/highlighters/main/test-data/order-path-after-dollar.zsh deleted file mode 100644 index 773c183..0000000 --- a/.zsh/fsh/highlighters/main/test-data/order-path-after-dollar.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch '$foo' -BUFFER=': $foo \$foo' - -expected_region_highlight=( - '1 1 builtin' # : - '3 6 default' # $foo - if we add a "unquoted parameter expansion" style then this expectation should change - '8 12 path' # \$foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/order-path-before-globbing.zsh b/.zsh/fsh/highlighters/main/test-data/order-path-before-globbing.zsh deleted file mode 100644 index 8456b18..0000000 --- a/.zsh/fsh/highlighters/main/test-data/order-path-before-globbing.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch '*' -BUFFER=': * \*' - -expected_region_highlight=( - '1 1 builtin' # : - '3 3 default' # * - '3 3 globbing' # * - '5 6 path' # \* -) diff --git a/.zsh/fsh/highlighters/main/test-data/param-positional-in-array-append.zsh b/.zsh/fsh/highlighters/main/test-data/param-positional-in-array-append.zsh deleted file mode 100644 index bd39e02..0000000 --- a/.zsh/fsh/highlighters/main/test-data/param-positional-in-array-append.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# This used to be an infinite loop. - -BUFFER=$'l+=( $1' - -expected_region_highlight=( - '1 4 assign' # l+=( - '4 4 reserved-word' # ( - '6 7 default' # $1 -) diff --git a/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument1.zsh b/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument1.zsh deleted file mode 100644 index 84cf03a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument1.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See also alias-precommand-option-argument1.zsh -local -a sudo_u; sudo_u=(sudo -u) -sudo(){} - -BUFFER='$sudo_u phy1729 echo foo' - -expected_region_highlight=( - '1 7 precommand' # $sudo_u - '9 15 default' # phy1729 - '18 20 command "issue #540"' # echo (not builtin) - '22 24 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument3.zsh b/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument3.zsh deleted file mode 100644 index 9a8dde2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/param-precommand-option-argument3.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See also alias-precommand-option-argument3.zsh -local -a sudo_u; sudo_u=(sudo -u) -sudo(){} - -BUFFER='$sudo_u phy1729 ls foo' - -expected_region_highlight=( - '1 7 precommand' # sudo_u - '9 15 default' # phy1729 - '17 18 command' # ls - '20 22 default' # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-elision-command-word.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-elision-command-word.zsh deleted file mode 100644 index 25f649a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-elision-command-word.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='$x ls' - -expected_region_highlight=( - '1 2 comment' # $x - '4 5 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized1.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized1.zsh deleted file mode 100644 index 8b8b5e4..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local x="()" - -BUFFER=$'$x ls' - -expected_region_highlight=( - '1 2 unknown-token' # $x - '4 5 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized2.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized2.zsh deleted file mode 100644 index d23a1f2..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-expansion-untokenized2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local x="^foo^bar" - -BUFFER=$'$x ls' - -expected_region_highlight=( - '1 2 unknown-token' # $x - '4 5 default' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-star.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-star.zsh deleted file mode 100644 index 2311be0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-star.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='() { : $* }' - -# This tests that $* isn't highlighted as a glob. -# If we ever add a "unquoted parameter" style, the expectation may change. -expected_region_highlight=( - "1 2 reserved-word" # () - "4 4 reserved-word" # { - "6 6 builtin" # : - "8 9 default" # $* - "11 11 reserved-word" # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-to-global-alias.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-to-global-alias.zsh deleted file mode 100644 index cd2283b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-to-global-alias.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -if type x >/dev/null; then - skip_test="Test is written on the assumption that 'x' is not a valid command name, but that assumption does not hold" - return 0 -fi -alias -g x=y -local s=x - -BUFFER=$'$s' - -expected_region_highlight=( - '1 2 unknown-token' # $s -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position1.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position1.zsh deleted file mode 100644 index 05ea1bf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position1.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local foobar='x=$(ls)' - -BUFFER=$'$foobar' - -expected_region_highlight=( - # Used to highlight the "ba" as 'command' because the 'ls' showed through; issues #670 and #674 - '1 7 unknown-token' # $foobar (not an assignment) -) diff --git a/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position2.zsh b/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position2.zsh deleted file mode 100644 index 5042e89..0000000 --- a/.zsh/fsh/highlighters/main/test-data/parameter-value-contains-command-position2.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local y='x=$(ls)' - -BUFFER=$'$y' - -expected_region_highlight=( - # Used to trigger a "BUG" message on stderr - issues #670 and #674 - '1 2 unknown-token' # $y (not an assignment) -) diff --git a/.zsh/fsh/highlighters/main/test-data/pasted-quotes.zsh b/.zsh/fsh/highlighters/main/test-data/pasted-quotes.zsh deleted file mode 100644 index f37f21b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/pasted-quotes.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2013 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': \'foo\'bar"baz"' - -expected_region_highlight=( - '1 1 builtin' # : - '3 15 default' # \'foo\'bar"baz" - '3 7 single-quoted-argument' # \'foo\' - '11 15 double-quoted-argument' # "baz" -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-broken-symlink.zsh b/.zsh/fsh/highlighters/main/test-data/path-broken-symlink.zsh deleted file mode 100644 index baebee3..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-broken-symlink.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -if [[ $OSTYPE == msys ]]; then - skip_test='Cannot create symlinks in msys2' -else - ln -s /nonexistent broken-symlink - BUFFER=': broken-symlink' - CURSOR=5 # to make path_prefix ineligible - - expected_region_highlight=( - "1 1 builtin" # : - "3 16 path" # broken-symlink - ) -fi diff --git a/.zsh/fsh/highlighters/main/test-data/path-dollared-word.zsh b/.zsh/fsh/highlighters/main/test-data/path-dollared-word.zsh deleted file mode 100644 index 99055da..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-dollared-word.zsh +++ /dev/null @@ -1,45 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -if [[ $OSTYPE == msys ]]; then - skip_test='Cannot chmod +x in msys2' # cargo culted from option-path_dirs.zsh -else - mkdir kappa - touch kappa.exe - chmod +x kappa.exe - cd kappa - - BUFFER='$PWD.exe; ${PWD}.exe' - - expected_region_highlight=( - "1 8 unknown-token" # $PWD.exe - not eval'd; issue #328 - "9 9 commandseparator" # ; - "11 20 unknown-token" # ${PWD}.exe - ) -fi diff --git a/.zsh/fsh/highlighters/main/test-data/path-dollared-word2.zsh b/.zsh/fsh/highlighters/main/test-data/path-dollared-word2.zsh deleted file mode 100644 index f404d5d..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-dollared-word2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -local lambda="''" -touch \$lambda -BUFFER=': \$lambda' - -expected_region_highlight=( - "1 1 builtin" # : - "3 10 path" # \$lambda -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-dollared-word3.zsh b/.zsh/fsh/highlighters/main/test-data/path-dollared-word3.zsh deleted file mode 100644 index ec981b1..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-dollared-word3.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# «/usr» at this point would be highlighted as path_prefix; so should -# a parameter that expands to an equivalent string be highlighted. -# -# More complicated parameter substitutions aren't eval'd; issue #328. -BUFFER='$PWD; ${PWD}' - -expected_region_highlight=( - "1 4 unknown-token" # $PWD (without AUTO_CD) - "5 5 commandseparator" # ; - "7 12 path_prefix" # ${PWD} -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-dollared-word3b.zsh b/.zsh/fsh/highlighters/main/test-data/path-dollared-word3b.zsh deleted file mode 100644 index 72a2f7c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-dollared-word3b.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt autocd -BUFFER=$'$PWD; ${PWD}' - -expected_region_highlight=( - '1 4 autodirectory' # $PWD - '5 5 commandseparator' # ; - '7 12 autodirectory' # ${PWD} -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-dollared-word4.zsh b/.zsh/fsh/highlighters/main/test-data/path-dollared-word4.zsh deleted file mode 100644 index e29182c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-dollared-word4.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# This tests for a regression during development of issue #328: an interim version -# of that branch failed that test with "Bail out! output on stderr". -BUFFER='${' - -expected_region_highlight=( - "1 2 unknown-token" # ${ -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-mixed-quoting.zsh b/.zsh/fsh/highlighters/main/test-data/path-mixed-quoting.zsh deleted file mode 100644 index cbd0b38..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-mixed-quoting.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch foo - -BUFFER=$': \'f\'oo' - -expected_region_highlight=( - '1 1 builtin' # : - '3 7 path' # \'f\'oo - '3 5 single-quoted-argument' # \'f\' -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-separators.zsh b/.zsh/fsh/highlighters/main/test-data/path-separators.zsh deleted file mode 100644 index 52749b7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-separators.zsh +++ /dev/null @@ -1,53 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values. -# Make sure the relevant ones are set to something. -ZSH_HIGHLIGHT_STYLES[path_pathseparator]=set -ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]=set - -mkdir A -touch A/mu -BUFFER='ls /bin/ / A/mu A/m' - -expected_region_highlight=( - "1 2 command" # ls - "4 8 path" # /bin/ - "4 4 path_pathseparator" # / - "8 8 path_pathseparator" # / - - "10 10 path" # / - "10 10 path_pathseparator" # / - - "12 15 path" # A/mu - "13 13 path_pathseparator" # / - - "17 19 path_prefix" # A/m - "18 18 path_prefix_pathseparator" # / -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-separators2.zsh b/.zsh/fsh/highlighters/main/test-data/path-separators2.zsh deleted file mode 100644 index bc885a0..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-separators2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values. -# For this test, make sure both these styles are set and identical: -ZSH_HIGHLIGHT_STYLES[path]=value -ZSH_HIGHLIGHT_STYLES[path_pathseparator]=value - -BUFFER='ls /bin/' - -expected_region_highlight=( - "1 2 command" # ls - "4 8 path" # /bin/ -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-space.zsh b/.zsh/fsh/highlighters/main/test-data/path-space.zsh deleted file mode 100644 index 87cc22f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-space.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -mkdir A -touch "A/mu with spaces" -BUFFER='ls A/mu\ with\ spaces' - -expected_region_highlight=( - "1 2 command" # ls - "4 21 path" # A/mu\ with\ spaces -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-tilde-home.zsh b/.zsh/fsh/highlighters/main/test-data/path-tilde-home.zsh deleted file mode 100644 index 8b1c680..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-tilde-home.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -HOME="." -BUFFER='ls ~' - -expected_region_highlight=( - "1 2 command" # ls - "4 4 path" # ~ -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-tilde-home2.zsh b/.zsh/fsh/highlighters/main/test-data/path-tilde-home2.zsh deleted file mode 100644 index 3f7b820..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-tilde-home2.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -HOME="/nonexistent" -BUFFER='ls ~' - -expected_region_highlight=( - "1 2 command" # ls - "4 4 default" # ~ -) - diff --git a/.zsh/fsh/highlighters/main/test-data/path-tilde-home3.zsh b/.zsh/fsh/highlighters/main/test-data/path-tilde-home3.zsh deleted file mode 100644 index 5c076e8..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-tilde-home3.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -HOME="." -BUFFER='ls \~' - -expected_region_highlight=( - "1 2 command" # ls - "4 5 default" # \~ -) diff --git a/.zsh/fsh/highlighters/main/test-data/path-tilde-named.zsh b/.zsh/fsh/highlighters/main/test-data/path-tilde-named.zsh deleted file mode 100644 index 335b3fd..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path-tilde-named.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -mkdir mydir -touch mydir/path-tilde-named.test -hash -d D=mydir - -BUFFER='ls ~D/path-tilde-named.test' - -expected_region_highlight=( - "1 2 command" # ls - "4 27 path" # ~D/path-tilde-named.test -) diff --git a/.zsh/fsh/highlighters/main/test-data/path.zsh b/.zsh/fsh/highlighters/main/test-data/path.zsh deleted file mode 100644 index d387eff..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -mkdir A -touch A/mu -BUFFER='ls A/mu' - -expected_region_highlight=( - "1 2 command" # ls - "4 7 path" # A/mu -) diff --git a/.zsh/fsh/highlighters/main/test-data/path_prefix.zsh b/.zsh/fsh/highlighters/main/test-data/path_prefix.zsh deleted file mode 100644 index 3303bfb..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path_prefix.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Assumes that '/bin/sh' exists and '/bin/s' does not exist. -# Related to path_prefix2.zsh - -BUFFER='ls /bin/s' - -expected_region_highlight=( - "1 2 command" # ls - "4 9 path_prefix" # /bin/s -) diff --git a/.zsh/fsh/highlighters/main/test-data/path_prefix2.zsh b/.zsh/fsh/highlighters/main/test-data/path_prefix2.zsh deleted file mode 100644 index 4f40f7e..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path_prefix2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Assumes that '/bin/sh' exists and '/bin/s' does not exist. -# Related to path_prefix.zsh - -BUFFER='ls /bin/s' -WIDGET=zle-line-finish - -expected_region_highlight=( - "1 2 command" # ls - "4 9 default" # /bin/s -) diff --git a/.zsh/fsh/highlighters/main/test-data/path_prefix3.zsh b/.zsh/fsh/highlighters/main/test-data/path_prefix3.zsh deleted file mode 100644 index 9f34f94..0000000 --- a/.zsh/fsh/highlighters/main/test-data/path_prefix3.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Assumes that '/bin/sh' exists and '/bin/s' does not exist. -# Related to path_prefix.zsh - -PREBUFFER=$'ls \\\n' -BUFFER='/bin/s' - -expected_region_highlight=( - '1 6 path_prefix' # /bin/s -) diff --git a/.zsh/fsh/highlighters/main/test-data/plain-file-in-command-position.zsh b/.zsh/fsh/highlighters/main/test-data/plain-file-in-command-position.zsh deleted file mode 100644 index 141ffac..0000000 --- a/.zsh/fsh/highlighters/main/test-data/plain-file-in-command-position.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch foo -chmod -x foo -BUFFER=$'./foo; ./foo' - -expected_region_highlight=( - '1 5 unknown-token' # ./foo (in middle) - '6 6 commandseparator' # ; - '8 12 unknown-token' # ./foo (at end) -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-killing1.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-killing1.zsh deleted file mode 100644 index 7598346..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-killing1.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -hash sudo=false -touch foo - -BUFFER='sudo -e ./foo' - -expected_region_highlight=( - '1 4 precommand' # sudo - '6 7 single-hyphen-option' # -e - '9 13 path' # ./foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-killing2.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-killing2.zsh deleted file mode 100644 index bc6fc86..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-killing2.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -hash sudo=false - -BUFFER='sudo -e /does/not/exist' - -expected_region_highlight=( - '1 4 precommand' # sudo - '6 7 single-hyphen-option' # -e - '9 23 default' # /does/not/exist -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-then-assignment.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-then-assignment.zsh deleted file mode 100644 index f0bb75f..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-then-assignment.zsh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'nice x=y ls' - -expected_region_highlight=( - '1 4 precommand' # nice - '6 8 unknown-token "issue #641.5"' # x=y - '10 11 default "issue #641.5 (fallout)"' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-type1.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-type1.zsh deleted file mode 100644 index 4ce817c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-type1.zsh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Test the behaviour of a builtin that exists as a command as well. -# The spaces in $BUFFER are to align precommand-type*.zsh test files. -BUFFER=$'test ; builtin test ; builtin command test ; nice test ' - -# Our expectations assumes that a 'test' external command exists (in addition -# to the 'test' builtin). Let's verify that, using the EQUALS option (which -# is on by default). If there's no 'test' command, the expansion will fail, -# diagnose a message on stdout, and the harness will detect a failure. -# -# This seems to work on all platforms, insofar as no one ever reported a bug -# about their system not having a 'test' binary in PATH. That said, if someone -# ever does see this test fail for this reason, we should explicitly create -# a 'test' executable in cwd and 'rehash'. -: =test - -expected_region_highlight=( - '1 4 builtin' # test - '7 7 commandseparator' # ; - - '9 15 precommand' # builtin - '17 20 builtin' # test - '23 23 commandseparator' # ; - - '25 31 precommand' # builtin - '33 39 precommand' # command - '41 44 command "issue #608"' # test - '47 47 commandseparator' # ; - - '49 52 precommand' # nice - '54 57 command "issue #608"' # test -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-type2.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-type2.zsh deleted file mode 100644 index bf75f4b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-type2.zsh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Test the behaviour of a builtin that does not exist as a command. -# The spaces in $BUFFER are to align precommand-type*.zsh test files. -BUFFER=$'zstyle; builtin zstyle; builtin command zstyle; nice zstyle' - -# Verify that no $^path/zstyle(N) binary exists. -if (disable zstyle; type zstyle >/dev/null); then - echo >&2 "precommand-type2: error: 'zstyle' exists not only as a builtin" -fi - -expected_region_highlight=( - '1 6 builtin' # zstyle - '7 7 commandseparator' # ; - - '9 15 precommand' # builtin - '17 22 builtin' # zstyle - '23 23 commandseparator' # ; - - '25 31 precommand' # builtin - '33 39 precommand' # command - '41 46 unknown-token "issue #608"' # zstyle - '47 47 commandseparator' # ; - - '49 52 precommand' # nice - '54 59 unknown-token "issue #608"' # zstyle -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-type3.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-type3.zsh deleted file mode 100644 index 7fc7e4c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-type3.zsh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Test an external command that does not exist as a builtin. -# The spaces in $BUFFER are to align precommand-type*.zsh test files. -BUFFER=$'ls ; builtin ls ; builtin command ls ; nice ls ' - -# Verify that the 'ls' command isn't shadowed. -if [[ $(type -w ls) != "ls: command" ]]; then - echo >&2 "precommand-type3: error: the 'ls' command is shadowed (or possibly missing altogether)" -fi - -expected_region_highlight=( - '1 2 command' # ls - '7 7 commandseparator' # ; - - '9 15 precommand' # builtin - '17 18 unknown-token "issue #608"' # ls - '23 23 commandseparator' # ; - - '25 31 precommand' # builtin - '33 39 precommand' # command - '41 42 command' # ls - '47 47 commandseparator' # ; - - '49 52 precommand' # nice - '54 55 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-uninstalled.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-uninstalled.zsh deleted file mode 100644 index 03c8a75..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-uninstalled.zsh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Simulate sudo not being installed. -# -# The 'hash' step is because, if sudo _really_ isn't installed, 'unhash sudo' -# would error out and break the test. -hash sudo=/usr/bin/env && unhash sudo - -local PATH - -BUFFER=$'sudo ls' - -expected_region_highlight=( - '1 4 unknown-token' # sudo - '6 7 default' # ls - not 'command', since sudo isn't installed -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand-unknown-option.zsh b/.zsh/fsh/highlighters/main/test-data/precommand-unknown-option.zsh deleted file mode 100644 index 6baf9ff..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand-unknown-option.zsh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -BUFFER='sudo -ux ls; sudo -x ls' - -expected_region_highlight=( - '1 4 precommand' # sudo - '6 8 single-hyphen-option' # -ux - '10 11 command' # ls - '12 12 commandseparator' # ; - '14 17 precommand' # sudo - '19 20 single-hyphen-option' # -x - '22 23 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand.zsh b/.zsh/fsh/highlighters/main/test-data/precommand.zsh deleted file mode 100644 index a03b331..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': command zzzzzz' - -expected_region_highlight=( - "1 1 builtin" # : - "3 9 default" # not precommand - "11 16 default" # not unknown-token (since 'zzzzzz' is not a command) -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand2.zsh b/.zsh/fsh/highlighters/main/test-data/precommand2.zsh deleted file mode 100644 index 75dceab..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand2.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='command -v ls' - -expected_region_highlight=( - "1 7 precommand" # command - "9 10 single-hyphen-option" # -v - "12 13 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand3.zsh b/.zsh/fsh/highlighters/main/test-data/precommand3.zsh deleted file mode 100644 index f8b0c78..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand3.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='nice -n10 ls; nice -n 10 ls' - -expected_region_highlight=( - "1 4 precommand" # nice - "6 9 single-hyphen-option" # -n10 - "11 12 command" # ls - "13 13 commandseparator" # ; - "15 18 precommand" # nice - "20 21 single-hyphen-option" # -n - "23 24 default" # 10 - "26 27 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/precommand4.zsh b/.zsh/fsh/highlighters/main/test-data/precommand4.zsh deleted file mode 100644 index b9e6119..0000000 --- a/.zsh/fsh/highlighters/main/test-data/precommand4.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -doas(){} -BUFFER=$'doas -nu phy1729 ls' - -expected_region_highlight=( - '1 4 precommand' # doas - '6 8 single-hyphen-option' # -nu - '10 16 default' # phy1729 - '18 19 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/prefix-redirection.zsh b/.zsh/fsh/highlighters/main/test-data/prefix-redirection.zsh deleted file mode 100644 index a0f0ed5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/prefix-redirection.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='>/tmp >/tmp command echo >/tmp foo' - -expected_region_highlight=( - "1 1 redirection" # > - "2 5 path" # /tmp - "7 7 redirection" # > - "8 11 path" # /tmp - "13 19 precommand" # command - "21 24 builtin" # echo - "26 26 redirection" # > - "27 30 path" # /tmp - "32 34 default" # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/process-substitution-after-redirection.zsh b/.zsh/fsh/highlighters/main/test-data/process-substitution-after-redirection.zsh deleted file mode 100644 index 2d58016..0000000 --- a/.zsh/fsh/highlighters/main/test-data/process-substitution-after-redirection.zsh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017, 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'< <(pwd) > >(nl)' - -expected_region_highlight=( - '1 1 redirection' # < - '3 8 default' # <(pwd) - '3 8 process-substitution' # <(pwd) - '3 4 process-substitution-delimiter' # <( - '5 7 builtin' # pwd - '8 8 process-substitution-delimiter' # ) - '10 10 redirection' # > - '12 16 default' # >(nl) - '12 16 process-substitution' # >(nl) - '12 13 process-substitution-delimiter' # >( - '14 15 command' # nl - '16 16 process-substitution-delimiter' # ) -) diff --git a/.zsh/fsh/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh b/.zsh/fsh/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh deleted file mode 100644 index f8dbd6b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': =(" foo ls' - -expected_region_highlight=( - '1 3 unknown-token' # ">" - not "redirection" - '5 7 default' # foo - '9 10 default' # ls - not "command" -) diff --git a/.zsh/fsh/highlighters/main/test-data/rc-quotes.zsh b/.zsh/fsh/highlighters/main/test-data/rc-quotes.zsh deleted file mode 100644 index 8cd427a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/rc-quotes.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt RC_QUOTES - -BUFFER=": 'foo''bar'baz" - -expected_region_highlight=( - "1 1 builtin" # : - "3 15 default" # 'foo''bar'baz - "3 12 single-quoted-argument" # 'foo''bar' - "7 8 rc-quote" # '' -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection-comment.zsh b/.zsh/fsh/highlighters/main/test-data/redirection-comment.zsh deleted file mode 100644 index a019100..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection-comment.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -setopt interactive_comments - -BUFFER=': <<#foo' - -expected_region_highlight=( - "1 1 builtin" # : - "3 4 redirection" # << - "5 8 comment" # #foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection-from-param.zsh b/.zsh/fsh/highlighters/main/test-data/redirection-from-param.zsh deleted file mode 100644 index 42ae638..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection-from-param.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -touch file -local fn=$PWD/file - -BUFFER=$'<$fn cat' - -expected_region_highlight=( - '1 1 redirection' # < - '2 4 path' # $fn - '6 8 command' # cat -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection-in-cmdsubst.zsh b/.zsh/fsh/highlighters/main/test-data/redirection-in-cmdsubst.zsh deleted file mode 100644 index ed5eaef..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection-in-cmdsubst.zsh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$': $( -x >> --yy' - -expected_region_highlight=( - '1 1 builtin' # : - '3 3 redirection' # > - '5 6 default' # -x - '8 9 redirection' # >> - '11 14 default' # --yy -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection-special-cases.zsh b/.zsh/fsh/highlighters/main/test-data/redirection-special-cases.zsh deleted file mode 100644 index 733cf6b..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection-special-cases.zsh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See xpandredir() in the zsh source. - -BUFFER=$'cat <&p; exec {myfd}>&-' - -expected_region_highlight=( - '1 3 command' # cat - '5 6 redirection' # <& - '7 7 redirection' # p - '8 8 commandseparator' # ; - '10 13 precommand' # exec - '15 20 named-fd' # {myfd} - '21 22 redirection' # >& - '23 23 redirection' # - -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection.zsh b/.zsh/fsh/highlighters/main/test-data/redirection.zsh deleted file mode 100644 index 6a25971..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Redirection before and after the command word are implemented differently; test both. -BUFFER='<<>&!bar' - -expected_region_highlight=( - "1 3 redirection" # <<< - "4 6 default" # foo - "8 11 builtin" # echo - "13 16 redirection" # >>&! - "17 19 default" # bar -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection2.zsh b/.zsh/fsh/highlighters/main/test-data/redirection2.zsh deleted file mode 100644 index d44c8e7..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection2.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='ls >(wc) | nl' - -expected_region_highlight=( - "1 2 command" # ls - "4 8 default" # >(wc) - "4 8 process-substitution" # >(wc) - "4 5 process-substitution-delimiter" # >( - "6 7 command" # wc - "8 8 process-substitution-delimiter" # ) - "10 10 commandseparator" # | - "12 13 command" # nl -) diff --git a/.zsh/fsh/highlighters/main/test-data/redirection3.zsh b/.zsh/fsh/highlighters/main/test-data/redirection3.zsh deleted file mode 100644 index bf062cf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/redirection3.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=': >>>; : <>\<<<> - "5 5 unknown-token" # > - "6 6 commandseparator" # ; - "8 8 builtin" # : - "10 11 redirection" # <> - "12 13 default" # \< - "14 16 redirection" # <<< - "17 19 default" # EOF -) diff --git a/.zsh/fsh/highlighters/main/test-data/reserved-word.zsh b/.zsh/fsh/highlighters/main/test-data/reserved-word.zsh deleted file mode 100644 index aca3796..0000000 --- a/.zsh/fsh/highlighters/main/test-data/reserved-word.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='repeat "1" do done' - -expected_region_highlight=( - "1 6 reserved-word" # repeat - "8 10 default" # "1" - "8 10 double-quoted-argument" # "1" - "12 13 reserved-word" # do - "15 18 reserved-word" # done -) diff --git a/.zsh/fsh/highlighters/main/test-data/simple-command.zsh b/.zsh/fsh/highlighters/main/test-data/simple-command.zsh deleted file mode 100644 index 8bb41fd..0000000 --- a/.zsh/fsh/highlighters/main/test-data/simple-command.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='ls' - -expected_region_highlight=( - "1 2 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/simple-redirection.zsh b/.zsh/fsh/highlighters/main/test-data/simple-redirection.zsh deleted file mode 100644 index e8c25e5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/simple-redirection.zsh +++ /dev/null @@ -1,38 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='ps aux | grep java' - -expected_region_highlight=( - "1 2 command" # ps - "4 6 default" # aux - "8 8 commandseparator" # | - "10 13 command" # grep - "15 18 default" # java -) diff --git a/.zsh/fsh/highlighters/main/test-data/subshell.zsh b/.zsh/fsh/highlighters/main/test-data/subshell.zsh deleted file mode 100644 index c068013..0000000 --- a/.zsh/fsh/highlighters/main/test-data/subshell.zsh +++ /dev/null @@ -1,51 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='tar cf - * | (cd /target; tar xfp -) | { cat }' - -expected_region_highlight=( - "1 3 command" # tar - "5 6 default" # cf - "8 8 single-hyphen-option" # - - "10 10 default" # * - "10 10 globbing" # * - "12 12 commandseparator" # | - "14 14 reserved-word" # ( - "15 16 builtin" # cd - "18 24 default" # /target - "25 25 commandseparator" # ; - "27 29 command" # tar - "31 33 default" # xfp - "35 35 single-hyphen-option" # - - "36 36 reserved-word" # ) - "38 38 commandseparator" # | - "40 40 reserved-word" # { - "42 44 command" # cat - "46 46 reserved-word" # } -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-command.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-command.zsh deleted file mode 100644 index 941349a..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-command.zsh +++ /dev/null @@ -1,54 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -# Tests three codepaths: -# * -i (no argument) -# * -C3 (pasted argument) -# * -u otheruser (non-pasted argument) -BUFFER='sudo -C3 -u otheruser -i ls /; sudo ; sudo -u ; sudo notacommand' - -expected_region_highlight=( - "1 4 precommand" # sudo - "6 8 single-hyphen-option" # -C3 - "10 11 single-hyphen-option" # -u - "13 21 default" # otheruser - "23 24 single-hyphen-option" # -i - "26 27 command" # ls - "29 29 path" # / - "30 30 commandseparator" # ; - "32 35 precommand" # sudo - "37 37 unknown-token" # ;, error because empty command - "39 42 precommand" # sudo - "44 45 single-hyphen-option" # -u - "47 47 unknown-token" # ;, error because incomplete command - "49 52 precommand" # sudo - "54 64 unknown-token" # notacommand - doesn't falls back to "not a command word" codepath -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-comment.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-comment.zsh deleted file mode 100644 index 74cd905..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-comment.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -setopt interactive_comments -BUFFER='sudo -u # comment' - -expected_region_highlight=( - "1 4 precommand" # sudo - "6 7 single-hyphen-option" # -u - "9 17 unknown-token" # "# comment" - error because argument missed -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-longopt.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-longopt.zsh deleted file mode 100644 index ef768bf..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-longopt.zsh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -hash sudo='false' -BUFFER='sudo --askpass ls' - -expected_region_highlight=( - '1 4 precommand' # sudo - '6 14 double-hyphen-option' # --askpass - '16 17 command' # ls (we don't know whether --askpass takes an argument) -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-redirection.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-redirection.zsh deleted file mode 100644 index c675d7d..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-redirection.zsh +++ /dev/null @@ -1,48 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -BUFFER='sudo -u >/tmp otheruser ls; sudo ls; sudo -i ls' - -expected_region_highlight=( - "1 4 precommand" # sudo - "6 7 single-hyphen-option" # -u - "9 9 redirection" # > - "10 13 path" # /tmp - "15 23 default" # otheruser - "25 26 command" # ls - "27 27 commandseparator" # ; - "29 32 precommand" # sudo - "34 35 command" # ls - "36 36 commandseparator" # ; - "38 41 precommand" # sudo - "43 44 single-hyphen-option" # -i - "46 47 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-redirection2.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-redirection2.zsh deleted file mode 100644 index 23ada53..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-redirection2.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -BUFFER='sudo >/tmp -u otheruser ls' - -expected_region_highlight=( - "1 4 precommand" # sudo - "6 6 redirection" # > - "7 10 path" # /tmp - "12 13 single-hyphen-option" # -u - "15 23 default" # otheruser - "25 26 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/sudo-redirection3.zsh b/.zsh/fsh/highlighters/main/test-data/sudo-redirection3.zsh deleted file mode 100644 index 80e55b5..0000000 --- a/.zsh/fsh/highlighters/main/test-data/sudo-redirection3.zsh +++ /dev/null @@ -1,41 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -sudo(){} - -BUFFER='sudo 2>./. -u otheruser ls' - -expected_region_highlight=( - "1 4 precommand" # sudo - "6 7 redirection" # 2> - "8 10 path" # ./. # a 3-character path, for alignment with sudo-redirection2.zsh - "12 13 single-hyphen-option" # -u - "15 23 default" # otheruser - "25 26 command" # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/tilde-command-word.zsh b/.zsh/fsh/highlighters/main/test-data/tilde-command-word.zsh deleted file mode 100644 index 67c996c..0000000 --- a/.zsh/fsh/highlighters/main/test-data/tilde-command-word.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -hash -d D=/usr/bin - -BUFFER='~D/env foo' - -expected_region_highlight=( - "1 6 command" # ~D/env [= /usr/bin/env - "8 10 default" # foo -) diff --git a/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect1.zsh b/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect1.zsh deleted file mode 100644 index fb398ed..0000000 --- a/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect1.zsh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'time ls; nocorrect ls' - -expected_region_highlight=( - '1 4 reserved-word' # time - '6 7 command' # ls - '8 8 commandseparator' # ; - '10 18 reserved-word' # nocorrect - '20 21 command' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect2.zsh b/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect2.zsh deleted file mode 100644 index 5549ee9..0000000 --- a/.zsh/fsh/highlighters/main/test-data/time-and-nocorrect2.zsh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2019 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER=$'time ls; nocorrect ls' -alias time=':' nocorrect=':' - -expected_region_highlight=( - '1 4 alias' # time - '6 7 default' # ls - '8 8 commandseparator' # ; - '10 18 alias' # nocorrect - '20 21 default' # ls -) diff --git a/.zsh/fsh/highlighters/main/test-data/unbackslash.zsh b/.zsh/fsh/highlighters/main/test-data/unbackslash.zsh deleted file mode 100644 index c8dfbd4..0000000 --- a/.zsh/fsh/highlighters/main/test-data/unbackslash.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='\sh' - -expected_region_highlight=( - "1 3 command" # \sh (runs 'sh', bypassing aliases) -) diff --git a/.zsh/fsh/highlighters/main/test-data/unknown-command.zsh b/.zsh/fsh/highlighters/main/test-data/unknown-command.zsh deleted file mode 100644 index e71faec..0000000 --- a/.zsh/fsh/highlighters/main/test-data/unknown-command.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='azertyuiop' - -expected_region_highlight=( - "1 10 unknown-token" # azertyuiop -) diff --git a/.zsh/fsh/highlighters/main/test-data/vanilla-newline.zsh b/.zsh/fsh/highlighters/main/test-data/vanilla-newline.zsh deleted file mode 100644 index bd60ad4..0000000 --- a/.zsh/fsh/highlighters/main/test-data/vanilla-newline.zsh +++ /dev/null @@ -1,39 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -PREBUFFER=$'echo foo; echo bar\n\n\n' -BUFFER=' echo baz; echo qux' - -expected_region_highlight=( - "2 5 builtin" # echo - "7 9 default" # baz - "10 10 commandseparator" # semicolon - "12 15 builtin" # echo - "17 19 default" # qux -) diff --git a/.zsh/fsh/highlighters/main/test-data/vi-linewise-mode.zsh b/.zsh/fsh/highlighters/main/test-data/vi-linewise-mode.zsh deleted file mode 100644 index 7003c49..0000000 --- a/.zsh/fsh/highlighters/main/test-data/vi-linewise-mode.zsh +++ /dev/null @@ -1,43 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# See issue #267 for the magic numbers -BUFFER=$'foo foo\nbar bar' -REGION_ACTIVE=2 -CURSOR=4 -MARK=12 - -expected_region_highlight=( - "1 3 unknown-token" # foo - "5 7 default" # foo - "8 8 commandseparator" # \n - "9 11 unknown-token" # bar - "13 15 default" # bar - "1 15 standout" # foo foo\nbar bar -) diff --git a/.zsh/fsh/highlighters/pattern/README.md b/.zsh/fsh/highlighters/pattern/README.md deleted file mode 120000 index 5ff00e6..0000000 --- a/.zsh/fsh/highlighters/pattern/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/pattern.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/pattern/pattern-highlighter.zsh b/.zsh/fsh/highlighters/pattern/pattern-highlighter.zsh deleted file mode 100644 index e0422d0..0000000 --- a/.zsh/fsh/highlighters/pattern/pattern-highlighter.zsh +++ /dev/null @@ -1,60 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# List of keyword and color pairs. -typeset -gA ZSH_HIGHLIGHT_PATTERNS - -# Whether the pattern highlighter should be called or not. -_zsh_highlight_highlighter_pattern_predicate() -{ - _zsh_highlight_buffer_modified -} - -# Pattern syntax highlighting function. -_zsh_highlight_highlighter_pattern_paint() -{ - setopt localoptions extendedglob - local pattern - for pattern in ${(k)ZSH_HIGHLIGHT_PATTERNS}; do - _zsh_highlight_pattern_highlighter_loop "$BUFFER" "$pattern" - done -} - -_zsh_highlight_pattern_highlighter_loop() -{ - # This does *not* do its job syntactically, sorry. - local buf="$1" pat="$2" - local -a match mbegin mend - local MATCH; integer MBEGIN MEND - if [[ "$buf" == (#b)(*)(${~pat})* ]]; then - region_highlight+=("$((mbegin[2] - 1)) $mend[2] $ZSH_HIGHLIGHT_PATTERNS[$pat], memo=zsh-syntax-highlighting") - "$0" "$match[1]" "$pat"; return $? - fi -} diff --git a/.zsh/fsh/highlighters/pattern/test-data/rm-rf.zsh b/.zsh/fsh/highlighters/pattern/test-data/rm-rf.zsh deleted file mode 100644 index 2f76929..0000000 --- a/.zsh/fsh/highlighters/pattern/test-data/rm-rf.zsh +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') - -BUFFER='rm -rf /' - -expected_region_highlight=( - "1 8 fg=white,bold,bg=red" # rm -rf / -) diff --git a/.zsh/fsh/highlighters/regexp/README.md b/.zsh/fsh/highlighters/regexp/README.md deleted file mode 120000 index 9f2522d..0000000 --- a/.zsh/fsh/highlighters/regexp/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/regexp.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/regexp/regexp-highlighter.zsh b/.zsh/fsh/highlighters/regexp/regexp-highlighter.zsh deleted file mode 100644 index 0d43aac..0000000 --- a/.zsh/fsh/highlighters/regexp/regexp-highlighter.zsh +++ /dev/null @@ -1,62 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# List of keyword and color pairs. -typeset -gA ZSH_HIGHLIGHT_REGEXP - -# Whether the pattern highlighter should be called or not. -_zsh_highlight_highlighter_regexp_predicate() -{ - _zsh_highlight_buffer_modified -} - -# Pattern syntax highlighting function. -_zsh_highlight_highlighter_regexp_paint() -{ - setopt localoptions extendedglob - local pattern - for pattern in ${(k)ZSH_HIGHLIGHT_REGEXP}; do - _zsh_highlight_regexp_highlighter_loop "$BUFFER" "$pattern" - done -} - -_zsh_highlight_regexp_highlighter_loop() -{ - local buf="$1" pat="$2" - integer OFFSET=0 - local MATCH; integer MBEGIN MEND - local -a match mbegin mend - while true; do - [[ "$buf" =~ "$pat" ]] || return; - region_highlight+=("$((MBEGIN - 1 + OFFSET)) $((MEND + OFFSET)) $ZSH_HIGHLIGHT_REGEXP[$pat], memo=zsh-syntax-highlighting") - buf="$buf[$(($MEND+1)),-1]" - OFFSET=$((MEND+OFFSET)); - done -} diff --git a/.zsh/fsh/highlighters/regexp/test-data/complex.zsh b/.zsh/fsh/highlighters/regexp/test-data/complex.zsh deleted file mode 100644 index 4e0089b..0000000 --- a/.zsh/fsh/highlighters/regexp/test-data/complex.zsh +++ /dev/null @@ -1,37 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -ZSH_HIGHLIGHT_REGEXP+=('[0-9\+\-]+' 'fg=white,bold,bg=red') - -BUFFER='echo 1+9-3 7+2' - -expected_region_highlight=( - "6 10 fg=white,bold,bg=red" - "12 14 fg=white,bold,bg=red" -) diff --git a/.zsh/fsh/highlighters/regexp/test-data/subexpression.zsh b/.zsh/fsh/highlighters/regexp/test-data/subexpression.zsh deleted file mode 100644 index 308cb41..0000000 --- a/.zsh/fsh/highlighters/regexp/test-data/subexpression.zsh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2018 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -BUFFER='ls foo' -ZSH_HIGHLIGHT_REGEXP=('(^| )(ls|cd)($| )' 'fg=green') - -expected_region_highlight=( - '1 3 fg=green' # "ls " -) diff --git a/.zsh/fsh/highlighters/regexp/test-data/word-boundary.zsh b/.zsh/fsh/highlighters/regexp/test-data/word-boundary.zsh deleted file mode 100644 index 1f4f666..0000000 --- a/.zsh/fsh/highlighters/regexp/test-data/word-boundary.zsh +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -if zmodload zsh/pcre 2>/dev/null; then - setopt RE_MATCH_PCRE - - ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' 'fg=white,bold,bg=red') - - BUFFER='sudo ls' - - expected_region_highlight=( - "1 4 fg=white,bold,bg=red" - ) -else - skip_test='Test requires zsh/pcre' -fi diff --git a/.zsh/fsh/highlighters/root/README.md b/.zsh/fsh/highlighters/root/README.md deleted file mode 120000 index ca6799d..0000000 --- a/.zsh/fsh/highlighters/root/README.md +++ /dev/null @@ -1 +0,0 @@ -../../docs/highlighters/root.md \ No newline at end of file diff --git a/.zsh/fsh/highlighters/root/root-highlighter.zsh b/.zsh/fsh/highlighters/root/root-highlighter.zsh deleted file mode 100644 index 3718c44..0000000 --- a/.zsh/fsh/highlighters/root/root-highlighter.zsh +++ /dev/null @@ -1,44 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Define default styles. -: ${ZSH_HIGHLIGHT_STYLES[root]:=standout} - -# Whether the root highlighter should be called or not. -_zsh_highlight_highlighter_root_predicate() -{ - _zsh_highlight_buffer_modified -} - -# root highlighting function. -_zsh_highlight_highlighter_root_paint() -{ - if (( EUID == 0 )) { _zsh_highlight_add_highlight 0 $#BUFFER root } -} diff --git a/.zsh/fsh/images/203654.gif b/.zsh/fsh/images/203654.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4bad3684f03ea609e5eb3934810822bae2355ed GIT binary patch literal 168066 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 J3;-bZKLCYS{c`{S literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/after1-smaller.png b/.zsh/fsh/images/after1-smaller.png deleted file mode 100644 index 768294c3b3cdee1b8bb60849faad86aaa05b4ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2517 zcmV;`2`cu9P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 CzYNL% diff --git a/.zsh/fsh/images/after2-smaller.png b/.zsh/fsh/images/after2-smaller.png deleted file mode 100644 index 8b5b1f8f21d923c80a7d4c787e66774f4d9a170f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4386 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 YHT?f46ttxI-x2`2ng$w8YKZv%0pxfk^#A|> diff --git a/.zsh/fsh/images/after2.png b/.zsh/fsh/images/after2.png deleted file mode 100644 index ddcbfad70bbb9e76d1a259408a4ac34870d922e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10228 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 Km#dHghW-~yIMN{i diff --git a/.zsh/fsh/images/after3-smaller.png b/.zsh/fsh/images/after3-smaller.png deleted file mode 100644 index d6aaa7bdf30aea607d98d8fa23f715534cb3bea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1673 zcmV;426p+0P)00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rb3KRf4I9uyJ?EnA;jY&j7R9M69SZhpEXBd7; zOIxrtT$&Z6(S%93XoD9dlMrUOx)7#@p1%fzG5g^{Ldmp!J@0qk^PKaY?^FVS z*u-aph);b2n+U|FA)gs!%Rdql5->3_f%*CQbr+3}1WI-Se+&ZeMJ|X%MMWqtF9!fz zxpD=MA3y%o*J#~{jEKNMNeSkBKDef*(J(lOj#saO=0*TOO-&8%+_?jr&4$FpL;%2r z3m4Gb+$?%>?G~W15J*x3%1Cj?o;Yy=EiEm0^5h9RIyzvnSdfsA@ULDxnM{Uf&z_;W zx;h}9mzM{t)r!f zjYcDNIvw3^H#Hg!vGmdpiAovR{0%5%gnrD&?C$QS!C>%@wOVahb=JePXU}qRagk@v zobkuv(`?0f^SoSiD{tS9^T!l)oS5#x%}ht@$mqC`}XZ9EiHv!uMc|s zYPv$9fKsVkL4`sQke88>f%5Wl+`D%#Anx&auxHO6Jbd^NUauEzZEfi7?L|RBf#@E` zXJ-KbU;Jb4kHN~yN{)<-&}y~v(4j+o@!|y)3WX@=B@(c$4BVS2{;oWI`ZW9c`na&L zK&R8mzP>)5KY#wC+7g;fCXSAd^4hg)bh%t?Z*QkuE)PlX=;)x=>s`Ul&QAXvGMS7| zpFZV*0|$8X=FNa7Bp7>odRSIgCc4+0_;^wf_;Y6FYB?X82EYdo9#9Yj(Gw-9!QTy_ zR3hGx=;&x_G#ZYLjj^z>kQ$AKDwWEwS5#E+<;$0hjg2J$s?}=R?RFZC#*p+-Xfztx z(9l2tYZ`L=_;ETM4!_}IsFKMzdGsg;4ZH9ibVOH0|=+37b&4E0*DrF4Dk zx7+PzR#w)E_@hUUc<$V}fLK*k6}!5+Leke_dU`s0dU~i-D%Uhb5Co2mjZv@Hhu!B7 zsi~wOkb*#iP8Xp0x4kl%42_MAIC=6UE?>Tk+}vE;xN!qUqjBwp5rEGJNJ7dK53N=U zkH-@bbGzM$i;D|MH=E5!Nl95z*XeYks;UZgb#+jwRJeQhE&xEU*JJnY-PpEmTflDX z*s)`1YHC7JQ4xB3d&BBQCXwL#loX83&f=&3e*8Hx5vVW!sI07n&1Qo_p@2@OLt0uI z>~=fa+S=fBI@g?N%nQUt16$<4)cQYV0${h>k)555*49>kEHg6`4u>No{p!`L*t&J= zin{OKy#uhc?T?9x@yAUj6KpmcEEbDDcJSaqw6?Y)KR+J>0|R0AlB`le7Zrs|Lqqs= zXeek7)oL||hljai#}1a1l<@lX>jc2(&!00nIXUDH+qe2ly|%WN z7cX8U07|7&S}Yc}x3{ytzFyR1#a}LcheS%lGsNX`asU4PLACt+e0FtpacXLc{r&wb zHXdu~VtDJ;Eml`o`^RNvWn5fbNU^A;8i_{v|UL3nX66&EYqf3+^ChEaz^xA)5#v ze*;>i*xTOCf6V{@03~!qSaf7zbY(hYa%Ew3WdJfTF*YqRFfB4LR4_0)H90ynI4dwP zIxsMa@nFIL001R)MObuXVRU6WZEs|0W_bWIFfleQF)%GMFjO!wIyE^uGdL?SFgh?W T_^jA|00000NkvXXu0mjf;xh}@ diff --git a/.zsh/fsh/images/after3.png b/.zsh/fsh/images/after3.png deleted file mode 100644 index 7a0af8874bfd4084091c495ff1bf9aede523b11a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3427 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 diff --git a/.zsh/fsh/images/after4-smaller.png b/.zsh/fsh/images/after4-smaller.png deleted file mode 100644 index fc946cf038822083111f753f7bdb814ba8a22304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3224 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 KMNUMnLSTZgCmW#v diff --git a/.zsh/fsh/images/array-assign.png b/.zsh/fsh/images/array-assign.png new file mode 100644 index 0000000000000000000000000000000000000000..9d35e90102a014df0c5ad488b6b59f85d3170b98 GIT binary patch literal 2022 zcmZWq3p~`>7yo%QG~UdP$13w5YAMWkGu{oxm@&yxNX*2T24fhH8AVZ&*ZQ+rc~|SL zP4Y-WMni@uqC68}XEd#LBac*eRR8Mp`QOjy-gE9b=X=gQ=X~zHscr;}3|I{e0DuhE z*}+{%>xC08DJoo}G9hsQAQDGKqusD*G|Y`b52A*W0YE!DfJoej)z#*bNJJucV80HS z!E{ea$#5rjaM%NE4y=pV4J*m>^_@|XpW!4Z#kJmNOa6`!ob7j6ejhtr(G>R)YI-A| zad;2v_S-}erb}>yp_rJaL{@Q;dr^^8AP*Qv_3m)oW49^|JKEe<26Wko1g1koc1Z?4 z7r8n7pI36Q7{$DSF44nEiu2NeIAB~9D}M`=QY=e4nlRR@nyO=WOMo{58+ml=t@!r1%#Fg^H7w%?*%s)0e-Hdl z@dapw*gpSv`Ft+cC#kSnHef5n*UH;~ovA@p03aTZb+GqfP5hN_A2Q_x={eH+yi{UW z9JgEYB`!aGCrb5@_8svZ;C+rWNbz~LJX|`U3JlkExL{Frr4eih{lVVj7ukLAQ&RJ8 zWAu^yf0le&!(vQ)dLHauwj8@x8vFFr@)`QH^SML^c(${aV(M2ij!vfkHoK_2RQd+5 z+U^Ny89QbYQJ(SfQ1XR)O0FrKK{L-zYR%G%h$1Zm)mEr{zNC5*T5+iQkcypB%7^C{ z`Ui$I+*OV-xV!?EwkfW;y|ExXSgRhzmJPPq|L9E(=}103x>&Gx3Q z!DEb%Mshij6jz33MG9(961J4#72ztRDcALK z>P|$MNqn$&%ngja$HB0ldzM_JOyf{v#k%Y0TsZDpfxWY2s#Gq}#UCYD^D@sgZ#?Wl zY!&+vY(LtNZHE>Wj_f#TRP5*L&zv-i1_66(>A4s5tYrKigG&}c3On)FIegHAtUc0+ z%fGwmk)Og(-$LX173C+cFCB~RD_uT8sZR)1zETez=b8MZqrHc2AsA!6cyOA+m;MD4dKoSX-K@e4b|ZM`#=?k$|$+ z5L6Zp7Bkb@fT>hnQ?Ck>&fN_&sF!T;qN8A!DD25rDBKfg*1#`XvV$7A!UF1k0MYOT z;_ka=t{=wOcDK(Sa z<*GhsCyg6>Ra&^{uu3yY=#BTDYV{UINT=dIMThJ0=bF8fWj++0*KFzEP9o*k+7ImWK=g&Cq+%@6vtb?@m0WvJE@C zA`5v`GSod2LR4AV02&XTxOG{%`z@uCJze9Xqdd7AyDGX$`jF1NcskOhAt&SJ&L#LS s4{bLSX=_E=9E#Yt`!9SAer;c{^*N8RoHxo#+x`}?js%C=1H`lc0@kZ=fdBvi literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/assign.png b/.zsh/fsh/images/assign.png new file mode 100644 index 0000000000000000000000000000000000000000..41fed43099c2fad0fb24244f33ff69b75ebbd5f3 GIT binary patch literal 15333 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 diff --git a/.zsh/fsh/images/before1.png b/.zsh/fsh/images/before1.png deleted file mode 100644 index 80c6f54ff5941aad6244aa9f3be3cb4d4d0311ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2636 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 P00000NkvXXu0mjfgzBir diff --git a/.zsh/fsh/images/before2.png b/.zsh/fsh/images/before2.png deleted file mode 100644 index 48cfc327a65b527fd73a8eaf144298e753e64357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2614 zcmZ`*Sv(Ys79V@oFr*ZdjIFVZWyDy=GRPWJvfX6gWf0jT4Ve#_<^iJ>9e z43a*S>{0e5`*!F1zIz|;!#xk@{LeZ6|9LpS^Kg=_ER480ggF2J0Jn*;fi(cY;6ca8 zGjs>|ntj)p9+*85<_G|wHjVS>E(<-s>}qUn4gf?*0swK30DuE}Defl#5DEnV7M%eA zI355Hy7&Cu4NZE3(Z$rr0C0*)qmtr?4Bm8+@uYY$Is?p4jl#{x6!{go5#jQ zC^D`8ie*ZF;c4@3fTj>RIHT?tdRk)MMghZmsl<)>uAmmpvk<`z>xgE%j)P_c`*)*L zY^z;Tml-^P)zgNmf+_q8XQS4W=2e{4O#XQM=<~6bD`NL|>spXTV6H+>%vIPP=_|Kg zqRDE=dU=nV4<|f9m3$FTx9T`HgkbO_e%U zPDo`uHyXEjM*CF3;KG^V#~20Pr2qvs6o|02cP7ejQVDAt*?jHLe&N@+mvOw23K>MgTLv=1gyC9K29*{|YuxU%fvoN)y>&@9t9Z;OSRd zs&UvZ5wk1~bbyUjIUhkBNX1$u3!gP<)84r<2J zvpfUjO)Q!9FkmG-V?x1yZX-E$UOYb!7GRD=c;F#?jIa5#!KN=Z2$vp$J)MF>q>t!(UD}q2TyBbsk#e zm;CdJjt$yuBY+P>$nJR;pgYw`FJ)iZas%P-~Z7q<@=AH^+& z;WYPuwMkEG!scX1(9iMn5D^ti=R2~#(-II_&Mya!@lR5*$XE%&j~#T3qi&dR%5Zs= z>je{}-@=#kh2dt3O#`4DIOJh)H1p2m0xjOA^>mns4s-V+ALgz^KTL$8tX3gq#F++ZzJr zci%pi>bBW!N+n+1k=e7q?z?SUWEY^Y(8V&EXY$7WyCy!3Z*G$qrnZj7&Yv~Fm@fxP z1|-4u_pE?4GA9p@s1_>F$e}GTTh??U*P16=UStdEYvc!b_Nu2SeIC{C*x4v zDP(P5LB2x2Ky@AY^f*gAgGNQ)1Qb3}tFI3iht_8x&-02AA5@$_XSBr^CG)4-bfzT1 z-Skx<6+X=(rK0>z{Z>eE6523WQ@PU4F@yIJ!e6R}$ltysgq7d|{~>&mU_*k=y^5Ei{*tCPp+ng<8YG`=Q1HR_a2?>to?_*w}w@breJv%rh!bqFs*Boc! zp-SYlniQ_`GdK@Y3R!8*wIStJI3Z`cFnUa&Y~@}3dQ;|~i))HS(qH@bZx|LfwHJus z6}h%jKSWRl;?*$m30~;it-W6P%t65R5|3ufEnv-W@mFfe^9vi~m{5}L57x(I@K98e zX7b>nap!fF-5ag$kQ2G$h69HyTrN#5Kpmga1h)WLgP?k<-om0t8E=X8X1Qg}w7}S! z=C%V1As5)V%^S9ok>zT4jlUuw%tDo8&i5 zmVfy6<^r{$2JLIDk3Sc?ur+S<0iHhh*FB@4eC{n5BrjB>LC<&>4qga0)(*D)MEcK| zoj(E71VEyDZmRZr0$x0?+beY@)_``*eXhcybDLJE>qrj_G1QQCadoZ zRI!9z`iN8b)QX1~Gg%;aLFa4}4schakxYrW7b)_#!tmW|!{gba!>41c%Rr8~9g8Dr zy_}TNG1JL9hve9HRf!Zf1*S^di*ZVI(Ss5VPZM<=$}JvxNbX%E^|Pvc^l~11z~Sge zk?QFIk-o%^BetY3E*_ROK$rM~N;6*@gg~g^JFuIu`AaTA9`_bbB32|wiAv8+Oaoc~_dlRD@4N3wDbdwyp@xsP=3 zAo^wdsR`^;EjVPL_`nn-abTfrd)-|sk)q-L=ZD$g+OXFllB!C?8q!hy&4l5#!Rqb` zxlu)%(w<2>3}lJ(=}Lax_(XC+q+m7C1orQsq%j;Hm&+zsQf!|*^?d5u`h z6U6Mx3?QZyN=03;#Uyd&^x3~Kh)=^RWs<p13B^0V4`IAyKHbDbGkBWMy?Uz8)*oJLm#{iJ^r-m7a6_ FzX1UJ>=OV0 diff --git a/.zsh/fsh/images/before3-smaller.png b/.zsh/fsh/images/before3-smaller.png deleted file mode 100644 index e525c6d4b1478af025a32e29bed9c3883d5e9d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmeAS@N?(olHy`uVBq!ia0vp^DL^d50VEhYKBEr|n)+LObW;}}jw8T=@z3!3ZQ;|NMvF0Gx z^DFcB>Ycn`A{ZI>^PG~SO5UTlCsw!%Rh&t-3}jJx+gEFo)+&&4ciaDkoKw#JnYMO+ z%(IysljP>j{;H8Shc_`n;P~?wUG}OxJcsz_R9?F0t<;_VzVYX)tp~0gVqJQosQ34b zfHM_IYzv?6DV>;6#wU=#zG;hJK6BI|1%@N-NfS(??3y-Cl9wyqakx+A=$A9xk*VjV z-Y;Ko!Vr7;Ys%Hdra1+_E{F?QF!8KeyiD3_L6`myrR=S((T5J4*q|;F>Gjy$YfW+I zo&v##i3uJ%^iLe9-YesG*s+qG`OKspw>3IFesSB+d0X2e7foILqE4@``1F!AVpyZz5W%xlh! zJ&hZsq9tdDug!GkI~gsb;bvpR7VM|KKaSUR(ZmC8329&cerD#_HKFzEeuD=rI_l31 zi~^V|?2jmG7Ur_rUsQX@)H5-1d-O-m2k#d)sqW1c^bwiu1WYA)XEw|$)-41k2L{y= z*NBpo#FA92(^b diff --git a/.zsh/fsh/images/before3.png b/.zsh/fsh/images/before3.png deleted file mode 100644 index 40c360151a09b90ea2b449b4e8f07c9a16d5837d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1461 zcmV;m1xosfP)9s1m00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rb3KRf4I9uyJ?EnA-y-7qtR9M69SA9%XWf*@C_g=o# z8-%F?yxI7p+uUpoTvLjHS8T%ON4j!W1~e9sk((Jf39&3)D+X;fQi=gf$y!4%t%Q_< z25UoQt-35EM2QiWeBIbV;Qo5g{o>wp&ig{gg01oUEGU;ztQ z!2cEj5Aa&=O|q<<=LDmYSInl{`pbiNF&mRFgQ9i)9HeW=%6Kv*LK)W;(+rLVP)leK zUtrRO1C!{muv(u7+DnUVnAo5>zfEF~#|+x@^^M+h**f)(i=`=Zlq)7R2Q9h3Ae~xU z&>6_oaUA$~5vz68Byt5hC-09(Yt>=Aj()cp<6K?3z9!Y4fqVDnyf=UgdRhGH-rlghX_sd4n-#-zb`N%VxAb=49~|Ue~O^g=CC)gsdB^3znX76Ubl_KEQ|m0mJP-Bq8Gl;{f7VETIvX zf;efk;>A1DVeGk;KfSfw)vp3oY{q^xD3VAZ+t5Oep_0k60Bd-8v?1HiUz$-`UKpqD zhlcqe)H}aVr+I~Vkc}(sA@{j=^E8rRKQAKDB#yBU>M1Ie1zk-|%^=$7Z%vFl^6HrL zuztBh%`bxw%3VD+;tN43qzH9vA&1Z^52e~1KW`@0IKm_a|Hav@`suV>a~^O8j+48# zmrUT=G8O-=ejm6Fp0Q^*nka+_&773TL42nS8VHF+-(n`|VIYjzD45OWpHM`9%^~g~ z#*?Mz+CkK+`AU@GIieKuIL0`C)VtBCnoT3GLS*9>;i3&$UOQqGZ@8>n=gE@$N^C@f zpcJxp7za5+MvNg|CAmIWepD29=%HaGk@)z>ZAgsKCPx06&uuB%p!8sE4(eGWa z8B{69Q9pYjXVL62t8h{2CuI2`k&r~#3kxVdhrOU6!QFGspZGM8KW2Cf`Yt5;$BYA$ zX8jd>--QZQPToJ+TBp(NF|9bO^yTIEWnaI@)p7LzD)sy!$r)4!%VWpzE=fnF5Yma& zYMkvDH*jC-E93|qo{!5;lqmh3Z~Nd0S`zbJsD-_#$Th<&`%%F?9~9A3j(g-WlQ^`L zlp~dpchqZ_2}t0+)mKOyaKLM&D18>Pyk|t;gnItOQEbLJB)mqQr1nM+zkoZnKI^QBBIB#;-4u@!eL-5x5*5HH?9eMX1s93<<;BTO> z!NfU3DwY5M03~!qSaf7zbY(hYa%Ew3WdJfTF*YqRFfB4LR4_0)H90ynH7hVMIxsNk zCIJEf001R)MObuXVRU6WZEs|0W_bWIFfleQF)%GMFjO!wIyE^uGc_wPFgh?WnR~gu P00000NkvXXu0mjfgcO|U diff --git a/.zsh/fsh/images/before4-smaller.png b/.zsh/fsh/images/before4-smaller.png deleted file mode 100644 index 2dbd0588b767e802d3ff640de6319e5fdca4de24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2987 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/cmdsubst.png b/.zsh/fsh/images/cmdsubst.png new file mode 100644 index 0000000000000000000000000000000000000000..66e564163e2bc2ada226b2d16902012d44f3dc38 GIT binary patch literal 8086 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/cplx_cond.png b/.zsh/fsh/images/cplx_cond.png new file mode 100644 index 0000000000000000000000000000000000000000..2296cbb3eeb83f70779e9c4d99ec3373a95fd74f GIT binary patch literal 3533 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 Q&p1*+M&(15lwrXC0gn8Z{{R30 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/execfd.png b/.zsh/fsh/images/execfd.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a1d658c888f2df241c158bb61420fa959e9271 GIT binary patch literal 2354 zcmV-23C;G2P)4Tx04R}TU|=dqEGWofVPIg$%_}Jia(7aQh>TKTzr(=Iz{4QKV8tMwm|R@o z7!csYfD?SX#=r=oFYAKLO7r}A)26k2{uVZ`nQ~SoI=Je z3uNa2**eJuMI}J?3?N&#yrclcJ^^Hl6agIwWZwa?(;@5+Aa)X%&BOv$6B6VMWJ>_q z0!a|I28f*wVOxOM$r*_$K(+_SE{GezfYZZ8!Q8-7*O7p`Nd~z&r7$}{p~aJ$7a9z5 z2N26JcrdsyC@`2a7%*5e=rTB#q*j!G6guY@R2F5XXOt*70z)=c!8t#-ptK~lNJqgl zFIi7V!N|bS0Hh8SXAq-52Z2pz6g!U)%U{UAV5!W&z}$lnOPa>Ouze2$gTyI>n94i` z27YS>hHd8x5{nYy4rlzvLWp0SW^4pu^Efduu-^Os|Faqc1N$TfhQAa4|Np({|Np;> zf%XIA>_83xBzI}xjB64P00006VoOIv00000008+zyMF)x010qNS#tmY3ljhU3ljkV znw%H_000McNliru;syZ{FB!>kWnTaQ2RBJXK~#9!?ONSS8(9?3zu-%JGGd@AVwA*) zNP?S$DmHEsB!iL|1hZ<&N?IEir?umjDD{i3lAuv+S0y#lVJ#}ADH{mNQfN@RlK9Yl zXu&=xv=4bO4?g6Hhf&~i}ELgB$ z!GZ+~7A&p`^5)&jy@RIE*Si{8o+lH12{nff8vVGa?1GQrOKYV<{xz}pdVAyMAou+@ z!*K+Tql3B_wPhWmHMeYSB{pinPg_S0Toc@J#pdyv`6*GSIwzhy@qSoOJ@Y?lwlCCT zo%3x{z{kzkz+M1#vCCZ-+*N(vsb8BaExTNAAZDxGK7`zIt(QHJMSz#XssTaVyk_cW z()*{!msbS@ZPiCfOW(Jo@FZ3btA-1jNKIasIyW~xW@^y{XmX;pSKQui97tL3 z$Hm*S*T*K%i(}>_E;`S%Dk$V+oryx!yquwN|LsL5+?m$-j2>LDf#HxtZ(*Xz%F) z_is zsXfyA@S49s4TOWDN7^Y!LoFxIpNhYM4FpW?dqrsq8W?8QXVHYHYaCxDl0T2NMM!&4 zVborji=%g8E*@!`Q78V>%y}a#DH~q=8(0c#Ed=0C^w&y4$>{4qV1T?n3q|+>7PK{i z`zlNF!2mPUlOWKxH=NwVwcGlFPKyuRIoVX0@m>S`9e6xgaS>8SH?&mFw=2`6IfxU6 zOPwXPg5rO^HWL!j?DZ6xcw{kIF@h ze_~{&8#m&l%;A(M{c!$t06u?j{|HEtAI5LVSjt|_5z!<%{96A+mWJA}W(F-CcvcR^ z=(AEyx&xPUCm2piZK?m84p#JG-Cmk#WOaH0PYw%F&8V#K7`4Jf#_EDSs4;|Z1c{(; zE>`T+J^zR;1!ALj6uUC^76%D^AMQ$1_m3IyM%Gg1At-7ah~8QF%gfc*Fg$;JiZ*1h z8%Eac5mh0FOGeh{h%3$pp(y)yT-XPzGV{IYbFizozvSWv?hJ9@etuPOfimc%RDGa0 zCOb{)lt*fLx>ggBBCcc6jwn&(c+6BxQq4hHJ?q|0uM?#!!C=hZn2u}GeFtIA8(HSc z7Y7%n1kTPgRF8Ds2eEchmoGQLi?=30hI=b@ZSnVCunbCD(TC5Vma34-^x`i>h>9fj z|I-&bfEpB@nqKGWJ}FtS55+Qnp?Q_a6UXUmVlZPbrQ`2g)n|OqW6m2?2SdoXl&K!Y z&Scvog#g4(R%Mp+n$lD$zA`u`8$spQh z*A>y$oH~Qrh(2_HeE-o*WtL&p69Ff)_7g{Cv2Vg0a7>!id?GrfIA%m@YgOimufvL3Pz<#gnf>b5(5l;X z#^t+(JmY&YnE~s*JE`8P;`9i5w7ctDop|ZiT(q+#4)duwcQ01q&7|SlnLx Y4=@9XQo9D!@Bjb+07*qoM6N<$f`)!ehX4Qo literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/execfd_cmp.png b/.zsh/fsh/images/execfd_cmp.png new file mode 100644 index 0000000000000000000000000000000000000000..628f46ad40b5f146b0c95b1359e3ca28f7976c5e GIT binary patch literal 3846 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 D80J;I literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/for-loop-cmp.png b/.zsh/fsh/images/for-loop-cmp.png new file mode 100644 index 0000000000000000000000000000000000000000..64472e0e19c45abf8286dda16b47342c3ae7208f GIT binary patch literal 9140 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 Di?Do` literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/function.png b/.zsh/fsh/images/function.png new file mode 100644 index 0000000000000000000000000000000000000000..7450061868a08362763e36cbad0ef87284e345de GIT binary patch literal 7426 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/heredoc.png b/.zsh/fsh/images/heredoc.png new file mode 100644 index 0000000000000000000000000000000000000000..d88d55b3a80bd622ccd3c2a148f9b53a657dbe7c GIT binary patch literal 5060 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/highlight-less.png b/.zsh/fsh/images/highlight-less.png new file mode 100644 index 0000000000000000000000000000000000000000..54bad7292d8713cdc6956edaec24ab28178cef14 GIT binary patch literal 4419 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 z�yeI1I(?wo}(c`Ul#E(gXzhRHeSF@G$yeJuh2P+bbwrFH6pSmM-qsc+(+IoO5k( zw&nPx!aovVN_s2B&x!xGL6U8W^omXoNz8%|kNZk*(_{s3{ zY&`jOo2tH8ysJNjTCiC{u0+%PFcna!w~XZ;&nB~J$0-YCbR{arIT?hvg4Z7hh_+O% zx^`Ly)W=w6u_`~_3{}OZeRE!9ClTvc9*CJllbMpJYp~}xI#{OW!dG^Hl2Swr5#g_$ zV9+pfzMwF$l~4-|2opXAsgCDq;Zzo{HKx`Dxpwx%(UVFCoAu27=@3g=qzd}Dkvj4e z(zB^*KZwDNt%#J(-Sz4C{Yzf|w-$YezH}ItrHj$tW1!Y&maF;}?D% z-Ohar*be+ zd}=YTSc9`)^9-Dn%e7X+r92<0_fHp%LN*`?Bj$!I|5!{KlEr3Ff(MNdddXm=vO|?XB&Z9;OSe(DfK3uLZ@qiNd`%0yO%$hK*Gm4eaV+PD}y4**SehwGPG=} zpu0gZf4i#u{)x!qEi?WF;RpGpwUI0r_enMm?sK9~N!wlp9!jUFApGjzO0hETkxPs{ zW-NQqVhW6MG9T9q>BdG}6E>dieS;Cnr!&fx`JZDhzm1r`V#3%QwIHhQ;{v3AuE8ZS?XZ0u<=;89vT&LC^M3`9%;tzV2`r(j1(~ z8vW;lRc7+86_9A;QR<~TSXF-Un%N&3kngAb;_~_D5GnHldcj-SQ%{f=AqF;jEu0e& z(;R?(d_$=K&ssdi4vVceS!1OH+*VaxhIcgb46G)^LPwTe~Q$2Vp=#7x%`M zh;cMUedJz-Ixr#ABXe_rVGk+VH`E8KJ2|Kbtsei{*?CA?JnTF{rrbQeL7gS(@tR zY!xGNzW-PTx^5ko6J(s0;S`(bFqORlRIn`)!)`isn4m)|b?7^hWE~M0yJev@Bu^M{ zAuWqBgkdbn%wky7xxP&U3K#a=3C%_cg*I9g+*|W zJ)$-@s^^P=_C*Q`9o(te0h7Vzl$ZrxpXbcPxR;cC>H6hTJ6y{puSq{c!Pngan^k+2 zc7&hqNqc|I(*3En2D{}+!DSbAe)bdlI~Mg@myrPPdK&#dZ|$?wG$^o#OH08RA977Q zFo=gH#|tgJr9a~zOuH39`MtcP@h;!mGH^fXKPEQ`Rf+W^$hE1J zcm15bLZ4MQegsq;lwIbiIn`7@TR5t;z(eFJH#CT=d6`-ielyHngZg#kG`xehePiyV z=R#!u?A-4H?)ppRUj4Ce;xT}_OcJa4gb9mmKG<)C8m+xSd^>#E%`lp z(x_p*oLM=hD3^&Al9YJi6ci?dRr_LB05Ur}VcTIAc^UyAH(lO$+{*Pz*~oMnu3=!< zlhd>);}@;lVdN%qH5i`LIb4b3(st@zk&h4d?4Lcuc-F)+;6&0o)=^0pKd>pY5ao?h zMnM-TN3o+qA9dzQmT^&*d&BYr{VQE4BRwS@!e3G@m%pj`{paZ>Q4t@ZH(eXuHbM{SNvQJJ<4V^vB5WD{Rj|{*PweH!?81GU_q1fE*3kv8Fj;NZ@iW zq@SE*YG15jcW#obly_lJ_L?RdxE1gDl1K=K`g0pC!RbEDByY7Zg z_G3!rv)Jpd$Ut6%g7kp;=~{Sa(%~o%MZZQ&@PquQR45=mFQGw7J^Ejz_{Tl2L)+4k S&+EUhv6bc3a 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/in_string.png b/.zsh/fsh/images/in_string.png new file mode 100644 index 0000000000000000000000000000000000000000..86932c8d9d01998f7f551908916f253fdf58e2ef GIT binary patch literal 6405 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/math.gif b/.zsh/fsh/images/math.gif new file mode 100644 index 0000000000000000000000000000000000000000..b445294cd8c129ecdedff6f80bd7d1c8337b3bbd GIT binary patch literal 139884 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 V!m%OQ5ibA$002ovPDHLkV1hGqEKL9a literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/preview-smaller.png b/.zsh/fsh/images/preview-smaller.png deleted file mode 100644 index 6fb84d18e545b56beef047eea45d7b03f9e50c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5982 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 F{{y@A$L;_C diff --git a/.zsh/fsh/images/preview.png b/.zsh/fsh/images/preview.png deleted file mode 100644 index 545cc511abf0cc90fc9020cf6665f5aad2062eec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14650 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

-MgHjdDwc7lJtg_pcWYX^Y_REA{WH1sR8yy`;r?n1;idjI^spF4; zT~8sK2C`ajqjGZ(4h&4DAE2~d#&(=`c1OGK?e7sFGfctdsE9UE{NAu=z=A@=y$D1P zm&pjwg6y1}bm~0Sx@B%-OqC4gZg^W8e*vv!7ZW9?k4esQ<3>h_Cx`cF{tf(|WoW z4TkCyuv|^y1{NZfZGDN1#OY@<#scuG94TpNo)2=PIUNozfSm^KHwh#@AZp==NZynU z7E6#oirj-p{{#kuiQG>Z4UF^+LJAzcy}hlit(i)Z@R-G!hdr*x*nq9i?furq9(pie zo_at*)7+Or&FOfg40vffJ3qCRi}Lcml+ffQCSuzF<{^_|(r4n1sg4Zf?0N*~?(a!D zo;4{DyUTLs+el1E&2Mv}tEhQCe1}V3DhxJ z!fc_e1DtMwj^1qu5*HVDra@u_uZqcUT@A|p+vD5Fq%F;wq(NWeFm(*D9xUpp1vc%?N}gW zet2kXY&ZLwUZ*K6MejUUMikaC}AGT$%=2nYaG_M?AoUBrp%`RWSzXQ_2A%LcSBykA|^KS+JAho*sP1EGx z<6|0XSv$L$!~X0R$$%qj>Y!Lo&nJh-P+uHcYBDkd;Lxj8fImVDq!ma8L5lVyiZ%q5 z`z^P6pXhfqbWt!M8kxpl(vpRjrXQY37trH?`@*cA-`2)WO+8%qeh8dH$6es88Z&hk4;5y5X=<4W2y|cV zj+i$!9A|I=fvNP&*w1j6eYr`s?qI~>oPi9DKT!UMNO5p*h=_=6@fP4k;4uDpe|rVi zl#!8GBo_=Eg6%3W2rTodHVJw~2J0z6zJOJyRYA zDImY<18a|+3s#=)7i%15JQ)Rr7@Y6pqtpNicZiWd;!R(vH#crc7>dAUiuhAsTkHNe z5WB&0#p!gpesy&fxW!Cv*DHXnvJ5Jg03yY8KmF$B#$YgNZjQZ7nVLd6$p#1pATA>! zA^@oF565manaUAmbauW678$TRfmoLUXB$@T7C4I`y4T6Z8Ll>=DoIYci7_#z>R#B@ ztcE|mI)^@xd8xtAhu)JZO&m-Z?dm9t4iv<=PiB@X=k$s{{fj{k|`cal0AW__dai%XEQoZDPA zSv1c;w||*#bo^EHEX)Tw*>-suk^PCxO2il-MdlH5IYkh1H53(5qdDs7Z341)&g>Qt z@#RH1DDyH~7jOa)XEGpVNp3x^qplZi7|Ml|4f;m10a@mn~SZj?d8kk_4!(BqsQZwLawMx zCa*Rh+CYur$gG(o7`&>c>q+jZwW`lq7X+IL*o+3)B)s*sNt z7Df?Mi+||5dwsR;DJP?7?CU;uRVEK@&1FL=6)KX=#-|f%w@l_E3I(HM28P}sZ#}T` zWsaqmQq_`NoO|ag#w3~i0fK-?FWatUIEDF%d*I*7P>i|0bR#2x?gLb|d3?ixDE9rI zGg1RA1Q?xhP-mVhp~V@}uLLp4s2H=cl*_$T7x&oTJ;B5^miS$joi%2doiC7+#h=2l z^gox`^Mm-oX}-SIBvp>3hPq;!-`d!b1>(cP9`PMrg&j4l`ntmYy=FCU7Ebq+eDmn| z7Q*aY5Q?ywv|c%>3x$?y#!a@P`{q~6^yg38+Um*dfw4rBxbNN9nO=;#GQS3oVqCPfH;Kj~I^E)1{MEOVZm zJJCx`N>nIrS)conS}y3DONMnKQz<1PMJEfTz=FM2Z6N02@&G_@gY`y6dV0If zUqQWz44%iwN5FhSLO}t@0k}%fx9^H9+o^9NaBf4imoFl-`(uy*@dXrST#w-*s#xR> zN(Ka~Ks9Oe6U>=!Xh34Q9;E}6b@^nf4bok==b*UN1x|oJcAOBm1q{{a=Y=d|DW9aB zl99<$a)hRMvES9r3E_x8zUhA2UhEB)k(e_T*DlA5ibBE{&E$P}%vMy;9Nrx{+3@y0 zjuXM8ZDvOnjt>J=k`ut%Nl8fo_6S(4X7!x^t$wy8ISQ!f8>UwAUMMFr?Z4-9y#p%( z@B#c^JoJKkW-&2eaEU6{?Ux1cO`yp1pa__B+Mz~g&8zVI^hwKnaYD6PwhYR2H({5zeYPhhn$@J@87?rYL#ABe<;$^(ol$bfh@j5qgK&& zJFiu)SwB29#6VcLA?PGjcXxZufa7EOt5B_ARD4Z7sraVicp6EQ`rViwF~+5az_Sn00hF>`==KGBg8jRA5`au-6j4V zUkWF8Zi49|R0lg9dT`VDfzO8dO&$lXzY3$mB)U)F>&piMQY5e66~$P!miXyhGaWqH z*=5?{$=d}Jyrp&M9Gq8oE1*`VYTb#osl}#+k?>+Ah2kdrU`(2(?DiNcs=mI9s}Up| z{!-Pp3rLn4bPaHIwZ2}K20*lqC>X5QxdCHyfY!B;I7mD=HfB=3(%9^ke!L(tA4OPOOA|fIuH!$I`!UwiYE?bo=rcLF#}k!= z1PBUlYnNQ6e;}y1S&yIJCn?h%pqKf#o61z0l%u$boPyqEkh@i%K$tfP1&+cd z*RI}H+%OLxW23I7>NCFbSF@@#H$Q$YmlJ?EUSRU(t*(x5&n%_c9=tvT1e@SY!S4@t z4td_*J`XOkxGgceyC=#cHLw)XPW3x+e zJ58QDztGe)9DQ?555)cB4`mS{A)&!2Ld4ND4kZWB&D9m&_n#r1ot^btRN+wC_HGK= zMkT2OBN!&_ad~bB;qBl7sKv}PTn;)E`G^%IJoKp|_giZ3XZ#IMF;|X?incd5neAVO z2Z|AE%wA-O2t&h=CAaHXY8C-FstW0?8}sE_1_lPFr>D6&Iny&UfXx~k7guM#KzBXk zvj9cDjF5HnMSva zpKN?3iiH6>pwO*v`a#xL6(%Ywih{>nR9EM4w%XhU7~_Sq=_!ecjR1bv)zu9R4FQZ{ zR{Ya9h@7yLndAf3&ks2Cxgfc$1U$rLxk&voh%HymWiw|rzP|pLU!ckATxesO$#rq! zZ8pX1u9;6I=DGdA>cGxQ@1NaY4iZy*{R$95Rc1V7pr$yQ#F(9(4P} z)1=$+O>O%{Lm)5-*{s0g;^MNhQAyFw|DyzL2BJnHz50ogH0KKEp1X7lGQ^9%JyJ`< zVLly?w?D^H6ar7E{-j&IWrzI~v6xtRGbf(R23aC z9D^y4F-;&RAmot-OTF{75|FwFtHJbPD9Pp|3J7XB<9TKca{ev;H+b;IPasEU*DA{~v?!cU+vXV<50G z1zVX!CHn|r5guaKDV1S*H|I118%;5dFt}AcXOE!07tT^2s}rKTIZhoM)XS~UQRwlk zb$C5;J$bZ_jq>EszWEOBmmOM~+x8ELvcPo}$fSndWdn@;P!Nld-6pH5stTws03gT% zXyMk@XP^Q!JTl__@E0z0#SR`8k^$*u^RtUUm6O;|!qIR7M5#Vjkv`;&AA1w>+obNX zg2Ts#h2M5?UI7$Ygwny0zn~BfAS?Z7e&RTbFGE>wD%kjO{DQZ&!CuWm3|VKnZNLvg?4`GXf1w@hcOOrvN{I*Gqh zr?21knf2}M=3Ms>$Kmqx%D;evm9?b!V71wv1#c{w$++Vm)216J_AS*KR|58U#0Q|h z#4jf|0l3)`ZMGOq@a}&VK%B?OU!^uXmy=6)jrBfA!^j;#YL|Gs!Oxo)ma!~C%KZI! z0LAkctI3yZryCCKgN|rUB0?3!v>p<(uhV3Oo3HYNSnix$R$c%q-_E8$hF8knsjXu< z_#I=gJuvWOeQdtmaS_4*#dy5x=Le<2twRl5cacn?VD--RD&cS%R_YS3P@odn;X>*aAFS`i_UKMAfj(1_-af?nwmdP1dwPo`FUmaF8hj z=!u`kCZN>@H>bO=B2Y2JFP8z@qZ{hG9_ooN0erBcynlGMqZ-5;RIoni24rpHL(l|U zZL>Nllr4Cire^_Xh#O}%vItoyXaB^kqXP|%Ml{}wYJZG%ykLJ@GNp(36w;C7xJ>W% z_0w&?u?xM5igR9{?}<6=@@i{qn|!s3>YF>{ zGI{YLzcMjh=P741)=^@H-OvYF#=YqzY8;Y43hDtB+Jg(_7+(T)45 zEf)Rfd%b;UUySBtL{3#AyhBLm?pvL2cB)BG*7aVgBrQ#I>;E-nLC!xNd`h8^v0r7D zfdT?hqzu3DQt|cm4MrtaEuGsQj7|iLXmPTGiCCrYom2z`EfP+7?1&@minl^%KRR2E zG81FR?wVyQf|TKlFyc}doM5C6MUv>d0v+yjDN29sjU!zY=2CpL9HQNl`Xs@2L>Nvl z`})6?fu8+gm@VG{|5K@S4v>kup11KkGNvV&QRrTlJ0HW473cY>Q*u2=jdoI1)&<74 z1p*rKw3U3aj65zeE}a*hBXf)IL$ziXDi!&>r8h@v9Y6Vz8r-#WIl z-%7`abzBbM^D8UQ0?-B#FIf+G5ghh=ZO><|TQ-eABj5!0H4+10YK65FNU-@Ex%rZM z(|mi;URK5{!5*6t)s|p308e+v7Pntk5M8avieOu}xG*ut7U?z_a95B0Y5+ZwTkz`A ziUfh)I|3y2Rq>BvIRV{SXr|5l| zwMV-x&r6#zy{B3l4P|@&dnzr7Lj2a#5Dw}zsy@Q$%!72e`Z)zk!D(cIbpiF|E9e}z zB2?YxU?~c zj_&P0wIBd1_x7Y%*Y51``p~Vq+^Ei)xNJ$CK9-JT9lEbQGlVH|9oi4RWKmZzo!@+GM#n|{UCvhlRf=AnnR7ePL` zy4_hV*G1M|m-qB|9v%*sb01r6quA_W_1{ZXz9a_QG>~xwH{K~|j#u&fOxt-$>?SG` zT^iWYkFT-15yeA_vG8kdCl~zd;ixg&Js$0Vz5;-rcs(6bkWf;>qd}AM^6CIZYrvnJ z9@s;gGSNYRFY;^)Z*|AMHxoEi12^YX=ERJpikanF>rPBmmghXdRIIkDX^B8-gH?k9 zBFyGW1}>Xgopt%#oxI&zs#$6DluK2mS{)9-H0HObIXNmHJ`jKTf`dPq@S*1di&oY7 z80$cBjQP@Db2-z%;9T9U+GnLcdsIM;@WC!OsV{#`VJPPzjK?x}krBcQpyWe?K%i#MLTApoQ zScwk}CD4iy@}!tjX6*jj8_O)Yl?Q$H^!NdbeAMi0t&@BscXc;rQ(xE=q4agS8glbT zbS)46r)`K^)YJ&(g4T3Q$5{q3mR`ui?eI)|YV!PD@c7Sn$EbqUK~6(kk&oB(vO)^^ zIe;BU$mit&a4n!^%GI@5vwVDHB$d%1C^j~>3B4AG>qefFj*?Uc#1s;&yZgDv&d2=A zLVw70?}O~o-@hj+br<+5lqow7X9lyP4zEKB_fey{zdvkt`)S%HXwQo7+Yo}avEkr4 zz3xt4JNXHl;|GIg7HOzDHq3tNP`Q#fEzV3tXI9`PN#hxasvF*ywx;KDT?gpUo%bl} zJpVDdtyq6~{aezH+9fL@ZZDYfX(bF5(Zr4^A=V&K8vdA2L0bsdvb9>w#%>gBa zyx7p6w4C!8b2?=yB~1(Mk=vn%cb`{O9f6^`1`MDEkmR)@5R6YvPr3llqj ze!!lxbw0;RNQ7%`mO()}DZcGL1-uhAXJ>=s7II9?WAsnnZH^G|r<2YV6rV%zeDpF!;i?(G%oh8}eo%YMnx zS&H(S}(+pk2q>azR8S!qhn>4_psS>ILKlmG)|1WS#G3PXa%`{ zraA6xwCYD8`es&~D|u@)7&Ws+9gF3*xbm*MUlL)$x7NbK%F3!{uFaJZf7>64pXzq& zmMw$7xf@Fnd1$Pou{4x~vj)DuYIolcM#0o|XEjCNIwNwvuc*^)mbGXVHl|-@Bddck z557)yy??1?idX$C#$t^Mz33SKDxm@s5$O&%uulxsFwO|-wgLFdbv#rYeR&slsIU(+ z!;#oTKVGR!saZLZBA93Zid?5X-{yJ^7}7x97ia|0J1t;88bi7+j}7aUEq*ayX=rI2 zq0^NuJ0r2Bqo6oCQdwIu_V9E>jWYK1WO0gr3_XvJZ}+&$ljRc`hSA?!s^!Sf52w>9 zV-%dy4MISpi zdnNuXFZqeBN>psy2Aj*Z{S&V0QaU~*G%oJ?km~mtBob2Bh(t$VM}wjDd?mYWrKTbM*FV_{}^zHc`15d7c(t>iW{ ztMFYQ%Iv8TB4mQuqMWKyZyysB@3&t5rDzd{F+T@DZh*jW+3gGgP4dUtRJU0+1(L~l z9D@+l-qsd`gu8WqURgCR8R~xv*D`kdyW(BdWHGoLj8?I)#$oPex`y6<^YRJVDSJGO(!LwaXQ|Hj*hb0Q_SP5u5Y12|t?bRGOW+3GrBlI*8ggWzk{-U#Scvj3s# zTvSv96fAh$@4k?e12v726|E<+STB0b!h9V6Xe57g>Zei?+S}QB*a|m){WU?u3Y|fs z%@c6#_<8z?U`P8~re%mg(}q7RGBwc4 z7V89bL;bHhd=-z#WnOh=FTJ+gKetyGwPzi3ufK`&ge-L;yzhBj#ND%Vc1te$%7SaC66aNOmcDuRb|;5-yabcOJ=K=Bu0ClpRTl2Up7)v zwNM#+%C`e@a{Viu|Jv#}@bwUKhRMl$bAlVQ&<|4nkS{F!V~!{zO}}(F7EagD;m8tB ze(lB6j~{c$Xo0I46_rGQmZ5}i8j#;~JHV?a=xAu5gVwkFygU%ECWT{hQ!yKYCl$%& z-vSvzl@c4d3G1huM=EZQvdqj59;bh9W5Jh>E_PW3=I@2G(_51ms(~VwPT4Z@-1O8X zfPOqY+_A`G+9a(M z&xDE*TOJ-34`HK;5Ix_ch_V5)ao+rc0*k<` za0yoP*|Li&l#~aa>G~t{e-xs3ii#*N0Z2!m!<-%&L2LrA37mH?C1zBtIB)4&zmIHo zvmmr#pj`yb2i}gZwE{5aG*dFO3{*7CnHiIl1u80HSL&GrJZ9vE=feE>_TYZeuR*8G18ZAD_WhT!Kg9U@UY@Y*{tDf6E2gYd#F4Po zhgR=$O<~&_14;T64#<}z`I(jZt+2=_GwS6!Q>7_hX22`e9?F4&L&3npaspa502TvO z#+;pn8g@jYRe6t zA`|xF#IM)7Ti)TP5^MhcfhhfM6mZac118AU`us=oJ>iOJI> zPe$s{hDvQa@xI|bJ^$TBvSIW;txps9RJ1rHTn{=L0W#ub^Qz*2w0uCa^gD==J9gl=f4pcq-FgJ# z-$;hH*$C60$a$td)~fHWAUTpFAD>*vTp1{B;`)H3=urYw6BT z+O(o^{IG2Cw~8Y1CTDAVyDPvD^|aj%3MCP`A0F%Q7v!AF_3NT9(y8K1s_}n8J3G zGm%Mw%H(vQ+`Wu*VBfeD>=dD2xpjG`3=bBkc#A6j{qz&7Y9CJ{aFM23$=7cbQubwF zfa#>gjQT1I0H#mTNUkN>sU!xiNQgg=aj=k04xCQD xYB17QfW9(>O^e56M^8;=Ff&B`e;!}>ve5sQS~R3P0bhm$Nr=b_R|x9){TGUlBl!RT diff --git a/.zsh/fsh/images/theme.png b/.zsh/fsh/images/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..285e4e4ff8da9b8c027910febf3482f91ad15a4d GIT binary patch literal 36511 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

tEU^p`8C1>QGM=YmzPWM*lJG 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 literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/typeset.png b/.zsh/fsh/images/typeset.png new file mode 100644 index 0000000000000000000000000000000000000000..06881fc069a9a4b928a22edd0e5f539a60c484aa GIT binary patch literal 4790 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 J;*M?De*kBC_v-)v literal 0 HcmV?d00001 diff --git a/.zsh/fsh/images/zcalc.png b/.zsh/fsh/images/zcalc.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c286d36072204200907a515395cdfea1c86de1 GIT binary patch literal 4865 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 LG6t7v*oFKLeikrS literal 0 HcmV?d00001 diff --git a/.zsh/fsh/release.md b/.zsh/fsh/release.md deleted file mode 100644 index 075f221..0000000 --- a/.zsh/fsh/release.md +++ /dev/null @@ -1,20 +0,0 @@ -# Release procedure (for developers): - -- For minor (A.B.0) releases: - - Check whether the release uses any not-yet-released zsh features -- Check open issues and outstanding pull requests -- Confirm `make test` passes - - check with multiple zsh versions - (easiest to check GitHub Actions: https://github.com/zsh-users/zsh-syntax-highlighting/actions) -- Update changelog.md - `tig --abbrev=12 --abbrev-commit 0.4.1..upstream/master` -- Make sure there are no local commits and that `git status` is clean; - Remove `-dev` suffix from `./.version`; - Commit that using `git commit -m "Tag version $(<.version)." .version`; - Tag it using `git tag -s -m "Tag version $(<.version)" $(<.version)`; - Increment `./.version` and restore the `-dev` suffix; - Commit that using `git commit -C b5c30ae52638e81a38fe5329081c5613d7bd6ca5 .version`. -- Push with `git push && git push --tags` -- Notify downstreams (OS packages) - - anitya should autodetect the tag -- Update /topic on IRC diff --git a/.zsh/fsh/share/free_theme.zsh b/.zsh/fsh/share/free_theme.zsh new file mode 100644 index 0000000..0f32d66 --- /dev/null +++ b/.zsh/fsh/share/free_theme.zsh @@ -0,0 +1,61 @@ +: ${FAST_HIGHLIGHT_STYLES[freedefault]:=none} +: ${FAST_HIGHLIGHT_STYLES[freeunknown-token]:=fg=red,bold} +: ${FAST_HIGHLIGHT_STYLES[freereserved-word]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freealias]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freesuffix-alias]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freebuiltin]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freefunction]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freecommand]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freeprecommand]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freecommandseparator]:=none} +: ${FAST_HIGHLIGHT_STYLES[freehashed-command]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freepath]:=fg=166} +: ${FAST_HIGHLIGHT_STYLES[freepath_pathseparator]:=} +: ${FAST_HIGHLIGHT_STYLES[freeglobbing]:=fg=112} +: ${FAST_HIGHLIGHT_STYLES[freeglobbing-ext]:=fg=118} +: ${FAST_HIGHLIGHT_STYLES[freehistory-expansion]:=fg=blue,bold} +: ${FAST_HIGHLIGHT_STYLES[freesingle-hyphen-option]:=fg=110} +: ${FAST_HIGHLIGHT_STYLES[freedouble-hyphen-option]:=fg=110} +: ${FAST_HIGHLIGHT_STYLES[freeback-quoted-argument]:=none} +: ${FAST_HIGHLIGHT_STYLES[freesingle-quoted-argument]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freedouble-quoted-argument]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freedollar-quoted-argument]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freeback-or-dollar-double-quoted-argument]:=fg=110} +: ${FAST_HIGHLIGHT_STYLES[freeback-dollar-quoted-argument]:=fg=110} +: ${FAST_HIGHLIGHT_STYLES[freeassign]:=none} +: ${FAST_HIGHLIGHT_STYLES[freeredirection]:=none} +: ${FAST_HIGHLIGHT_STYLES[freecomment]:=fg=black,bold} +: ${FAST_HIGHLIGHT_STYLES[freevariable]:=none} +: ${FAST_HIGHLIGHT_STYLES[freemathvar]:=fg=blue,bold} +: ${FAST_HIGHLIGHT_STYLES[freemathnum]:=fg=166} +: ${FAST_HIGHLIGHT_STYLES[freematherr]:=fg=red} +: ${FAST_HIGHLIGHT_STYLES[freeassign-array-bracket]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freefor-loop-variable]:=none} +: ${FAST_HIGHLIGHT_STYLES[freefor-loop-number]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freefor-loop-operator]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freefor-loop-separator]:=fg=109} +: ${FAST_HIGHLIGHT_STYLES[freeexec-descriptor]:=fg=yellow,bold} +: ${FAST_HIGHLIGHT_STYLES[freehere-string-tri]:=fg=yellow} +: ${FAST_HIGHLIGHT_STYLES[freehere-string-text]:=bg=19} +: ${FAST_HIGHLIGHT_STYLES[freehere-string-var]:=fg=110,bg=19} +: ${FAST_HIGHLIGHT_STYLES[freesecondary]:=zdharma} +: ${FAST_HIGHLIGHT_STYLES[freecase-input]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freecase-parentheses]:=fg=116} +: ${FAST_HIGHLIGHT_STYLES[freecase-condition]:=bg=19} +: ${FAST_HIGHLIGHT_STYLES[freecorrect-subtle]:=bg=55} +: ${FAST_HIGHLIGHT_STYLES[freeincorrect-subtle]:=bg=52} +: ${FAST_HIGHLIGHT_STYLES[freesubtle-separator]:=none} +: ${FAST_HIGHLIGHT_STYLES[freesubtle-bg]:=bg=18} +: ${FAST_HIGHLIGHT_STYLES[freepath-to-dir]:=fg=166,underline} +: ${FAST_HIGHLIGHT_STYLES[freepaired-bracket]:=bg=blue} +: ${FAST_HIGHLIGHT_STYLES[freebracket-level-1]:=fg=130} +: ${FAST_HIGHLIGHT_STYLES[freebracket-level-2]:=fg=70} +: ${FAST_HIGHLIGHT_STYLES[freebracket-level-3]:=fg=69} +: ${FAST_HIGHLIGHT_STYLES[freeglobal-alias]:=bg=19} +: ${FAST_HIGHLIGHT_STYLES[freesubcommand]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freesingle-sq-bracket]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freedouble-sq-bracket]:=fg=180} +: ${FAST_HIGHLIGHT_STYLES[freedouble-paren]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freeoptarg-string]:=fg=150} +: ${FAST_HIGHLIGHT_STYLES[freeoptarg-number]:=fg=166} +: ${FAST_HIGHLIGHT_STYLES[freerecursive-base]:=fg=183} diff --git a/.zsh/fsh/test/parse.zsh b/.zsh/fsh/test/parse.zsh new file mode 100755 index 0000000..53dec62 --- /dev/null +++ b/.zsh/fsh/test/parse.zsh @@ -0,0 +1,220 @@ +#!/bin/sh + +# +# This file runs the highlighter on a specified file +# i.e. parses the file with the highlighter. Outputs +# running time (stderr) and resulting region_highlight +# (file parse.out, or $2 if given). +# +# Can be also run in line-wise mode on own input (-o +# option in $1), no region_highlight file then. +# + +[[ -z "$ZSH_VERSION" ]] && exec /usr/bin/env /usr/local/bin/zsh-5.5.1 -f -c "source \"$0\" \"$1\" \"$2\" \"$3\"" + +ZERO="${(%):-%N}" + +if [[ -e "${ZERO}/../fast-highlight" ]]; then + source "${ZERO}/../fast-highlight" + source "${ZERO}/../fast-string-highlight" + fpath+=( "${ZERO}/.." ) +elif [[ -e "../fast-highlight" ]]; then + source "../fast-highlight" + source "../fast-string-highlight" + fpath+=( "$PWD/.." ) +elif [[ -e "${ZERO}/fast-highlight" ]]; then + source "${ZERO}/fast-highlight" + source "${ZERO}/fast-string-highlight" + fpath+=( "${ZERO}" ) +elif [[ -e "./fast-highlight" ]]; then + source "./fast-highlight" + source "./fast-string-highlight" + fpath+=( "./" ) +else + print -u2 "Could not find fast-highlight, aborting" + exit 1 +fi + +zmodload zsh/zprof +autoload is-at-least chroma/-git.ch + +setopt interactive_comments extendedglob + +# Own input? +if [[ "$1" = "-o" || "$1" = "-oo" || "$1" = "-ooo" || "$1" = "-git" || "$1" = "-hue" || "$1" = "-hol" ]]; then + typeset -a input + input=() + if [[ "$1" = "-o" ]]; then + input+=( "./parse.zsh ../fast-highlight parse2.out" ) + input+=( "rm -f parse*.out" ) + input+=( "./mh-parse.zsh ../fast-highlight > out" ) + input+=( "if [[ -o multibyte ]]; then echo multibyte is set; fi" ) + input+=( "[[ \"a\" = *[[:alpha:]_-][[:alpha:]]# ]] && echo yes" ) + input+=( 'git tag -a v0.98 -m "Syntax highlighting of the history entries"' ) + input+=( 'func() { echo "a" >! phist2.db; echo "b" >>! phist2.db; fc -Rap "phist2.db"; list=( ${history[@]} ); echo "${history[1]}"; }' ) + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "${(F)input}"; return 0; } + elif [[ "$1" = "-oo" ]]; then + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + input+=( 'typeset -a list\n() {\necho "a" >! phist2.db\necho "b" >>! phist2.db\nfc -Rap "phist2.db"\nlist=( ${history[@]} )\necho "${history[2]}"\necho "${history[1]}"\necho "${#history}";\ninteger size="${#history}"\nsize+=1\necho "$size" / "${history[$size]}"\nlist=( "${history[$size]}" ${history[@]} )\n}' ) + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "${(F)input}"; return 0; } + elif [[ "$1" = "-ooo" ]]; then + local in=' +# This is an example code that is diverse and allows to test a theme +text="An example quite long string $with variable in it" +local param1="text $variable" param2='"'"'other $variable'"'"' +math=$(( 10 + HISTSIZ + HISTSIZE + $SAVEHIST )) size=$(( 0 )) + +for (( ii = 1; ii <= size; ++ ii )); do + if [[ "${cmds[ii]} string" = "| string" ]] + then + sidx=${buffer[(in:ii:)\$\(?#[^\\\\]\)]} # find opening $( + (( sidx <= len )) && { + eidx=${buffer[(b:sidx:ii)[^\\\\]\)]} # find closing ) + } + fi +done' + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } + input+=( "$in" ) + input+=( "$in" ) + elif [[ "$1" = "-git" ]]; then + local in="git lp +git push origin master + git commit +git add safari.ini zdharma.ini +git st . +git diff --cached +git commit --allow-empty +git checkout themes/zdharma.ini +git commit --amend +git commit -m \"Example commit message\" +git tag -a 'v1.18' -m 'Here-string is highlighted, descriptor-variables passed to exec are correctly highlighted' +git tag -l -n9 +git checkout cb66b11 +" + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } + input+=( "$in" ) + input+=( "$in" ) + elif [[ "$1" = "-hue" ]]; then + local in="var=\$other; local var=\$other + () { eval \"\$var\"; } + case \$other in + \$var) + ( echo OK; ) + ;; + esac + sudo -i -s ls -1 /var/log + () { ( eval \"command ls -1\" ); } argument" + + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } + + input+=( "$in" "$in" ) + elif [[ "$1" = "-hol" ]]; then + local in="var=\$( other ) +local var2=\$(( other + 1 )) +() { eval \"\$var\"; } +sudo -i -s ls -1 >/tmp/ls-log.txt /var/log +IFS=\$'\\n' print -rl -- \$(command ls -1 | tee -a /tmp/ls-1.txt) +var3=\$(( HISTSIZE + 10 + \$var )) +local var4=\$( other command ) +touch \$(( HISTSIZE + \$SAVEHIST + 10 )) +case \$other in + \$var) + ( echo OK; ) + ;; + \$var3) + ( if { true } { noglob echo yes } ) +esac +( builtin cd /var/log; ls -1; noglob cd \"/var/log\" 'log' ) +noglob cat <<<\"\$PATH\" | tr : \"\\n\" +if [[ \"\$var\" -gt 10 ]]; then + (( var = HISTSIZE + \$SAVEHIST )) +fi +/var/log +sidx=\${buffer[(in:ii:)\\\$\\(?#[^\\\\\\\\]\\)]} # find opening cmd-subst +{ + exec {MYFD}<&0 {MYFD2}>&1 + ( read <&\$MYFD line; echo \$line >&\$MYFD2 && { builtin print \${match[1]}Written. } ) +} always { + (( MYFD > 0 )) && { print -rl -- -myfd:\$MYFD >&\$MYFD2 && print \"Sent.\" '(to filedescriptor)'; } +} +command sleep \"\$(( \$a + b + \${cde} + \${(s::)fgh[ijk]} + \\\$l + \\m + \\\" ))\" +for (( i = 0; i <= 2; ++ i )) { print \$i; } +" + + (( ${+ZSH_EXECUTION_STRING} == 0 )) && { print -zr "$in"; return 0; } + + input+=( "$in" ) + fi + + typeset -a long_input + integer i + for (( i=1; i<= 50; i ++ )); do + long_input+=( "${input[@]}" ) + done + + typeset -F SECONDS + SECONDS=0 + + local right_brace_is_recognised_everywhere + integer path_dirs_was_set multi_func_def ointeractive_comments + -fast-highlight-fill-option-variables + + local BUFFER + for BUFFER in "${long_input[@]}"; do + reply=( ) + () { + -fast-highlight-init + -fast-highlight-process "" "$BUFFER" "0" + -fast-highlight-string-process "" "$BUFFER" + } + done + + print "Running time: $SECONDS" + zprof | head +# File input? +elif [[ -r "$1" ]]; then + # Load from given file + local BUFFER="$(<$1)" + + typeset -F SECONDS + SECONDS=0 + + reply=( ) + -fast-highlight-init + + local right_brace_is_recognised_everywhere + integer path_dirs_was_set multi_func_def ointeractive_comments + -fast-highlight-fill-option-variables + + () { + -fast-highlight-process "" "$BUFFER" "0" + -fast-highlight-string-process "" "$BUFFER" + } + + print "Running time: $SECONDS" + zprof | head + + # This output can be diffed to detect changes in operation + if [[ -z "$2" ]]; then + print -rl -- "${reply[@]}" >! out.parse + else + print -rl -- "${reply[@]}" >! "$2" + fi +else + if [[ -z "$1" ]]; then + print -u2 "Usage: ./parse.zsh {to-parse file} [region_highlight output file]" + exit 2 + else + print -u2 "Unreadable to-parse file \`$1', aborting" + exit 3 + fi +fi + +exit 0 + +# vim:ft=zsh diff --git a/.zsh/fsh/test/to-parse.zsh b/.zsh/fsh/test/to-parse.zsh new file mode 100644 index 0000000..855d7a4 --- /dev/null +++ b/.zsh/fsh/test/to-parse.zsh @@ -0,0 +1,823 @@ +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +typeset -gA __hsmw_highlight_main__command_type_cache + +# Define default styles. +typeset -gA HSMW_HIGHLIGHT_STYLES +: ${HSMW_HIGHLIGHT_STYLES[default]:=none} +: ${HSMW_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold} +: ${HSMW_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow} +: ${HSMW_HIGHLIGHT_STYLES[alias]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[suffix-alias]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[builtin]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[function]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[command]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[precommand]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[commandseparator]:=none} +: ${HSMW_HIGHLIGHT_STYLES[hashed-command]:=fg=green} +: ${HSMW_HIGHLIGHT_STYLES[path]:=fg=magenta} +: ${HSMW_HIGHLIGHT_STYLES[path_pathseparator]:=} +: ${HSMW_HIGHLIGHT_STYLES[path_prefix]:=fg=magenta} +: ${HSMW_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=} +: ${HSMW_HIGHLIGHT_STYLES[globbing]:=fg=blue,bold} +: ${HSMW_HIGHLIGHT_STYLES[history-expansion]:=fg=blue,bold} +: ${HSMW_HIGHLIGHT_STYLES[single-hyphen-option]:=none} +: ${HSMW_HIGHLIGHT_STYLES[double-hyphen-option]:=none} +: ${HSMW_HIGHLIGHT_STYLES[back-quoted-argument]:=none} +: ${HSMW_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow} +: ${HSMW_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow} +: ${HSMW_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} +: ${HSMW_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} +: ${HSMW_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} +: ${HSMW_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} +: ${HSMW_HIGHLIGHT_STYLES[assign]:=none} +: ${HSMW_HIGHLIGHT_STYLES[redirection]:=none} +: ${HSMW_HIGHLIGHT_STYLES[comment]:=fg=black,bold} + +# Get the type of a command. +# +# Uses the zsh/parameter module if available to avoid forks, and a +# wrapper around 'type -w' as fallback. +# +# Takes a single argument. +# +# The result will be stored in REPLY. +-hsmw-highlight-main-type() { + if (( $+__hsmw_highlight_main__command_type_cache )); then + REPLY=$__hsmw_highlight_main__command_type_cache[(e)$1] + if [[ -n "$REPLY" ]]; then + return + fi + fi + if (( $#options_to_set )); then + setopt localoptions $options_to_set; + fi + unset REPLY + if zmodload -e zsh/parameter; then + if (( $+aliases[(e)$1] )); then + REPLY=alias + elif (( $+saliases[(e)${1##*.}] )); then + REPLY='suffix alias' + elif (( $reswords[(Ie)$1] )); then + REPLY=reserved + elif (( $+functions[(e)$1] )); then + REPLY=function + elif (( $+builtins[(e)$1] )); then + REPLY=builtin + elif (( $+commands[(e)$1] )); then + REPLY=command + # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly + # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo + # exists and is in $PATH). Avoid triggering the bug, at the expense of + # falling through to the $(x) below, incurring a fork. (Issue #354.) + # + # The second disjunct mimics the isrelative() C call from the zsh bug. + elif { [[ $1 != */* ]] || is-at-least 5.3 } && + ! builtin type -w -- $1 >/dev/null 2>&1; then + REPLY=none + fi + fi + if ! (( $+REPLY )); then + REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)#*: }" + fi + if (( $+__hsmw_highlight_main__command_type_cache )); then + __hsmw_highlight_main__command_type_cache[(e)$1]=$REPLY + fi +} + +# Check whether the first argument is a redirection operator token. +# Report result via the exit code. +-hsmw-highlight-is-redirection() { + # A redirection operator token: + # - starts with an optional single-digit number; + # - then, has a '<' or '>' character; + # - is not a process substitution [<(...) or >(...)]. + [[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]] +} + +# Resolve alias. +# +# Takes a single argument. +# +# The result will be stored in REPLY. +-hsmw-highlight-resolve-alias() { + if zmodload -e zsh/parameter; then + REPLY=${aliases[$arg]} + else + REPLY="${"$(alias -- $arg)"#*=}" + fi +} + +# Check that the top of $braces_stack has the expected value. If it does, set +# the style according to $2; otherwise, set style=unknown-token. +# +# $1: character expected to be at the top of $braces_stack +# $2: assignment to execute it if matches +-hsmw-highlight-stack-pop() { + if [[ $braces_stack[1] == $1 ]]; then + braces_stack=${braces_stack:1} + eval "$2" + else + style=unknown-token + fi +} + +# Main syntax highlighting function. +-hsmw-highlight-process() +{ + ## Before we even 'emulate -L', we must test a few options that would reset. + if [[ -o interactive_comments ]]; then + local interactive_comments= # set to empty + fi + if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then + local right_brace_is_recognised_everywhere=false + else + local right_brace_is_recognised_everywhere=true + fi + if [[ -o path_dirs ]]; then + integer path_dirs_was_set=1 + else + integer path_dirs_was_set=0 + fi + if [[ -o multi_func_def ]]; then + integer multi_func_def=1 + else + integer multi_func_def=0 + fi + emulate -L zsh + setopt localoptions extendedglob bareglobqual + + ## Variable declarations and initializations + local start_pos=0 end_pos highlight_glob=true arg style + local in_array_assignment=false # true between 'a=(' and the matching ')' + typeset -a __HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR + typeset -a __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS + typeset -a __HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW + local -a options_to_set # used in callees + local buf="$1" + integer len="${#buf}" + integer pure_buf_len=len # historical, was $#BUFFER, i.e. len without $PREBUFFER; used e.g. in *_check_path + + local braces_stack # "R" for round, "Q" for square, "Y" for curly + + if (( path_dirs_was_set )); then + options_to_set+=( PATH_DIRS ) + fi + unset path_dirs_was_set + + __HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=( + '|' '||' ';' '&' '&&' + '|&' + '&!' '&|' + # ### 'case' syntax, but followed by a pattern, not by a command + # ';;' ';&' ';|' + ) + __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS=( + 'builtin' 'command' 'exec' 'nocorrect' 'noglob' + 'pkexec' # immune to #121 because it's usually not passed --option flags + ) + + # Tokens that, at (naively-determined) "command position", are followed by + # a de jure command position. All of these are reserved words. + __HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW=( + $'\x7b' # block + $'\x28' # subshell + '()' # anonymous function + 'while' + 'until' + 'if' + 'then' + 'elif' + 'else' + 'do' + 'time' + 'coproc' + '!' # reserved word; unrelated to $histchars[1] + ) + + local -a match mbegin mend + + # State machine + # + # The states are: + # - :start: Command word + # - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i") + # - :sudo_arg: The argument to a sudo leading-dash option that takes one, + # when given as a separate word; i.e., "foo" in "-u foo" (two + # words) but not in "-ufoo" (one word). + # - :regular: "Not a command word", and command delimiters are permitted. + # Mainly used to detect premature termination of commands. + # - :always: The word 'always' in the «{ foo } always { bar }» syntax. + # + # When the kind of a word is not yet known, $this_word / $next_word may contain + # multiple states. For example, after "sudo -i", the next word may be either + # another --flag or a command name, hence the state would include both :start: + # and :sudo_opt:. + # + # The tokens are always added with both leading and trailing colons to serve as + # word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/} + # will DTRT regardless of how many elements or repetitions $x has.. + # + # Handling of redirections: upon seeing a redirection token, we must stall + # the current state --- that is, the value of $this_word --- for two iterations + # (one for the redirection operator, one for the word following it representing + # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a + # redirection operator, decrement it each iteration, and stall the current state + # when it is non-zero. Thus, upon reaching the next word (the one that follows + # the redirection operator and target), $this_word will still contain values + # appropriate for the word immediately following the word that preceded the + # redirection operator. + # + # The "the previous word was a redirection operator" state is not communicated + # to the next iteration via $next_word/$this_word as usual, but via + # $in_redirection. The value of $next_word from the iteration that processed + # the operator is discarded. + # + local this_word=':start:' next_word + integer in_redirection + # Processing buffer + local proc_buf="$buf" + for arg in ${interactive_comments-${(z)buf}} \ + ${interactive_comments+${(zZ+c+)buf}}; do + # Initialize $next_word. + if (( in_redirection )); then + (( --in_redirection )) + fi + if (( in_redirection == 0 )); then + # Initialize $next_word to its default value. + next_word=':regular:' + else + # Stall $next_word. + fi + + # Initialize per-"simple command" [zshmisc(1)] variables: + # + # $already_added (see next paragraph) + # $style how to highlight $arg + # $in_array_assignment boolean flag for "between '(' and ')' of array assignment" + # $highlight_glob boolean flag for "'noglob' is in effect" + # + # $already_added is set to 1 to disable adding an entry to region_highlight + # for this iteration. Currently, that is done for "" and $'' strings, + # which add the entry early so escape sequences within the string override + # the string's color. + integer already_added=0 + style=unknown-token + if [[ $this_word == *':start:'* ]]; then + in_array_assignment=false + if [[ $arg == 'noglob' ]]; then + highlight_glob=false + fi + fi + + # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf. + if [[ $arg == ';' ]] ; then + # We're looking for either a semicolon or a newline, whichever comes + # first. Both of these are rendered as a ";" (SEPER) by the ${(z)..} + # flag. + # + # We can't use the (Z+n+) flag because that elides the end-of-command + # token altogether, so 'echo foo\necho bar' (two commands) becomes + # indistinguishable from 'echo foo echo bar' (one command with three + # words for arguments). + local needle=$'[;\n]' + integer offset=$(( ${proc_buf[(i)$needle]} - 1 )) + (( start_pos += offset )) + (( end_pos = start_pos + $#arg )) + else + # The line was: + # + # integer offset=$(((len-start_pos)-${#${proc_buf##([[:space:]]|\\[[:space:]])#}})) + # + # - len-start_pos is length of current proc_buf; basically: initial length minus where + # we are, and proc_buf is chopped to the "where we are" (compare the "previous value + # of start_pos" below, and the len-(start_pos-offset) = len-start_pos+offset) + # - what's after main minus sign is: length of proc_buf without spaces at the beginning + # - so what the line actually did, was computing length of the spaces! + # - this can be done via (#b) flag, like below + if [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then + # The first, outer parenthesis + integer offset="${#match[1]}" + else + integer offset=0 + fi + ((start_pos+=offset)) + ((end_pos=$start_pos+${#arg})) + fi + + # Compute the new $proc_buf. We advance it + # (chop off characters from the beginning) + # beyond what end_pos points to, by skipping + # as many characters as end_pos was advanced. + # + # end_pos was advanced by $offset (via start_pos) + # and by $#arg. Note the `start_pos=$end_pos` + # below. + # + # As for the [,len]. We could use [,len-start_pos+offset] + # here, but to make it easier on eyes, we use len and + # rely on the fact that Zsh simply handles that. The + # length of proc_buf is len-start_pos+offset because + # we're chopping it to match current start_pos, so its + # length matches the previous value of start_pos. + # + # Why [,-1] is slower than [,length] isn't clear. + proc_buf="${proc_buf[offset + $#arg + 1,len]}" + + # Handle the INTERACTIVE_COMMENTS option. + # + # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. + if [[ -n ${interactive_comments+'set'} && $arg[1] == $histchars[3] ]]; then + if [[ $this_word == *(':regular:'|':start:')* ]]; then + style=comment + else + style=unknown-token # prematurely terminated + fi + -hsmw-add-highlight $start_pos $end_pos $style + already_added=1 + continue + fi + + # Analyse the current word. + if -hsmw-highlight-is-redirection $arg ; then + # A '<' or '>', possibly followed by a digit + in_redirection=2 + fi + + # Special-case the first word after 'sudo'. + if (( ! in_redirection )); then + if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then + this_word=${this_word//:sudo_opt:/} + fi + fi + + # Parse the sudo command line + if (( ! in_redirection )); then + if [[ $this_word == *':sudo_opt:'* ]]; then + case "$arg" in + # Flag that requires an argument + '-'[Cgprtu]) this_word=${this_word//:start:/}; + next_word=':sudo_arg:';; + # This prevents misbehavior with sudo -u -otherargument + '-'*) this_word=${this_word//:start:/}; + next_word+=':start:'; + next_word+=':sudo_opt:';; + *) ;; + esac + elif [[ $this_word == *':sudo_arg:'* ]]; then + next_word+=':sudo_opt:' + next_word+=':start:' + fi + fi + + # The Great Fork: is this a command word? Is this a non-command word? + if [[ $this_word == *':always:'* && $arg == 'always' ]]; then + # try-always construct + style=reserved-word # de facto a reserved word, although not de jure + next_word=':start:' + elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word + if [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then + style=precommand + elif [[ "$arg" = "sudo" ]]; then + style=precommand + next_word=${next_word//:regular:/} + next_word+=':sudo_opt:' + next_word+=':start:' + else + -hsmw-highlight-expand-path $arg + local expanded_arg="$REPLY" + -hsmw-highlight-main-type ${expanded_arg} + local res="$REPLY" + () { + # Special-case: command word is '$foo', like that, without braces or anything. + # + # That's not entirely correct --- if the parameter's value happens to be a reserved + # word, the parameter expansion will be highlighted as a reserved word --- but that + # incorrectness is outweighed by the usability improvement of permitting the use of + # parameters that refer to commands, functions, and builtins. + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + if [[ $res == none ]] && (( ${+parameters} )) && + [[ ${arg[1]} == \$ ]] && [[ ${arg:1} = ([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##) ]] && + (( ${+parameters[${MATCH}]} )) + then + -hsmw-highlight-main-type ${(P)MATCH} + res=$REPLY + fi + } + case $res in + reserved) # reserved word + style=reserved-word + if [[ $arg == $'\x7b' ]]; then + braces_stack='Y'"$braces_stack" + elif [[ $arg == $'\x7d' ]]; then + # We're at command word, so no need to check $right_brace_is_recognised_everywhere + -hsmw-highlight-stack-pop 'Y' style=reserved-word + if [[ $style == reserved-word ]]; then + next_word+=':always:' + fi + fi + ;; + 'suffix alias') style=suffix-alias;; + alias) () { + integer insane_alias + case $arg in + # Issue #263: aliases with '=' on their LHS. + # + # There are three cases: + # + # - Unsupported, breaks 'alias -L' output, but invokable: + ('='*) :;; + # - Unsupported, not invokable: + (*'='*) insane_alias=1;; + # - The common case: + (*) :;; + esac + if (( insane_alias )); then + style=unknown-token + else + style=alias + -hsmw-highlight-resolve-alias $arg + local alias_target="$REPLY" + [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$alias_target"} && -z ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && __HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg) + fi + } + ;; + builtin) style=builtin;; + function) style=function;; + command) style=command;; + hashed) style=hashed-command;; + none) if -hsmw-highlight-check-assign; then + style=assign + if [[ $arg[-1] == '(' ]]; then + in_array_assignment=true + else + # assignment to a scalar parameter. + # (For array assignments, the command doesn't start until the ")" token.) + next_word+=':start:' + fi + elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then + style=history-expansion + elif [[ $arg[0,1] == $histchars[2,2] ]]; then + style=history-expansion + elif [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + if [[ $this_word == *':regular:'* ]]; then + # This highlights empty commands (semicolon follows nothing) as an error. + # Zsh accepts them, though. + style=commandseparator + else + style=unknown-token + fi + elif (( in_redirection == 2 )); then + style=redirection + elif [[ $arg[1,2] == '((' ]]; then + # Arithmetic evaluation. + # + # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...} + # splitter would only output the '((' token if the matching '))' had + # been typed. Therefore, under those versions of zsh, BUFFER="(( 42" + # would be highlighted as an error until the matching "))" are typed. + # + # We highlight just the opening parentheses, as a reserved word; this + # is how [[ ... ]] is highlighted, too. + style=reserved-word + -hsmw-add-highlight $start_pos $((start_pos + 2)) $style + already_added=1 + if [[ $arg[-2,-1] == '))' ]]; then + -hsmw-add-highlight $((end_pos - 2)) $end_pos $style + already_added=1 + fi + elif [[ $arg == '()' ]]; then + # anonymous function + style=reserved-word + elif [[ $arg == $'\x28' ]]; then + # subshell + style=reserved-word + braces_stack='R'"$braces_stack" + else + if -hsmw-highlight-check-path; then + style=$REPLY + else + style=unknown-token + fi + fi + ;; + *) -hsmw-add-highlight $start_pos $end_pos commandtypefromthefuture-$res + already_added=1 + ;; + esac + fi + fi + if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath + { (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] } + then # $arg is a non-command word + case $arg in + $'\x29') # subshell or end of array assignment + if $in_array_assignment; then + style=assign + in_array_assignment=false + next_word+=':start:' + else + -hsmw-highlight-stack-pop 'R' style=reserved-word + fi;; + $'\x28\x29') # possibly a function definition + if (( multi_func_def )) || false # TODO: or if the previous word was a command word + then + next_word+=':start:' + fi + style=reserved-word + ;; + $'\x7d') # right brace + # + # Parsing rule: # { + # + # Additionally, `tt(})' is recognized in any position if neither the + # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set.""" + if $right_brace_is_recognised_everywhere; then + -hsmw-highlight-stack-pop 'Y' style=reserved-word + if [[ $style == reserved-word ]]; then + next_word+=':always:' + fi + else + # Fall through to the catchall case at the end. + fi + ;| + '--'*) style=double-hyphen-option;; + '-'*) style=single-hyphen-option;; + "'"*) style=single-quoted-argument;; + '"'*) style=double-quoted-argument + -hsmw-add-highlight $start_pos $end_pos $style + -hsmw-highlight-string + already_added=1 + ;; + \$\'*) style=dollar-quoted-argument + -hsmw-add-highlight $start_pos $end_pos $style + -hsmw-highlight-dollar-string + already_added=1 + ;; + '`'*) style=back-quoted-argument;; + [*?]*|*[^\\][*?]*) + $highlight_glob && style=globbing || style=default;; + *) if false; then + elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then + # was handled by the $'\x7d' case above + elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then + style=history-expansion + elif [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + if [[ $this_word == *':regular:'* ]]; then + style=commandseparator + else + style=unknown-token + fi + elif (( in_redirection == 2 )); then + style=redirection + else + if -hsmw-highlight-check-path; then + style=$REPLY + else + style=default + fi + fi + ;; + esac + fi + if ! (( already_added )); then + -hsmw-add-highlight $start_pos $end_pos $style + [[ $style == path || $style == path_prefix ]] && -hsmw-highlight-path-separators + fi + if [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then + if [[ $arg == ';' ]] && $in_array_assignment; then + # literal newline inside an array assignment + next_word=':regular:' + else + next_word=':start:' + highlight_glob=true + fi + elif + [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} && $this_word == *':start:'* ]] || + [[ -n ${(M)__HSMW_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} && $this_word == *':start:'* ]]; then + next_word=':start:' + elif [[ $arg == "repeat" && $this_word == *':start:'* ]]; then + # skip the repeat-count word + in_redirection=2 + # The redirection mechanism assumes $this_word describes the word + # following the redirection. Make it so. + # + # That word can be a command word with shortloops (`repeat 2 ls`) + # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`). + # + # The repeat-count word will be handled like a redirection target. + this_word=':start::regular:' + fi + start_pos=$end_pos + if (( in_redirection == 0 )); then + # This is the default/common codepath. + this_word=$next_word + else + # Stall $this_word. + fi + done +} + +# Check if $arg is variable assignment +-hsmw-highlight-check-assign() +{ + setopt localoptions extended_glob + [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] || + [[ $arg == [0-9]##(|[+])=* ]] +} + +-hsmw-highlight-path-separators() +{ + local pos style_pathsep + style_pathsep=${style}_pathseparator + [[ -z "$HSMW_HIGHLIGHT_STYLES[$style_pathsep]" || "$HSMW_HIGHLIGHT_STYLES[$style]" == "$HSMW_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0 + for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do + if [[ ${buf[pos]} == "/" ]]; then + -hsmw-add-highlight $((pos - 1)) $pos $style_pathsep + fi + done +} + +# Check if $arg is a path. +# If yes, return 0 and in $REPLY the style to use. +# Else, return non-zero (and the contents of $REPLY is undefined). +-hsmw-highlight-check-path() +{ + -hsmw-highlight-expand-path $arg; + local expanded_path="$REPLY" + + REPLY=path + + [[ -z $expanded_path ]] && return 1 + [[ -L $expanded_path ]] && return 0 + [[ -e $expanded_path ]] && return 0 + + # Search the path in CDPATH + local cdpath_dir + for cdpath_dir in $cdpath ; do + [[ -e "$cdpath_dir/$expanded_path" ]] && return 0 + done + + # If dirname($arg) doesn't exist, neither does $arg. + [[ ! -d ${expanded_path:h} ]] && return 1 + + # If this word ends the buffer, check if it's the prefix of a valid path. + if [[ ${buf[1]} != "-" && $pure_buf_len == $end_pos ]]; then + local -a tmp + tmp=( ${expanded_path}*(N) ) + (( $#tmp > 0 )) && REPLY=path_prefix && return 0 + fi + + # It's not a path. + return 1 +} + +# Highlight special chars inside double-quoted strings +-hsmw-highlight-string() +{ + setopt localoptions noksharrays + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local i j k style + # Starting quote is at 1, so start parsing at offset 2 in the string. + for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + '$' ) style=dollar-double-quoted-argument + # Look for an alphanumeric parameter name. + if [[ ${arg:$i} = ([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##) ]] ; then + (( k += $#MATCH )) # highlight the parameter name + (( i += $#MATCH )) # skip past it + elif [[ ${arg:$i} = [{]([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)[}]* ]] ; then + (( k += $#MATCH )) # highlight the parameter name and braces + (( i += $#MATCH )) # skip past it + else + continue + fi + ;; + "\\") style=back-double-quoted-argument + if [[ \\\`\"\$ == *$arg[$i+1]* ]]; then + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + else + continue + fi + ;; + *) continue ;; + + esac + -hsmw-add-highlight $j $k $style + done +} + +# Highlight special chars inside dollar-quoted strings +-hsmw-highlight-dollar-string() +{ + setopt localoptions noksharrays + local -a match mbegin mend + local MATCH; integer MBEGIN MEND + local i j k style + local AA + integer c + # Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string. + for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do + (( j = i + start_pos - 1 )) + (( k = j + 1 )) + case "$arg[$i]" in + "\\") style=back-dollar-quoted-argument + for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do + [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break + done + AA=$arg[$i+1,$c-1] + # Matching for HEX and OCT values like \0xA6, \xA6 or \012 + if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}" + || "$AA" =~ "^[0-7]{1,3}" + || "$AA" =~ "^u[0-9a-fA-F]{1,4}" + || "$AA" =~ "^U[0-9a-fA-F]{1,8}" + ]]; then + (( k += $#MATCH )) + (( i += $#MATCH )) + else + if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then + # \x not followed by hex digits is probably an error + style=unknown-token + fi + (( k += 1 )) # Color following char too. + (( i += 1 )) # Skip parsing the escaped char. + fi + ;; + *) continue ;; + + esac + -hsmw-add-highlight $j $k $style + done +} + +# Called with a single positional argument. +# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value. +# Does not perform filename generation (globbing). +-hsmw-highlight-expand-path() +{ + (( $# == 1 )) || print -r -- >&2 "hsmw-highlight: BUG: -hsmw-highlight-expand-path: called without argument" + + # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}. + setopt localoptions nonomatch + unset REPLY + : ${REPLY:=${(Q)~1}} +} + +# ------------------------------------------------------------------------------------------------- +# Main highlighter initialization +# ------------------------------------------------------------------------------------------------- + +-hsmw-highlight-init() { + __hsmw_highlight_main__command_type_cache=() +} + +-hsmw-add-highlight() +{ + local -i start end + local highlight + start=$1 + end=$2 + shift 2 + for highlight; do + if (( $+HSMW_HIGHLIGHT_STYLES[$highlight] )); then + reply+=("$start $end $HSMW_HIGHLIGHT_STYLES[$highlight]") + break + fi + done +} + +__HSMW_MH_SOURCED=1 + +# vim:ft=zsh diff --git a/.zsh/fsh/tests/README.md b/.zsh/fsh/tests/README.md deleted file mode 100644 index cb3d943..0000000 --- a/.zsh/fsh/tests/README.md +++ /dev/null @@ -1,124 +0,0 @@ -zsh-syntax-highlighting / tests -=============================== - -Utility scripts for testing zsh-syntax-highlighting highlighters. - -The tests harness expects the highlighter directory to contain a `test-data` -directory with test data files. -See the [main highlighter](../highlighters/main/test-data) for examples. - -Tests should set the following variables: - -1. -Each test should define the string `$BUFFER` that is to be highlighted and the -array parameter `$expected_region_highlight`. -The value of that parameter is a list of strings of the form `"$i $j $style"`. -or `"$i $j $style $todo"`. -Each string specifies the highlighting that `$BUFFER[$i,$j]` should have; -that is, `$i` and `$j` specify a range, 1-indexed, inclusive of both endpoints. -`$style` is a key of `$ZSH_HIGHLIGHT_STYLES`. -If `$todo` exists, the test point is marked as TODO (the failure of that test -point will not fail the test), and `$todo` is used as the explanation. - -2. -If a test sets `$skip_test` to a non-empty string, the test will be skipped -with the provided string as the reason. - -3. -If a test sets `$fail_test` to a non-empty string, the test will be skipped -with the provided string as the reason. - -4. -If a test sets `unsorted=1` the order of highlights in `$expected_region_highlight` -need not match the order in `$region_highlight`. - -5. -Normally, tests fail if `$expected_region_highlight` and `$region_highlight` -have different numbers of elements. To mark this check as expected to fail, -tests may set `$expected_mismatch` to an explanation string (like `$todo`); -this is useful when the only difference between actual and expected is that actual -has some additional, superfluous elements. This check is skipped if the -`$todo` component is present in any regular test point. - -**Note**: `$region_highlight` uses the same `"$i $j $style"` syntax but -interprets the indexes differently. - -**Note**: Tests are run with `setopt NOUNSET WARN_CREATE_GLOBAL`, so any -variables the test creates must be declared local. - -**Isolation**: Each test is run in a separate subshell, so any variables, -aliases, functions, etc., it defines will be visible to the tested code (that -computes `$region_highlight`), but will not affect subsequent tests. The -current working directory of tests is set to a newly-created empty directory, -which is automatically cleaned up after the test exits. For example: - -```zsh -setopt PATH_DIRS -mkdir -p foo/bar -touch foo/bar/testing-issue-228 -chmod +x foo/bar/testing-issue-228 -path+=( "$PWD"/foo ) - -BUFFER='bar/testing-issue-228' - -expected_region_highlight=( - "1 21 command" # bar/testing-issue-228 -) -``` - - -Writing new tests ------------------ - -An experimental tool is available to generate test files: - -```zsh -zsh -f tests/generate.zsh 'ls -x' acme newfile -``` - -This generates a `highlighters/acme/test-data/newfile.zsh` test file based on -the current highlighting of the given `$BUFFER` (in this case, `ls -x`). - -_This tool is experimental._ Its interface may change. In particular it may -grow ways to set `$PREBUFFER` to inject free-form code into the generated file. - - -Highlighting test ------------------ - -[`test-highlighting.zsh`](tests/test-highlighting.zsh) tests the correctness of -the highlighting. Usage: - -```zsh -zsh test-highlighting.zsh -``` - -All tests may be run with - -```zsh -make test -``` - -which will run all highlighting tests and report results in [TAP format][TAP]. -By default, the results of all tests will be printed; to show only "interesting" -results (tests that failed but were expected to succeed, or vice-versa), run -`make quiet-test` (or `make test QUIET=y`). - -[TAP]: http://testanything.org/ - - -Performance test ----------------- - -[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the -highlighting. Usage: - -```zsh -zsh test-perfs.zsh -``` - -All tests may be run with - -```zsh -make perf -``` diff --git a/.zsh/fsh/tests/_output/.gitkeep b/.zsh/fsh/tests/_output/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/.zsh/fsh/tests/_support/.gitkeep b/.zsh/fsh/tests/_support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/.zsh/fsh/tests/_support/bootstrap b/.zsh/fsh/tests/_support/bootstrap new file mode 100644 index 0000000..0107661 --- /dev/null +++ b/.zsh/fsh/tests/_support/bootstrap @@ -0,0 +1,2 @@ +#!/usr/bin/env zsh +# Write your bootstrap code here diff --git a/.zsh/fsh/tests/edit-failed-tests b/.zsh/fsh/tests/edit-failed-tests deleted file mode 100755 index e3a7668..0000000 --- a/.zsh/fsh/tests/edit-failed-tests +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -type perl sponge >/dev/null || { print -ru2 -- "$0: This script requires perl(1) and sponge(1) [from moreutils]"; exit 1; } - -local editor=( "${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}" ) -() { - > "$2" perl -nE '$highlighter = $1 if /^Running test (\S*)/; say "highlighters/${highlighter}/test-data/$1.zsh" if /^## (\S*)/' "$1" - >>"$2" echo "" - >>"$2" cat <"$1" - "${editor[@]}" -- "$2" -} =(${MAKE:-make} quiet-test) =(:) -# TODO: tee(1) the quiet-test output to /dev/tty as it's happening, with colors. diff --git a/.zsh/fsh/tests/example.zunit b/.zsh/fsh/tests/example.zunit new file mode 100644 index 0000000..910f840 --- /dev/null +++ b/.zsh/fsh/tests/example.zunit @@ -0,0 +1,15 @@ +#!/usr/bin/env zunit +@setup { + load "../fast-highlight" +} + +@test 'ls /usr/bin' { + PREBUFFER="" + BUFFER="ls /usr/bin" + run -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 \; print -rl -- \$reply + + assert "$lines[1]" same_as "0 2 fg=green" + assert "$lines[2]" same_as "3 11 fg=magenta,underline" +} + +# vim:ft=zsh:sw=4:sts=4:et diff --git a/.zsh/fsh/tests/generate.zsh b/.zsh/fsh/tests/generate.zsh deleted file mode 100755 index 5696020..0000000 --- a/.zsh/fsh/tests/generate.zsh +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2016 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -emulate -LR zsh -setopt localoptions extendedglob - -# Required for add-zle-hook-widget. -zmodload zsh/zle - -# Argument parsing. -if (( $# * $# - 7 * $# + 12 )) || [[ $1 == -* ]]; then - print -r -- >&2 "$0: usage: $0 BUFFER HIGHLIGHTER BASENAME [PREAMBLE]" - print -r -- >&2 "" - print -r -- >&2 "Generate highlighters/HIGHLIGHTER/test-data/BASENAME.zsh based on the" - print -r -- >&2 "current highlighting of BUFFER, using the setup code PREAMBLE." - exit 1 -fi -buffer=$1 -ZSH_HIGHLIGHT_HIGHLIGHTERS=( $2 ) -fname=${0:A:h:h}/highlighters/$2/test-data/${3%.zsh}.zsh -preamble=${4:-""} - -# Load the main script. -. ${0:A:h:h}/zsh-syntax-highlighting.zsh - -# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style -_zsh_highlight_add_highlight() -{ - region_highlight+=("$1 $2 $3") -} - - -# Copyright block -year="`LC_ALL=C date +%Y`" -if ! { read -q "?Set copyright year to $year? " } always { echo "" }; then - year="YYYY" -fi -<$0 sed -n -e '1,/^$/p' | sed -e "s/2[0-9][0-9][0-9]/${year}/" > $fname -# Assumes stdout is line-buffered -git add -- $fname -exec > >(tee -a $fname) - -# Preamble -if [[ -n $preamble ]]; then - print -rl -- "$preamble" "" -fi - -# Buffer -print -n 'BUFFER=' -if [[ $buffer != (#s)[$'\t -~']#(#e) ]]; then - print -r -- ${(qqqq)buffer} -else - print -r -- ${(qq)buffer} -fi -echo "" - -# Expectations -print 'expected_region_highlight=(' -() { - local i - local PREBUFFER - local BUFFER - - PREBUFFER="" - BUFFER="$buffer" - region_highlight=() - eval $( - exec 3>&1 >/dev/null - typeset -r __tests_tmpdir="$(mktemp -d)" - { - # Use a subshell to ensure $__tests_tmpdir, which is to be rm -rf'd, won't be modified. - (cd -- "$__tests_tmpdir" && eval $preamble && _zsh_highlight && typeset -p region_highlight >&3) - : # workaround zsh bug workers/45305 with respect to the $(…) subshell we're in - } always { - rm -rf -- ${__tests_tmpdir} - } - ) - - for ((i=1; i<=${#region_highlight}; i++)); do - local -a highlight_zone; highlight_zone=( ${(z)region_highlight[$i]} ) - integer start=$highlight_zone[1] end=$highlight_zone[2] - if (( start < end )) # region_highlight ranges are half-open - then - (( --end )) # convert to closed range, like expected_region_highlight - (( ++start, ++end )) # region_highlight is 0-indexed; expected_region_highlight is 1-indexed - fi - printf " %s # %s\n" ${(qq):-"$start $end $highlight_zone[3]"} ${${(qqqq)BUFFER[start,end]}[3,-2]} - done -} -print ')' diff --git a/.zsh/fsh/tests/main.zunit b/.zsh/fsh/tests/main.zunit new file mode 100644 index 0000000..110f34c --- /dev/null +++ b/.zsh/fsh/tests/main.zunit @@ -0,0 +1,124 @@ +#!/usr/bin/env zunit +@setup { + load "../fast-highlight" + setopt interactive_comments + -fast-highlight-fill-option-variables +} + +@test 'ls /usr/bin' { +reply=() + PREBUFFER="" + BUFFER="ls /usr/bin" + evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + + assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" + assert "$reply[2]" same_as "3 11 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path-to-dir]}" + assert "$reply[3]" same_as "" +} + +@test 'ls /bin/df' { + reply=() + PREBUFFER="" + BUFFER="ls /bin/df" + evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + + assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" + assert "$reply[2]" same_as "3 10 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}" + assert "$reply[3]" same_as "" +} + + +@test 'ls /bin/ls\\n # a comment\\nls /usr/bin' { + reply=() + PREBUFFER="" + BUFFER=$'ls /bin/df\n # a comment\nls /usr/bin' + evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + + assert "$reply[1]" same_as "0 2 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" + assert "$reply[2]" same_as "3 10 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}" + assert "$reply[3]" same_as "12 23 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}comment]}" + assert "$reply[4]" same_as "24 26 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}command]}" + assert "$reply[5]" same_as "27 35 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path-to-dir]}" + assert "$reply[6]" same_as "" +} + + +@test 'exec {FD}< <( ls /bin )' { + reply=() + PREBUFFER="" + BUFFER=$'exec {FD}< <( ls /bin )' + evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + + assert "$reply[1]" same_as "0 4 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}precommand]}" + assert "$reply[2]" same_as "5 9 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}exec-descriptor]}" + assert "$reply[3]" same_as "" +} + + +@test 'case x in x) a;; (y) ;; esac' { + reply=() + PREBUFFER="" + BUFFER=$'case x in\nx) a;;\n(y)\n;;\nesac' + evl -fast-highlight-process "$PREBUFFER" "$BUFFER" 0 + + assert "$reply[1]" same_as "0 4 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}" + assert "$reply[2]" same_as "5 6 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-input]}" + assert "$reply[3]" same_as "7 9 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" + assert "$reply[4]" same_as "10 11 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}" + assert "$reply[5]" same_as "11 12 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" + assert "$reply[6]" same_as "13 14 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}unknown-token]}" + assert "$reply[7]" same_as "17 18 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" + assert "$reply[8]" same_as "18 19 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-condition]}" + assert "$reply[9]" same_as "19 20 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}case-parentheses]}" + assert "$reply[10]" same_as "24 28 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]}" + assert "$reply[11]" same_as "" +} + +@test '-fast-highlight-process "$PREBUFFER" "$BUFFER" 0' { + reply=() + PREBUFFER="" + BUFFER='-fast-highlight-process "$PREBUFFER" "$BUFFER" 0' + evl -fast-highlight-process "\$PREBUFFER" "\$BUFFER" 0 + + assert "$reply[1]" same_as "0 23 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}function]}" + assert "$reply[2]" same_as "24 36 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}" + assert "$reply[3]" same_as "25 35 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}" + assert "$reply[4]" same_as "37 46 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}" + assert "$reply[5]" same_as "38 45 ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}back-or-dollar-double-quoted-argument]}" + assert "$reply[6]" same_as "" +} + +@test 'tr : \\\\n <<<$PATH' { + reply=() + PREBUFFER="" + BUFFER='command tr : \\n <<..<->) - print -nP %F{blue} - ;; - # SKIP - (*# SKIP*) - print -nP %F{yellow} - ;; - # XPASS - (ok*# TODO*) - print -nP %F{red} - ;; - # XFAIL - (not ok*# TODO*) - print -nP %F{yellow} - ;; - # FAIL - (not ok*) - print -nP %F{red} - ;; - # PASS - (ok*) - print -nP %F{green} - ;; - esac - print -nr - "$line" - print -nP %f - echo "" # newline -done diff --git a/.zsh/fsh/tests/tap-filter b/.zsh/fsh/tests/tap-filter deleted file mode 100755 index f9aa604..0000000 --- a/.zsh/fsh/tests/tap-filter +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env perl -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# vim: ft=perl sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# This is a stdin-to-stdout filter that takes TAP output (such as 'make test') -# on stdin and deletes lines pertaining to expected results. -# -# More specifically, if any of the test points in a test file either failed but -# was expected to pass, or passed but was expected to fail, then emit that test -# file's output; else, elide that test file's output. - -use v5.10.0; -use warnings; -use strict; - -undef $/; # slurp mode -print for - grep { /^ok.*# TODO/m or /^not ok(?!.*# TODO)/m or /^Bail out!/m } - # Split on plan lines and remove them from the output. (To keep them, - # use the lookahead syntax, «(?=…)», to make the match zero-length.) - split /^\d+\.\.\d+$/m, - ; diff --git a/.zsh/fsh/tests/test-highlighting.zsh b/.zsh/fsh/tests/test-highlighting.zsh deleted file mode 100755 index 8b564a8..0000000 --- a/.zsh/fsh/tests/test-highlighting.zsh +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2017 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -setopt NO_UNSET WARN_CREATE_GLOBAL - -# Required for add-zle-hook-widget. -zmodload zsh/zle - -local -r root=${0:h:h} -local -a anon_argv; anon_argv=("$@") - -(){ -set -- "${(@)anon_argv}" -# Check an highlighter was given as argument. -[[ -n "$1" ]] || { - echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." - exit 2 -} - -# Check the highlighter is valid. -[[ -f $root/highlighters/$1/$1-highlighter.zsh ]] || { - echo >&2 "Bail out! Could not find highlighter ${(qq)1}." - exit 2 -} - -# Check the highlighter has test data. -[[ -d $root/highlighters/$1/test-data ]] || { - echo >&2 "Bail out! Highlighter ${(qq)1} has no test data." - exit 2 -} - -# Set up results_filter -local results_filter -if [[ ${QUIET-} == y ]]; then - if type -w perl >/dev/null; then - results_filter=$root/tests/tap-filter - else - echo >&2 "Bail out! quiet mode not supported: perl not found"; exit 2 - fi -else - results_filter=cat -fi -[[ -n $results_filter ]] || { echo >&2 "Bail out! BUG setting \$results_filter"; exit 2 } - -# Load the main script. -# While here, test that it doesn't eat aliases. -print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "# global (driver) tests" -print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "1..1" -alias -- +plus=plus -alias -- _other=other -local original_alias_dash_L_output="$(alias -L)" -. $root/zsh-syntax-highlighting.zsh -if [[ $original_alias_dash_L_output == $(alias -L) ]]; then - print -r -- "ok 1 # 'alias -- +foo=bar' is preserved" -else - print -r -- "not ok 1 # 'alias -- +foo=bar' is preserved" - exit 1 -fi > >($results_filter | $root/tests/tap-colorizer.zsh) - -# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style -_zsh_highlight_add_highlight() -{ - region_highlight+=("$1 $2 $3") -} - -# Activate the highlighter. -ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) - -# In zsh<5.3, 'typeset -p arrayvar' emits two lines, so we use this wrapper instead. -typeset_p() { - for 1 ; do - if [[ ${(tP)1} == *array* ]]; then - print -r -- "$1=( ${(@qqqqP)1} )" - else - print -r -- "$1=${(qqqqP)1}" - fi - done -} - -# Escape # as ♯ and newline as ↵ they are illegal in the 'description' part of TAP output -# The string to escape is «"$@"»; the result is returned in $REPLY. -tap_escape() { - local s="${(j. .)@}" - REPLY="${${s//'#'/♯}//$'\n'/↵}" -} - -# Runs a highlighting test -# $1: data file -run_test_internal() { - - local tests_tempdir="$1"; shift - local srcdir="$PWD" - builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! On ${(qq)1}: cd failed: $?"; return 1 } - - # Load the data and prepare checking it. - local BUFFER CURSOR MARK PENDING PREBUFFER REGION_ACTIVE WIDGET REPLY skip_test fail_test unsorted=0 - local expected_mismatch - local skip_mismatch - local -a expected_region_highlight region_highlight - - local ARG="$1" - local RETURN="" - () { - setopt localoptions - - # WARNING: The remainder of this anonymous function will run with the test's options in effect - if { ! . "$srcdir"/"$ARG" } || (( $#fail_test )); then - print -r -- "1..1" - print -r -- "## ${ARG:t:r}" - tap_escape $fail_test; fail_test=$REPLY - print -r -- "not ok 1 - failed setup: $fail_test" - return ${RETURN:=0} - fi - - (( $#skip_test )) && { - print -r -- "1..0 # SKIP $skip_test" - print -r -- "## ${ARG:t:r}" - return ${RETURN:=0} - } - - # Check the data declares $PREBUFFER or $BUFFER. - [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! On ${(qq)ARG}: Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return ${RETURN:=1}; } - [[ $PREBUFFER == (''|*$'\n') ]] || { echo >&2 "Bail out! On ${(qq)ARG}: PREBUFFER=${(qqqq)PREBUFFER} doesn't end with a newline"; return ${RETURN:=1}; } - - # Set sane defaults for ZLE variables - : ${CURSOR=$#BUFFER} ${PENDING=0} ${WIDGET=z-sy-h-test-harness-test-widget} - - # Process the data. - _zsh_highlight - }; [[ -z $RETURN ]] || return $RETURN - unset ARG - - integer print_expected_and_actual=0 - - if (( unsorted )); then - region_highlight=("${(@n)region_highlight}") - expected_region_highlight=("${(@n)expected_region_highlight}") - fi - - # Print the plan line, and some comments for human readers - echo "1..$(( $#expected_region_highlight + 1))" - echo "## ${1:t:r}" # note: tests/edit-failed-tests looks for the "##" emitted by this line - [[ -n $PREBUFFER ]] && printf '# %s\n' "$(typeset_p PREBUFFER)" - [[ -n $BUFFER ]] && printf '# %s\n' "$(typeset_p BUFFER)" - - local i - for ((i=1; i<=$#expected_region_highlight; i++)); do - local -a expected_highlight_zone; expected_highlight_zone=( ${(z)expected_region_highlight[i]} ) - integer exp_start=$expected_highlight_zone[1] exp_end=$expected_highlight_zone[2] - local todo= - if (( $+expected_highlight_zone[4] )); then - todo="# TODO $expected_highlight_zone[4]" - skip_mismatch="cardinality check disabled whilst regular test points are expected to fail" - fi - if ! (( $+region_highlight[i] )); then - print -r -- "not ok $i - unmatched expectation ($exp_start $exp_end $expected_highlight_zone[3])" \ - "${skip_mismatch:+"# TODO ${(qqq)skip_mismatch}"}" - if [[ -z $skip_mismatch ]]; then (( ++print_expected_and_actual )); fi - continue - fi - local -a highlight_zone; highlight_zone=( ${(z)region_highlight[i]} ) - integer start=$(( highlight_zone[1] + 1 )) end=$highlight_zone[2] - local desc="[$start,$end] «${BUFFER[$start,$end]}»" - tap_escape $desc; desc=$REPLY - if - [[ $start != $exp_start ]] || - [[ $end != $exp_end ]] || - [[ ${highlight_zone[3]%,} != ${expected_highlight_zone[3]} ]] # remove the comma that's before the memo field - then - print -r -- "not ok $i - $desc - expected ($exp_start $exp_end ${(qqq)expected_highlight_zone[3]}), observed ($start $end ${(qqq)highlight_zone[3]}). $todo" - if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi - else - print -r -- "ok $i - $desc${todo:+ - }$todo" - fi - unset expected_highlight_zone - unset exp_start exp_end - unset todo - unset highlight_zone - unset start end - unset desc - done - - # If both $skip_mismatch and $expected_mismatch are set, that means the test - # has some XFail test points, _and_ explicitly sets $expected_mismatch as - # well. Explicit settings should have priority, so we ignore $skip_mismatch - # if $expected_mismatch is set. - if [[ -n $skip_mismatch && -z $expected_mismatch ]]; then - tap_escape $skip_mismatch; skip_mismatch=$REPLY - print "ok $i - cardinality check" "# SKIP $skip_mismatch" - else - local todo - if [[ -n $expected_mismatch ]]; then - tap_escape $expected_mismatch; expected_mismatch=$REPLY - todo="# TODO $expected_mismatch" - fi - if (( $#expected_region_highlight == $#region_highlight )); then - print -r -- "ok $i - cardinality check${todo:+ - }$todo" - else - local details - details+="have $#expected_region_highlight expectations and $#region_highlight region_highlight entries: " - details+="«$(typeset_p expected_region_highlight)» «$(typeset_p region_highlight)»" - tap_escape $details; details=$REPLY - print -r -- "not ok $i - cardinality check - $details${todo:+ - }$todo" - if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi - fi - fi - if (( print_expected_and_actual )); then - () { - local -a left_column right_column - left_column=( "expected_region_highlight" "${(qq)expected_region_highlight[@]}" ) - right_column=( "region_highlight" "${(qq)region_highlight[@]}" ) - integer difference=$(( $#right_column - $#left_column )) - repeat $difference do left_column+=(.); done - paste \ - =(print -rC1 -- $left_column) \ - =(print -rC1 -- $right_column) \ - | if type column >/dev/null; then column -t -s $'\t'; else cat; fi \ - | sed 's/^/# /' - } - fi -} - -# Run a single test file. The exit status is 1 if the test harness had -# an error and 0 otherwise. The exit status does not depend on whether -# test points succeeded or failed. -run_test() { - # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. - local __tests_tempdir - __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { - echo >&2 "Bail out! mktemp failed"; return 1 - } - typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on - - { - # Use a subshell to isolate tests from each other. - # (So tests can alter global shell state using 'cd', 'hash', etc) - { - # These braces are so multios don't come into play. - { (run_test_internal "$__tests_tempdir" "$@") 3>&1 >&2 2>&3 } | grep \^ - local ret=$pipestatus[1] stderr=$pipestatus[2] - if (( ! stderr )); then - # stdout will become stderr - echo "Bail out! On ${(qq)1}: output on stderr"; return 1 - else - return $ret - fi - } 3>&1 >&2 2>&3 - } always { - rm -rf -- "$__tests_tempdir" - } -} - -# Process each test data file in test data directory. -integer something_failed=0 -ZSH_HIGHLIGHT_STYLES=() -local data_file -for data_file in $root/highlighters/$1/test-data/*.zsh; do - run_test "$data_file" | tee >($results_filter | $root/tests/tap-colorizer.zsh) | grep -v '^not ok.*# TODO' | grep -Eq '^not ok|^ok.*# TODO' && (( something_failed=1 )) - (( $pipestatus[1] )) && exit 2 -done - -exit $something_failed -} diff --git a/.zsh/fsh/tests/test-perfs.zsh b/.zsh/fsh/tests/test-perfs.zsh deleted file mode 100755 index aa139aa..0000000 --- a/.zsh/fsh/tests/test-perfs.zsh +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - - -# Required for add-zle-hook-widget. -zmodload zsh/zle - -# Check an highlighter was given as argument. -[[ -n "$1" ]] || { - echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." - exit 2 -} - -# Check the highlighter is valid. -[[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || { - echo >&2 "Bail out! Could not find highlighter ${(qq)1}." - exit 2 -} - -# Check the highlighter has test data. -[[ -d ${0:h:h}/highlighters/$1/test-data ]] || { - echo >&2 "Bail out! Highlighter ${(qq)1} has no test data." - exit 2 -} - -# Load the main script. -typeset -a region_highlight -. ${0:h:h}/zsh-syntax-highlighting.zsh - -# Activate the highlighter. -ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) - -# Runs a highlighting test -# $1: data file -run_test_internal() { - local -a highlight_zone - - local tests_tempdir="$1"; shift - local srcdir="$PWD" - builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 } - - # Load the data and prepare checking it. - PREBUFFER= BUFFER= ; - . "$srcdir"/"$1" - - # Check the data declares $PREBUFFER or $BUFFER. - [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; } - - # Set $? for _zsh_highlight - true && _zsh_highlight -} - -run_test() { - # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. - local __tests_tempdir - __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { - echo >&2 "Bail out! mktemp failed"; return 1 - } - typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on - - { - (run_test_internal "$__tests_tempdir" "$@") - } always { - rm -rf -- "$__tests_tempdir" - } -} - -# Process each test data file in test data directory. -local data_file -TIMEFMT="%*Es" -{ time (for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do - run_test "$data_file" - (( $pipestatus[1] )) && exit 2 -done) } 2>&1 || exit $? - -exit 0 diff --git a/.zsh/fsh/tests/test-zprof.zsh b/.zsh/fsh/tests/test-zprof.zsh deleted file mode 100755 index ada1618..0000000 --- a/.zsh/fsh/tests/test-zprof.zsh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env zsh -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# Load the main script. -typeset -a region_highlight -. ${0:h:h}/zsh-syntax-highlighting.zsh - -# Activate the highlighter. -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) - -source_file=0.7.1:highlighters/$1/$1-highlighter.zsh - -# Runs a highlighting test -# $1: data file -run_test_internal() { - setopt interactivecomments - - local -a highlight_zone - - local tests_tempdir="$1"; shift - local srcdir="$PWD" - builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 } - - # Load the data and prepare checking it. - PREBUFFER= - BUFFER=$(cd -- "$srcdir" && git cat-file blob $source_file) - expected_region_highlight=() - - zmodload zsh/zprof - zprof -c - # Set $? for _zsh_highlight - true && _zsh_highlight - zprof -} - -run_test() { - # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. - local __tests_tempdir - __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { - echo >&2 "Bail out! mktemp failed"; return 1 - } - typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on - - { - (run_test_internal "$__tests_tempdir" "$@") - } always { - rm -rf -- "$__tests_tempdir" - } -} - -run_test diff --git a/.zsh/fsh/themes/clean.ini b/.zsh/fsh/themes/clean.ini new file mode 100644 index 0000000..f89b536 --- /dev/null +++ b/.zsh/fsh/themes/clean.ini @@ -0,0 +1,81 @@ +[base] +default = none +unknown-token = 124,bold +commandseparator = none +redirection = none +here-string-tri = yellow +here-string-text = bg:19 +here-string-var = 185,bg:19 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:17 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 146 +subcommand = 146 +alias = 109 +suffix-alias = 109 +global-alias = bg:19 +builtin = 109 +function = 109 +command = 109 +precommand = 109 +hashed-command = 109 +single-sq-bracket = 109 +double-sq-bracket = 109 +double-paren = 146 + +[paths] +path = 208 +pathseparator = +path-to-dir = 208,underline +globbing = 220 +globbing-ext = 225 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 115 +bracket-level-2 = 177 +bracket-level-3 = 220 + +[arguments] +single-hyphen-option = 185 +double-hyphen-option = 185 +back-quoted-argument = none +single-quoted-argument = 147 +double-quoted-argument = 147 +dollar-quoted-argument = 147 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 185 +; backslash or $... in "..." (i.e. variable in string) +back-or-dollar-double-quoted-argument = 185 + +[other] +variable = none +assign = none +assign-array-bracket = 109 +history-expansion = blue,bold + +[math] +mathvar = blue,bold +mathnum = 208 +matherr = 124 + +[for-loop] +forvar = none +fornum = 208 +; operator +foroper = 147 +; separator +forsep = 109 + +[case] +case-input = 109 +case-parentheses = 116 +case-condition = bg:19 diff --git a/.zsh/fsh/themes/default.ini b/.zsh/fsh/themes/default.ini new file mode 100644 index 0000000..c0840fb --- /dev/null +++ b/.zsh/fsh/themes/default.ini @@ -0,0 +1,84 @@ +; default theme, also embedded in the source of fast-syntax-highlighting + +[base] +default = none +unknown-token = red,bold +commandseparator = none +redirection = none +here-string-tri = yellow +here-string-text = 18 +here-string-var = cyan,bg:18 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = 12 +incorrect-subtle = red +subtle-separator = green +subtle-bg = bg:18 +secondary = free +; recursive-base = + +[command-point] +reserved-word = yellow +subcommand = yellow +alias = green +suffix-alias = green +global-alias = bg:blue +builtin = green +function = green +command = green +precommand = green +hashed-command = green +single-sq-bracket = green +double-sq-bracket = green +double-paren = yellow + +[paths] +path = magenta +pathseparator = +path-to-dir = magenta,underline +globbing = blue,bold +globbing-ext = 13 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = green,bold +bracket-level-2 = yellow,bold +bracket-level-3 = cyan,bold + +[arguments] +single-hyphen-option = cyan +double-hyphen-option = cyan +back-quoted-argument = none +single-quoted-argument = yellow +double-quoted-argument = yellow +dollar-quoted-argument = yellow + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = cyan +; backslash or $... in "..." +back-or-dollar-double-quoted-argument = cyan + +[other] +variable = 113 +assign = none +assign-array-bracket = green +history-expansion = blue,bold + +[math] +mathvar = blue,bold +mathnum = magenta +matherr = red + +[for-loop] +forvar = none +fornum = magenta +; operator +foroper = yellow +; separator +forsep = yellow,bold + +[case] +case-input = green +case-parentheses = yellow +case-condition = bg:blue diff --git a/.zsh/fsh/themes/forest.ini b/.zsh/fsh/themes/forest.ini new file mode 100644 index 0000000..d4b145e --- /dev/null +++ b/.zsh/fsh/themes/forest.ini @@ -0,0 +1,81 @@ +[base] +default = none +unknown-token = 124,bold +commandseparator = none +redirection = none +here-string-tri = yellow +here-string-text = underline +here-string-var = 65,underline +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:18 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 186 +subcommand = 186 +alias = 101 +suffix-alias = 101 +global-alias = bg:55 +builtin = 101 +function = 101 +command = 101 +precommand = 101 +hashed-command = 101 +single-sq-bracket = 101 +double-sq-bracket = 101 +double-paren = 186 + +[paths] +path = 107 +pathseparator = +path-to-dir = 107,underline +globbing = 114 +globbing-ext = 118 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = green,bold +bracket-level-2 = yellow,bold +bracket-level-3 = cyan,bold + +[arguments] +single-hyphen-option = 65 +double-hyphen-option = 65 +back-quoted-argument = none +single-quoted-argument = 186 +double-quoted-argument = 186 +dollar-quoted-argument = 186 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 65 +; backslash or $... in "..." +back-or-dollar-double-quoted-argument = 65 + +[other] +variable = none +assign = none +assign-array-bracket = 101 +history-expansion = 114 + +[math] +mathvar = 114 +mathnum = 107 +matherr = 124 + +[for-loop] +forvar = none +fornum = 107 +; operator +foroper = 186 +; separator +forsep = 109 + +[case] +case-input = 101 +case-parentheses = 65 +case-condition = underline diff --git a/.zsh/fsh/themes/free.ini b/.zsh/fsh/themes/free.ini new file mode 100644 index 0000000..108f7da --- /dev/null +++ b/.zsh/fsh/themes/free.ini @@ -0,0 +1,81 @@ +[base] +default = none +unknown-token = red,bold +commandseparator = none +redirection = none +here-string-tri = yellow +here-string-text = bg:19 +here-string-var = 110,bg:19 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:18 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 150 +subcommand = 150 +alias = 180 +suffix-alias = 180 +global-alias = bg:19 +builtin = 180 +function = 180 +command = 180 +precommand = 180 +hashed-command = 180 +single-sq-bracket = 180 +double-sq-bracket = 180 +double-paren = 150 + +[paths] +path = 166 +pathseparator = +path-to-dir = 166,underline +globbing = 112 +globbing-ext = 118 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 130 +bracket-level-2 = 70 +bracket-level-3 = 69 + +[arguments] +single-hyphen-option = 110 +double-hyphen-option = 110 +back-quoted-argument = none +single-quoted-argument = 150 +double-quoted-argument = 150 +dollar-quoted-argument = 150 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 110 +; backslash or $... in "..." (i.e. variable inside a string) +back-or-dollar-double-quoted-argument = 110 + +[other] +variable = none +assign = none +assign-array-bracket = 180 +history-expansion = blue,bold + +[math] +mathvar = blue,bold +mathnum = 166 +matherr = red + +[for-loop] +forvar = none +fornum = 150 +; operator +foroper = 150 +; separator +forsep = 109 + +[case] +case-input = 180 +case-parentheses = 116 +case-condition = bg:19 diff --git a/.zsh/fsh/themes/q-jmnemonic.ini b/.zsh/fsh/themes/q-jmnemonic.ini new file mode 100644 index 0000000..cfefd7a --- /dev/null +++ b/.zsh/fsh/themes/q-jmnemonic.ini @@ -0,0 +1,163 @@ +; X-JMnemonic theme for Fast-Syntax-Highlighting: +; https://github.com/zdharma/fast-syntax-highlighting +; Version: 1.1 +; +; Copyright (c) 2018 Sebastian Gniazdowski +; +; Based on: https://www.syntaxenvy.com/0753499 +; +; When I first saw the above theme upon syntaxenvy.com generated it randomly, +; I've had a quick, bold association with the Johnny Mnemonic movie. I don't +; know why, but I've decided to name the theme like this and who knows, maybe +; someone will decipher the connection one day. The theme looks suprisingly +; well IMO and maybe it's the effect of having this movie property/connection. +; +; This theme is a descent of the 40 work hours (or more) non-public theme X-Paragon, +; which was created to say `thanks' to the patrons at Patreon.com/psprint. It should +; carry the same quality. +; +; The palette - naive and CIE L*a*b conversion: +; +; main: +; #5e6466 -> 59 -> CIELab: 241 +; comment: +; #434749 -> 16 -> CIELab: 238 +; keyword: +; #b77c4b -> 137 -> CIELab: 173 +; number, string: +; #5794a2 -> 67 -> CIELab: 66 +; title, section, name, selector-id: +; #778ce0 -> 104 -> CIELab: 104 +; attribute, variable, type: +; #d55383 -> 168 -> CIELab: 168 +; symbol, link: +; #e66493 -> 168 -> CIELab: 168 +; builtin, deletion: +; #bd5ac0 -> 133 -> CIELab: 170 +; formula-bg: +; #363a3b -> 16 -> CIELab: 237 +; +; Token.Literal: "#dc5be0" -> CIELab: 170 (Orchid; naive: 170) +; Token.Operator: "#677dcf" -> CIELab: 68 (SteelBlue3; naive: 68) +; + +[base] +default = none +unknown-token = 196 +secondary = sv-orple +recursive-base = 183 + +[background] +correct-subtle = bg:18 +incorrect-subtle = bg:238 +subtle-bg = bg:17 +global-alias = bg:20 + +;; +;; COLOR-GROUPS +;; + +[gray] +comment = 243 + + + +[pastel] +here-string-tri = 217 + + + +[no-color] +assign = none +back-quoted-argument = none +redirection = none +variable = none + + + + +[magenta-3] +dollar-quoted-argument = 173 +double-quoted-argument = 173 +history-expansion = 173 +globbing-ext = 173 +precommand = 173 + +[light-salmon-3] +builtin = 137 +subcommand = 137 +single-quoted-argument = 137 + +[steel-blue-3] +command = 68 +double-sq-bracket = 68 +double-paren = 68 +single-sq-bracket = 68 + +[steel-blue] +reserved-word = 67 + + + +[medium-purple] +; backslash in $'...' +back-dollar-quoted-argument = 104 +commandseparator = 104 +single-hyphen-option = 104 + +[dark-khaki] +double-hyphen-option = 143 + + + +[hot-pink-3] +alias = 168 +exec-descriptor = 168 +function = 168 +hashed-command = 168 +here-string-var = 168 +suffix-alias = 168 + +[pale-green-3] +assign-array-bracket = 114 +; variable $... or backslash in "..." (i.e. variable in string) +back-or-dollar-double-quoted-argument = 114 +globbing = 114 +here-string-text = 114 + + + +[orchid] +path = 170 +path-to-dir = 170,underline +pathseparator = + + + +;; +;; FUNCTIONALITY-GROUPS +;; + +[brackets] +paired-bracket = black,bg:216 +bracket-level-1 = 117 +bracket-level-2 = 217 +bracket-level-3 = 220 + +[math] +mathvar = 68 +mathnum = 173 +matherr = 124 + +[for-loop] +forvar = 68 +fornum = 173 +; operator +foroper = 133 +; separator +forsep = 104 + +[case] +case-input = 168 +case-parentheses = 217 +case-condition = bg:25 diff --git a/.zsh/fsh/themes/safari.ini b/.zsh/fsh/themes/safari.ini new file mode 100644 index 0000000..e103c4d --- /dev/null +++ b/.zsh/fsh/themes/safari.ini @@ -0,0 +1,83 @@ +; Light theme with colors of a Sahara oasis + +[base] +default = none +unknown-token = red,bold +commandseparator = none +redirection = none +here-string-tri = yellow +here-string-text = bg:19 +here-string-var = 153,bg:19 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:18 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 150 +subcommand = 150 +alias = 185 +suffix-alias = 185 +global-alias = bg:19 +builtin = 185 +function = 185 +command = 185 +precommand = 185 +hashed-command = 185 +single-sq-bracket = 185 +double-sq-bracket = 185 +double-paren = 150 + +[paths] +path = 187 +pathseparator = +path-to-dir = 187,underline +globbing = 180 +globbing-ext = 184 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 178 +bracket-level-2 = 148 +bracket-level-3 = 141 + +[arguments] +single-hyphen-option = 152 +double-hyphen-option = 152 +back-quoted-argument = none +single-quoted-argument = 151 +double-quoted-argument = 151 +dollar-quoted-argument = 151 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 153 +; backslash or $... in "..." (i.e. variable inside a string) +back-or-dollar-double-quoted-argument = 153 + +[other] +variable = none +assign = none +assign-array-bracket = 185 +history-expansion = blue,bold + +[math] +mathvar = blue,bold +mathnum = 187 +matherr = red + +[for-loop] +forvar = none +fornum = 187 +; operator +foroper = 151 +; separator +forsep = 109 + +[case] +case-input = 185 +case-parentheses = 116 +case-condition = bg:19 diff --git a/.zsh/fsh/themes/spa.ini b/.zsh/fsh/themes/spa.ini new file mode 100644 index 0000000..651acdb --- /dev/null +++ b/.zsh/fsh/themes/spa.ini @@ -0,0 +1,82 @@ +; 144, 187, 110, 203 +[base] +default = none +unknown-token = 196 +commandseparator = 150 +redirection = none +here-string-tri = yellow +here-string-text = bg:19 +here-string-var = 186,bg:19 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:17 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 144 +subcommand = 144 +alias = 187 +suffix-alias = 187 +global-alias = bg:19 +builtin = 150 +function = 187 +command = 187 +precommand = 187 +hashed-command = 187 +single-sq-bracket = 150 +double-sq-bracket = 150 +double-paren = 144 + +[paths] +path = 110 +pathseparator = +path-to-dir = 110,underline +globbing = 220 +globbing-ext = 225 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 115 +bracket-level-2 = 177 +bracket-level-3 = 220 + +[arguments] +single-hyphen-option = 185 +double-hyphen-option = 185 +back-quoted-argument = none +single-quoted-argument = 110 +double-quoted-argument = 110 +dollar-quoted-argument = 110 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 186 +; backslash or $... in "..." (i.e. variable in string) +back-or-dollar-double-quoted-argument = 186 + +[other] +variable = none +assign = none +assign-array-bracket = 187 +history-expansion = blue,bold + +[math] +mathvar = 150 +mathnum = 110 +matherr = 196 + +[for-loop] +forvar = 71 +fornum = 110 +; operator +foroper = 203 +; separator +forsep = 147 + +[case] +case-input = 187 +case-parentheses = 116 +case-condition = bg:19 diff --git a/.zsh/fsh/themes/sv-orple.ini b/.zsh/fsh/themes/sv-orple.ini new file mode 100644 index 0000000..f7e8fc5 --- /dev/null +++ b/.zsh/fsh/themes/sv-orple.ini @@ -0,0 +1,100 @@ +; https://www.syntaxenvy.com/0073437 +; +; comment: +; #363355 -> 61 +; keyword: +; #dda69f -> 181 (138) +; number, string: +; #ca887e -> 174 (173) +; title, section, name, selector-id: +; #b3afd9 -> 146 (146) +; attribute, variable, type: +; #be85c0 -> 139 (140) +; symbol, link: +; #d6a2d8 -> 182 (182) +; builtin, deletion: +; #969c77 -> 108 (108) +; formula-bg: +; #211f37 -> 16 (17) + +[base] +default = none +unknown-token = 124 +commandseparator = 146 +redirection = none +here-string-tri = 138 +here-string-text = bg:25 +here-string-var = 140,bg:25 +exec-descriptor = 140 +comment = 61 +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:17 +secondary = clean +recursive-base = 186 + +[command-point] +reserved-word = 138 +subcommand = 182 +alias = 140 +suffix-alias = 140 +global-alias = bg:17 +builtin = 173 +function = 140 +command = 108 +precommand = 138 +hashed-command = 140 +single-sq-bracket = 173 +double-sq-bracket = 173 +double-paren = 138 + +[paths] +path = 182 +pathseparator = +path-to-dir = 182,underline +globbing = 138 +globbing-ext = 141 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 173 +bracket-level-2 = 177 +bracket-level-3 = 220 + +[arguments] +single-hyphen-option = 140 +double-hyphen-option = 140 +back-quoted-argument = none +single-quoted-argument = 173 +double-quoted-argument = 173 +dollar-quoted-argument = 173 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 146 +; backslash or $... in "..." (i.e. variable in string) +back-or-dollar-double-quoted-argument = 140 + +[other] +variable = none +assign = none +assign-array-bracket = 182 +history-expansion = blue,bold + +[math] +mathvar = 140 +mathnum = 173 +matherr = 124 + +[for-loop] +forvar = 140 +fornum = 173 +; operator +foroper = 147 +; separator +forsep = 182 + +[case] +case-input = 140 +case-parentheses = 17 +case-condition = bg:25 diff --git a/.zsh/fsh/themes/sv-plant.ini b/.zsh/fsh/themes/sv-plant.ini new file mode 100644 index 0000000..2191b21 --- /dev/null +++ b/.zsh/fsh/themes/sv-plant.ini @@ -0,0 +1,100 @@ +; https://www.syntaxenvy.com/0854668 +; +; comment: +; #5b4e3f -> 58 +; keyword: +; #a1f2b2 -> 157 +; number, string: +; #91cf9e -> 115 (114) +; title, section, name, selector-id: +; #dadff0 -> 189 +; attribute, variable, type: +; #debb91 -> 180 +; symbol, link: +; #f1dcc6 -> 224 +; builtin, deletion: +; #95cbc1 -> 115 +; formula: +; #3f352a -> 16 + +[base] +default = none +unknown-token = 124 +commandseparator = 189 +redirection = none +here-string-tri = 157 +here-string-text = bg:25 +here-string-var = 180,bg:25 +exec-descriptor = 180 +comment = 58 +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:17 +secondary = zdharma +recursive-base = 183 + +[command-point] +reserved-word = 157 +subcommand = 224 +alias = 180 +suffix-alias = 180 +global-alias = bg:58 +builtin = 115 +function = 180 +command = 180 +precommand = 157 +hashed-command = 180 +single-sq-bracket = 115 +double-sq-bracket = 115 +double-paren = 157 + +[paths] +path = 224 +pathseparator = +path-to-dir = 224,underline +globbing = 157 +globbing-ext = 159 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 115 +bracket-level-2 = 177 +bracket-level-3 = 220 + +[arguments] +single-hyphen-option = 180 +double-hyphen-option = 180 +back-quoted-argument = none +single-quoted-argument = 114 +double-quoted-argument = 114 +dollar-quoted-argument = 114 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 189 +; backslash or $... in "..." (i.e. variable in string) +back-or-dollar-double-quoted-argument = 180 + +[other] +variable = none +assign = none +assign-array-bracket = 224 +history-expansion = blue,bold + +[math] +mathvar = 180 +mathnum = 114 +matherr = 124 + +[for-loop] +forvar = 180 +fornum = 114 +; operator +foroper = 147 +; separator +forsep = 224 + +[case] +case-input = 180 +case-parentheses = 58 +case-condition = bg:25 diff --git a/.zsh/fsh/themes/zdharma.ini b/.zsh/fsh/themes/zdharma.ini new file mode 100644 index 0000000..95e3e7e --- /dev/null +++ b/.zsh/fsh/themes/zdharma.ini @@ -0,0 +1,81 @@ +[base] +default = none +unknown-token = red,bold +commandseparator = none +redirection = none +here-string-tri = 141 +here-string-text = bg:19 +here-string-var = 177,bg:19 +exec-descriptor = yellow,bold +comment = black,bold +correct-subtle = bg:55 +incorrect-subtle = bg:52 +subtle-bg = bg:17 +secondary = safari +recursive-base = 186 + +[command-point] +reserved-word = 146 +reserved-word = 146 +alias = 63 +suffix-alias = 63 +global-alias = bg:19 +builtin = 63 +function = 63 +command = 63 +precommand = 63 +hashed-command = 63 +single-sq-bracket = 63 +double-sq-bracket = 63 +double-paren = 146 + +[paths] +path = 154 +pathseparator = +path-to-dir = 154,underline +globbing = 114 +globbing-ext = 153 + +[brackets] +paired-bracket = bg:blue +bracket-level-1 = 117 +bracket-level-2 = 141 +bracket-level-3 = 90 + +[arguments] +single-hyphen-option = 177 +double-hyphen-option = 177 +back-quoted-argument = none +single-quoted-argument = 146 +double-quoted-argument = 146 +dollar-quoted-argument = 146 + +[in-string] +; backslash in $'...' +back-dollar-quoted-argument = 177 +; backslash or $... in "..." +back-or-dollar-double-quoted-argument = 177 + +[other] +variable = none +assign = none +assign-array-bracket = 63 +history-expansion = blue,bold + +[math] +mathvar = blue,bold +mathnum = 154 +matherr = red + +[for-loop] +forvar = none +fornum = 154 +; operator +foroper = 146 +; separator +forsep = 109 + +[case] +case-input = 63 +case-parentheses = 141 +case-condition = bg:19 diff --git a/.zsh/fsh/zsh-syntax-highlighting.plugin.zsh b/.zsh/fsh/zsh-syntax-highlighting.plugin.zsh deleted file mode 100644 index f2456ae..0000000 --- a/.zsh/fsh/zsh-syntax-highlighting.plugin.zsh +++ /dev/null @@ -1,2 +0,0 @@ -0=${(%):-%N} -source ${0:A:h}/zsh-syntax-highlighting.zsh diff --git a/.zsh/fsh/zsh-syntax-highlighting.zsh b/.zsh/fsh/zsh-syntax-highlighting.zsh deleted file mode 100644 index d20dc5b..0000000 --- a/.zsh/fsh/zsh-syntax-highlighting.zsh +++ /dev/null @@ -1,597 +0,0 @@ -# ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2020 zsh-syntax-highlighting contributors -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are permitted -# provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this list of conditions -# and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, this list of -# conditions and the following disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors -# may be used to endorse or promote products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ------------------------------------------------------------------------------------------------- -# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- -# vim: ft=zsh sw=2 ts=2 et -# ------------------------------------------------------------------------------------------------- - -# First of all, ensure predictable parsing. -typeset zsh_highlight__aliases="$(builtin alias -Lm '[^+]*')" -# In zsh <= 5.2, aliases that begin with a plus sign ('alias -- +foo=42') -# are emitted by `alias -L` without a '--' guard, so they don't round trip. -# -# Hence, we exclude them from unaliasing: -builtin unalias -m '[^+]*' - -# Set $0 to the expected value, regardless of functionargzero. -0=${(%):-%N} -if true; then - # $0 is reliable - typeset -g ZSH_HIGHLIGHT_VERSION=$(<"${0:A:h}"/.version) - typeset -g ZSH_HIGHLIGHT_REVISION=$(<"${0:A:h}"/.revision-hash) - if [[ $ZSH_HIGHLIGHT_REVISION == \$Format:* ]]; then - # When running from a source tree without 'make install', $ZSH_HIGHLIGHT_REVISION - # would be set to '$Format:%H$' literally. That's an invalid value, and obtaining - # the valid value (via `git rev-parse HEAD`, as Makefile does) might be costly, so: - ZSH_HIGHLIGHT_REVISION=HEAD - fi -fi - -# This function takes a single argument F and returns True iff F is an autoload stub. -_zsh_highlight__function_is_autoload_stub_p() { - if zmodload -e zsh/parameter; then - #(( ${+functions[$1]} )) && - [[ "$functions[$1]" == *"builtin autoload -X"* ]] - else - #[[ $(type -wa -- "$1") == *'function'* ]] && - [[ "${${(@f)"$(which -- "$1")"}[2]}" == $'\t'$histchars[3]' undefined' ]] - fi - # Do nothing here: return the exit code of the if. -} - -# Return True iff the argument denotes a function name. -_zsh_highlight__is_function_p() { - if zmodload -e zsh/parameter; then - (( ${+functions[$1]} )) - else - [[ $(type -wa -- "$1") == *'function'* ]] - fi -} - -# This function takes a single argument F and returns True iff F denotes the -# name of a callable function. A function is callable if it is fully defined -# or if it is marked for autoloading and autoloading it at the first call to it -# will succeed. In particular, if a function has been marked for autoloading -# but is not available in $fpath, then this function will return False therefor. -# -# See users/21671 http://www.zsh.org/cgi-bin/mla/redirect?USERNUMBER=21671 -_zsh_highlight__function_callable_p() { - if _zsh_highlight__is_function_p "$1" && - ! _zsh_highlight__function_is_autoload_stub_p "$1" - then - # Already fully loaded. - return 0 # true - else - # "$1" is either an autoload stub, or not a function at all. - # - # Use a subshell to avoid affecting the calling shell. - # - # We expect 'autoload +X' to return non-zero if it fails to fully load - # the function. - ( autoload -U +X -- "$1" 2>/dev/null ) - return $? - fi -} - -# ------------------------------------------------------------------------------------------------- -# Core highlighting update system -# ------------------------------------------------------------------------------------------------- - -# Use workaround for bug in ZSH? -# zsh-users/zsh@48cadf4 http://www.zsh.org/mla/workers//2017/msg00034.html -autoload -Uz is-at-least -if is-at-least 5.4; then - typeset -g zsh_highlight__pat_static_bug=false -else - typeset -g zsh_highlight__pat_static_bug=true -fi - -# Array declaring active highlighters names. -typeset -ga ZSH_HIGHLIGHT_HIGHLIGHTERS - -# Update ZLE buffer syntax highlighting. -# -# Invokes each highlighter that needs updating. -# This function is supposed to be called whenever the ZLE state changes. -_zsh_highlight() -{ - # Store the previous command return code to restore it whatever happens. - local ret=$? - # Make it read-only. Can't combine this with the previous line when POSIX_BUILTINS may be set. - typeset -r ret - - # $region_highlight should be predefined, either by zle or by the test suite's mock (non-special) array. - (( ${+region_highlight} )) || { - echo >&2 'zsh-syntax-highlighting: error: $region_highlight is not defined' - echo >&2 'zsh-syntax-highlighting: (Check whether zsh-syntax-highlighting was installed according to the instructions.)' - return $ret - } - - # Probe the memo= feature, once. - (( ${+zsh_highlight__memo_feature} )) || { - region_highlight+=( " 0 0 fg=red, memo=zsh-syntax-highlighting" ) - case ${region_highlight[-1]} in - ("0 0 fg=red") - # zsh 5.8 or earlier - integer -gr zsh_highlight__memo_feature=0 - ;; - ("0 0 fg=red memo=zsh-syntax-highlighting") - # zsh 5.9 or later - integer -gr zsh_highlight__memo_feature=1 - ;; - (" 0 0 fg=red, memo=zsh-syntax-highlighting") ;& - (*) - # We can get here in two ways: - # - # 1. When not running as a widget. In that case, $region_highlight is - # not a special variable (= one with custom getter/setter functions - # written in C) but an ordinary one, so the third case pattern matches - # and we fall through to this block. (The test suite uses this codepath.) - # - # 2. When running under a future version of zsh that will have changed - # the serialization of $region_highlight elements from their underlying - # C structs, so that none of the previous case patterns will match. - # - # In either case, fall back to a version check. - # - # The memo= feature was added to zsh in commit zsh-5.8-172-gdd6e702ee. - # The version number at the time was 5.8.0.2-dev (see Config/version.mk). - # Therefore, on 5.8.0.3 and newer the memo= feature is available. - # - # On zsh version 5.8.0.2 between the aforementioned commit and the - # first Config/version.mk bump after it (which, at the time of writing, - # is yet to come), this condition will false negative. - if is-at-least 5.8.0.3 $ZSH_VERSION.0.0; then - integer -gr zsh_highlight__memo_feature=1 - else - integer -gr zsh_highlight__memo_feature=0 - fi - ;; - esac - region_highlight[-1]=() - } - - # Reset region_highlight to build it from scratch - if (( zsh_highlight__memo_feature )); then - region_highlight=( "${(@)region_highlight:#*memo=zsh-syntax-highlighting*}" ) - else - # Legacy codepath. Not very interoperable with other plugins (issue #418). - region_highlight=() - fi - - # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains. - # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'. - # This disables highlighting during isearch (for reasons explained in README.md) unless zsh is new enough - # and doesn't have the pattern matching bug - if [[ $WIDGET == zle-isearch-update ]] && { $zsh_highlight__pat_static_bug || ! (( $+ISEARCHMATCH_ACTIVE )) }; then - return $ret - fi - - # Before we 'emulate -L', save the user's options - local -A zsyh_user_options - if zmodload -e zsh/parameter; then - zsyh_user_options=("${(kv)options[@]}") - else - local canonical_options onoff option raw_options - raw_options=(${(f)"$(emulate -R zsh; set -o)"}) - canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *}) - for option in "${canonical_options[@]}"; do - [[ -o $option ]] - case $? in - (0) zsyh_user_options+=($option on);; - (1) zsyh_user_options+=($option off);; - (*) # Can't happen, surely? - echo "zsh-syntax-highlighting: warning: '[[ -o $option ]]' returned $?" - ;; - esac - done - fi - typeset -r zsyh_user_options - - emulate -L zsh - setopt localoptions warncreateglobal nobashrematch - local REPLY # don't leak $REPLY into global scope - - # Do not highlight if there are more than 300 chars in the buffer. It's most - # likely a pasted command or a huge list of files in that case.. - [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret - - # Do not highlight if there are pending inputs (copy/paste). - [[ $PENDING -gt 0 ]] && return $ret - - { - local cache_place - local -a region_highlight_copy - - # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked. - local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do - - # eval cache place for current highlighter and prepare it - cache_place="_zsh_highlight__highlighter_${highlighter}_cache" - typeset -ga ${cache_place} - - # If highlighter needs to be invoked - if ! type "_zsh_highlight_highlighter_${highlighter}_predicate" >&/dev/null; then - echo "zsh-syntax-highlighting: warning: disabling the ${(qq)highlighter} highlighter as it has not been loaded" >&2 - # TODO: use ${(b)} rather than ${(q)} if supported - ZSH_HIGHLIGHT_HIGHLIGHTERS=( ${ZSH_HIGHLIGHT_HIGHLIGHTERS:#${highlighter}} ) - elif "_zsh_highlight_highlighter_${highlighter}_predicate"; then - - # save a copy, and cleanup region_highlight - region_highlight_copy=("${region_highlight[@]}") - region_highlight=() - - # Execute highlighter and save result - { - "_zsh_highlight_highlighter_${highlighter}_paint" - } always { - : ${(AP)cache_place::="${region_highlight[@]}"} - } - - # Restore saved region_highlight - region_highlight=("${region_highlight_copy[@]}") - - fi - - # Use value form cache if any cached - region_highlight+=("${(@P)cache_place}") - - done - - # Re-apply zle_highlight settings - - # region - () { - (( REGION_ACTIVE )) || return - integer min max - if (( MARK > CURSOR )) ; then - min=$CURSOR max=$MARK - else - min=$MARK max=$CURSOR - fi - if (( REGION_ACTIVE == 1 )); then - [[ $KEYMAP = vicmd ]] && (( max++ )) - elif (( REGION_ACTIVE == 2 )); then - local needle=$'\n' - # CURSOR and MARK are 0 indexed between letters like region_highlight - # Do not include the newline in the highlight - (( min = ${BUFFER[(Ib:min:)$needle]} )) - (( max = ${BUFFER[(ib:max:)$needle]} - 1 )) - fi - _zsh_highlight_apply_zle_highlight region standout "$min" "$max" - } - - # yank / paste (zsh-5.1.1 and newer) - (( $+YANK_ACTIVE )) && (( YANK_ACTIVE )) && _zsh_highlight_apply_zle_highlight paste standout "$YANK_START" "$YANK_END" - - # isearch - (( $+ISEARCHMATCH_ACTIVE )) && (( ISEARCHMATCH_ACTIVE )) && _zsh_highlight_apply_zle_highlight isearch underline "$ISEARCHMATCH_START" "$ISEARCHMATCH_END" - - # suffix - (( $+SUFFIX_ACTIVE )) && (( SUFFIX_ACTIVE )) && _zsh_highlight_apply_zle_highlight suffix bold "$SUFFIX_START" "$SUFFIX_END" - - - return $ret - - - } always { - typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER" - typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR - } -} - -# Apply highlighting based on entries in the zle_highlight array. -# This function takes four arguments: -# 1. The exact entry (no patterns) in the zle_highlight array: -# region, paste, isearch, or suffix -# 2. The default highlighting that should be applied if the entry is unset -# 3. and 4. Two integer values describing the beginning and end of the -# range. The order does not matter. -_zsh_highlight_apply_zle_highlight() { - local entry="$1" default="$2" - integer first="$3" second="$4" - - # read the relevant entry from zle_highlight - # - # ### In zsh≥5.0.8 we'd use ${(b)entry}, but we support older zsh's, so we don't - # ### add (b). The only effect is on the failure mode for callers that violate - # ### the precondition. - local region="${zle_highlight[(r)${entry}:*]-}" - - if [[ -z "$region" ]]; then - # entry not specified at all, use default value - region=$default - else - # strip prefix - region="${region#${entry}:}" - - # no highlighting when set to the empty string or to 'none' - if [[ -z "$region" ]] || [[ "$region" == none ]]; then - return - fi - fi - - integer start end - if (( first < second )); then - start=$first end=$second - else - start=$second end=$first - fi - region_highlight+=("$start $end $region, memo=zsh-syntax-highlighting") -} - - -# ------------------------------------------------------------------------------------------------- -# API/utility functions for highlighters -# ------------------------------------------------------------------------------------------------- - -# Array used by highlighters to declare user overridable styles. -typeset -gA ZSH_HIGHLIGHT_STYLES - -# Whether the command line buffer has been modified or not. -# -# Returns 0 if the buffer has changed since _zsh_highlight was last called. -_zsh_highlight_buffer_modified() -{ - [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]] -} - -# Whether the cursor has moved or not. -# -# Returns 0 if the cursor has moved since _zsh_highlight was last called. -_zsh_highlight_cursor_moved() -{ - [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR)) -} - -# Add a highlight defined by ZSH_HIGHLIGHT_STYLES. -# -# Should be used by all highlighters aside from 'pattern' (cf. ZSH_HIGHLIGHT_PATTERN). -# Overwritten in tests/test-highlighting.zsh when testing. -_zsh_highlight_add_highlight() -{ - local -i start end - local highlight - start=$1 - end=$2 - shift 2 - for highlight; do - if (( $+ZSH_HIGHLIGHT_STYLES[$highlight] )); then - region_highlight+=("$start $end $ZSH_HIGHLIGHT_STYLES[$highlight], memo=zsh-syntax-highlighting") - break - fi - done -} - -# ------------------------------------------------------------------------------------------------- -# Setup functions -# ------------------------------------------------------------------------------------------------- - -# Helper for _zsh_highlight_bind_widgets -# $1 is name of widget to call -_zsh_highlight_call_widget() -{ - builtin zle "$@" && - _zsh_highlight -} - -# Decide whether to use the zle-line-pre-redraw codepath (colloquially known as -# "feature/redrawhook", after the topic branch's name) or the legacy "bind all -# widgets" codepath. -# -# We use the new codepath under two conditions: -# -# 1. If it's available, which we check by testing for add-zle-hook-widget's availability. -# -# 2. If zsh has the memo= feature, which is required for interoperability reasons. -# See issues #579 and #735, and the issues referenced from them. -# -# We check this with a plain version number check, since a functional check, -# as done by _zsh_highlight, can only be done from inside a widget -# function — a catch-22. -# -# See _zsh_highlight for the magic version number. (The use of 5.8.0.2 -# rather than 5.8.0.3 as in the _zsh_highlight is deliberate.) -if is-at-least 5.8.0.2 $ZSH_VERSION.0.0 && _zsh_highlight__function_callable_p add-zle-hook-widget -then - autoload -U add-zle-hook-widget - _zsh_highlight__zle-line-finish() { - # Reset $WIDGET since the 'main' highlighter depends on it. - # - # Since $WIDGET is declared by zle as read-only in this function's scope, - # a nested function is required in order to shadow its built-in value; - # see "User-defined widgets" in zshall. - () { - local -h -r WIDGET=zle-line-finish - _zsh_highlight - } - } - _zsh_highlight__zle-line-pre-redraw() { - # Set $? to 0 for _zsh_highlight. Without this, subsequent - # zle-line-pre-redraw hooks won't run, since add-zle-hook-widget happens to - # call us with $? == 1 in the common case. - true && _zsh_highlight "$@" - } - _zsh_highlight_bind_widgets(){} - if [[ -o zle ]]; then - add-zle-hook-widget zle-line-pre-redraw _zsh_highlight__zle-line-pre-redraw - add-zle-hook-widget zle-line-finish _zsh_highlight__zle-line-finish - fi -else - # Rebind all ZLE widgets to make them invoke _zsh_highlights. - _zsh_highlight_bind_widgets() - { - setopt localoptions noksharrays - typeset -F SECONDS - local prefix=orig-s$SECONDS-r$RANDOM # unique each time, in case we're sourced more than once - - # Load ZSH module zsh/zleparameter, needed to override user defined widgets. - zmodload zsh/zleparameter 2>/dev/null || { - print -r -- >&2 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' - return 1 - } - - # Override ZLE widgets to make them invoke _zsh_highlight. - local -U widgets_to_bind - widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|yank-pop)}) - - # Always wrap special zle-line-finish widget. This is needed to decide if the - # current line ends and special highlighting logic needs to be applied. - # E.g. remove cursor imprint, don't highlight partial paths, ... - widgets_to_bind+=(zle-line-finish) - - # Always wrap special zle-isearch-update widget to be notified of updates in isearch. - # This is needed because we need to disable highlighting in that case. - widgets_to_bind+=(zle-isearch-update) - - local cur_widget - for cur_widget in $widgets_to_bind; do - case ${widgets[$cur_widget]:-""} in - - # Already rebound event: do nothing. - user:_zsh_highlight_widget_*);; - - # The "eval"'s are required to make $cur_widget a closure: the value of the parameter at function - # definition time is used. - # - # We can't use ${0/_zsh_highlight_widget_} because these widgets are always invoked with - # NO_function_argzero, regardless of the option's setting here. - - # User defined widget: override and rebind old one with prefix "orig-". - user:*) zle -N $prefix-$cur_widget ${widgets[$cur_widget]#*:} - eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" - zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Completion widget: override and rebind old one with prefix "orig-". - completion:*) zle -C $prefix-$cur_widget ${${(s.:.)widgets[$cur_widget]}[2,3]} - eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }" - zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Builtin widget: override and make it call the builtin ".widget". - builtin) eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }" - zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;; - - # Incomplete or nonexistent widget: Bind to z-sy-h directly. - *) - if [[ $cur_widget == zle-* ]] && (( ! ${+widgets[$cur_widget]} )); then - _zsh_highlight_widget_${cur_widget}() { :; _zsh_highlight } - zle -N $cur_widget _zsh_highlight_widget_$cur_widget - else - # Default: unhandled case. - print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget ${(qq)cur_widget}" - print -r -- >&2 "zsh-syntax-highlighting: (This is sometimes caused by doing \`bindkey ${(q-)cur_widget}\` without creating the ${(qq)cur_widget} widget with \`zle -N\` or \`zle -C\`.)" - fi - esac - done - } -fi - -# Load highlighters from directory. -# -# Arguments: -# 1) Path to the highlighters directory. -_zsh_highlight_load_highlighters() -{ - setopt localoptions noksharrays bareglobqual - - # Check the directory exists. - [[ -d "$1" ]] || { - print -r -- >&2 "zsh-syntax-highlighting: highlighters directory ${(qq)1} not found." - return 1 - } - - # Load highlighters from highlighters directory and check they define required functions. - local highlighter highlighter_dir - for highlighter_dir ($1/*/(/)); do - highlighter="${highlighter_dir:t}" - [[ -f "$highlighter_dir${highlighter}-highlighter.zsh" ]] && - . "$highlighter_dir${highlighter}-highlighter.zsh" - if type "_zsh_highlight_highlighter_${highlighter}_paint" &> /dev/null && - type "_zsh_highlight_highlighter_${highlighter}_predicate" &> /dev/null; - then - # New (0.5.0) function names - elif type "_zsh_highlight_${highlighter}_highlighter" &> /dev/null && - type "_zsh_highlight_${highlighter}_highlighter_predicate" &> /dev/null; - then - # Old (0.4.x) function names - if false; then - # TODO: only show this warning for plugin authors/maintainers, not for end users - print -r -- >&2 "zsh-syntax-highlighting: warning: ${(qq)highlighter} highlighter uses deprecated entry point names; please ask its maintainer to update it: https://github.com/zsh-users/zsh-syntax-highlighting/issues/329" - fi - # Make it work. - eval "_zsh_highlight_highlighter_${(q)highlighter}_paint() { _zsh_highlight_${(q)highlighter}_highlighter \"\$@\" }" - eval "_zsh_highlight_highlighter_${(q)highlighter}_predicate() { _zsh_highlight_${(q)highlighter}_highlighter_predicate \"\$@\" }" - else - print -r -- >&2 "zsh-syntax-highlighting: ${(qq)highlighter} highlighter should define both required functions '_zsh_highlight_highlighter_${highlighter}_paint' and '_zsh_highlight_highlighter_${highlighter}_predicate' in ${(qq):-"$highlighter_dir${highlighter}-highlighter.zsh"}." - fi - done -} - - -# ------------------------------------------------------------------------------------------------- -# Setup -# ------------------------------------------------------------------------------------------------- - -# Try binding widgets. -_zsh_highlight_bind_widgets || { - print -r -- >&2 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.' - return 1 -} - -# Resolve highlighters directory location. -_zsh_highlight_load_highlighters "${ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR:-${${0:A}:h}/highlighters}" || { - print -r -- >&2 'zsh-syntax-highlighting: failed loading highlighters, exiting.' - return 1 -} - -# Reset scratch variables when commandline is done. -_zsh_highlight_preexec_hook() -{ - typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER= - typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR= -} -autoload -Uz add-zsh-hook -add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || { - print -r -- >&2 'zsh-syntax-highlighting: failed loading add-zsh-hook.' - } - -# Load zsh/parameter module if available -zmodload zsh/parameter 2>/dev/null || true - -# Initialize the array of active highlighters if needed. -[[ $#ZSH_HIGHLIGHT_HIGHLIGHTERS -eq 0 ]] && ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) - -if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then - print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.' - ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST) - unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST -fi - -# Restore the aliases we unned -eval "$zsh_highlight__aliases" -builtin unset zsh_highlight__aliases - -# Set $?. -true diff --git a/.zsh/fsh/→chroma/-alias.ch b/.zsh/fsh/→chroma/-alias.ch new file mode 100644 index 0000000..d581341 --- /dev/null +++ b/.zsh/fsh/→chroma/-alias.ch @@ -0,0 +1,29 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +local __first_call="$1" __wrd="${2%%=*}" __start_pos="$3" __end_pos="$4" + +if (( __first_call )) || [[ "$2" = -* ]]; then + return 1 +else + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + elif (( $+aliases[(e)$__wrd] )) || (( ${+galiases[(e)$__wrd]} )); then + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + elif (( $+functions[(e)$__wrd] )) || (( $+builtins[(e)$__wrd] )) || (( $+commands[(e)$__wrd] )) || (( $reswords[(Ie)$__wrd] )); then + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + else + return 1 + fi + if [[ "$__wrd" != "$2" ]]; then + return 1 + fi +fi + +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 diff --git a/.zsh/fsh/→chroma/-autoload.ch b/.zsh/fsh/→chroma/-autoload.ch new file mode 100644 index 0000000..78a8924 --- /dev/null +++ b/.zsh/fsh/→chroma/-autoload.ch @@ -0,0 +1,104 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Tracks autoload command - highlights function names if they exist somewhere +# in $fpath. Also warns that the autoloaded function is already defined. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars +integer __idx1 __idx2 +local -a __results __deserialized __noshsplit + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-autoload-counter]=0 + FAST_HIGHLIGHT[chroma-autoload-counter-all]=1 + FAST_HIGHLIGHT[chroma-autoload-message]="" + #FAST_HIGHLIGHT[chroma-autoload-message-shown]="" + [[ -z ${FAST_HIGHLIGHT[chroma-autoload-message-shown-at]} ]] && FAST_HIGHLIGHT[chroma-autoload-message-shown-at]=0 + FAST_HIGHLIGHT[chroma-autoload-elements]="" + __style=${FAST_THEME_NAME}command + +} || { + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + (( FAST_HIGHLIGHT[chroma-autoload-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-autoload-counter-all] )) + + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = [-+]* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-autoload-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-autoload-counter] )) + + if [[ $__wrd != (\$|\"\$)* && $__wrd != (/|\"/|\'/)* && $__wrd != \`* ]]; then + __results=( ${^fpath}/$__wrd(N) ) + __deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-fpath_peq-elements]}}" ) + __results+=( ${^__deserialized}/$__wrd(N) ) + [[ "${#__results}" -gt 0 ]] && { + __style=${FAST_THEME_NAME}correct-subtle + __deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-autoload-elements]}}" ) + [[ -z "${__deserialized[1]}" && ${#__deserialized} -eq 1 ]] && __deserialized=() + # Cannot use ${abc:+"$abc"} trick with ${~...}, so handle most + # cases of the possible shwordsplit through an additional array + __noshsplit=( ${~__wrd} ) + __deserialized+=( "${(j: :)__noshsplit}" ) + FAST_HIGHLIGHT[chroma-autoload-elements]="${(j: :)${(q@)__deserialized}}" + # Make the function defined for big-loop's *main-type mechanism + __fast_highlight_main__command_type_cache[${(j: :)__noshsplit}]="function" + } || __style=${FAST_THEME_NAME}incorrect-subtle + fi + + if (( ${+functions[${(Q)__wrd}]} )); then + FAST_HIGHLIGHT[chroma-autoload-message]+="Warning: Function ${(Q)__wrd} already defined (e.g. loaded)"$'\n' + fi + fi + + # Display only when processing last autoload argument + if (( ${#${(z)BUFFER}} == FAST_HIGHLIGHT[chroma-autoload-counter-all] )); then + # Display only if already shown message differs or when it timeouts + if [[ ${FAST_HIGHLIGHT[chroma-autoload-message]} != ${FAST_HIGHLIGHT[chroma-autoload-message-shown]} || + $(( EPOCHSECONDS - FAST_HIGHLIGHT[chroma-autoload-message-shown-at] )) -gt 7 + ]]; then + FAST_HIGHLIGHT[chroma-autoload-message-shown]=${FAST_HIGHLIGHT[chroma-autoload-message]} + FAST_HIGHLIGHT[chroma-autoload-message-shown-at]=$EPOCHSECONDS + zle -M "${FAST_HIGHLIGHT[chroma-autoload-message]}" + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above code +# can do it itself and skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-autorandr.ch b/.zsh/fsh/→chroma/-autorandr.ch new file mode 100644 index 0000000..9687db3 --- /dev/null +++ b/.zsh/fsh/→chroma/-autorandr.ch @@ -0,0 +1,22 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" + +if (( __first_call )) || [[ "$__wrd" = -* ]]; then + return 1 +else + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + if [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr/$__wrd" ]] then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + fi +fi + +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 diff --git a/.zsh/fsh/→chroma/-awk.ch b/.zsh/fsh/→chroma/-awk.ch new file mode 100644 index 0000000..47b3ec7 --- /dev/null +++ b/.zsh/fsh/→chroma/-awk.ch @@ -0,0 +1,108 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars __val __style2 +integer __idx1 __idx2 + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-awk-counter]=0 + FAST_HIGHLIGHT[chroma-awk-f-seen]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + [[ "$__wrd" = "-f" ]] && FAST_HIGHLIGHT[chroma-awk-f-seen]=1 + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-awk-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-awk-counter] )) + + # First non-option token is the pattern (regex), we will + # highlight it. + if (( FAST_HIGHLIGHT[chroma-awk-counter] == 1 && FAST_HIGHLIGHT[chroma-awk-f-seen] == 0 )); then + if print -r -- "${(Q)__wrd}" | gawk --source 'BEGIN { exit } END { exit 0 }' -f - >/dev/null 2>&1; then + __style2="${FAST_THEME_NAME}subtle-bg" + else + __style2="${FAST_THEME_NAME}incorrect-subtle" + fi + + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style2]}") + + # Highlight keywords + FSH_LIST=() + : "${__wrd//(#m)(BEGIN|END|FIELDWIDTHS|RS|ARGC|ARGV|ENVIRON|NF|NR|IGNORECASE|FILENAME|if|then|else|while|toupper|tolower|function|print|sub)/$(( fsh_sy_h_append($MBEGIN, $MEND) ))}"; + for __val in "${FSH_LIST[@]}" ; do + [[ ${__wrd[${__val%%;;*}]} = [a-zA-Z0-9_] || ${__wrd[${__val##*;;}+1]} = [a-zA-Z0-9_] ]] && continue + __idx1=$(( __start_pos + ${__val%%;;*} )) + __idx2=__idx1+${__val##*;;}-${__val%%;;*}+1 + (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}reserved-word]},${FAST_HIGHLIGHT_STYLES[$__style2]}") + done + + # Highlight regex characters + __chars="*+\\)(\{\}[]^" + __idx1=__start_pos + __idx2=__start_pos + while [[ "$__wrd" = (#b)[^$__chars]#([\\][\\])#((+|\*|\[|\]|\)|\(|\^|\}|\{)|[\\](+|\*|\[|\]|\)|\(|\^|\{|\}))(*) ]]; do + if [[ -n "${match[3]}" ]]; then + __idx1+=${mbegin[3]}-1 + __idx2=__idx1+${mend[3]}-${mbegin[3]}+1 + (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]},${FAST_HIGHLIGHT_STYLES[$__style2]}") + __idx1=__idx2 + else + __idx1+=${mbegin[5]}-1 + fi + __wrd="${match[5]}" + done + elif (( FAST_HIGHLIGHT[chroma-awk-counter] >= 2 || FAST_HIGHLIGHT[chroma-awk-f-seen] == 1 )); then + FAST_HIGHLIGHT[chroma-awk-f-seen]=0 + # Handle paths, etc. normally - just pass-through to the big + # highlighter (the main FSH highlighter, used before chromas). + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-docker.ch b/.zsh/fsh/→chroma/-docker.ch new file mode 100644 index 0000000..31772f2 --- /dev/null +++ b/.zsh/fsh/→chroma/-docker.ch @@ -0,0 +1,90 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `docker'. It verifies command line, by denoting +# wrong and good arguments by color. Currently implemented: verification of +# image IDs passed to: docker image rm . +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 +local -a __lines_list + +(( __first_call )) && { + # Called for the first time - new command + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables + FAST_HIGHLIGHT[chroma-docker-counter]=0 + FAST_HIGHLIGHT[chroma-docker-got-subcommand]=0 + FAST_HIGHLIGHT[chroma-docker-subcommand]="" + FAST_HIGHLIGHT[chrome-docker-got-msg1]=0 + return 1 +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-docker-got-subcommand]} -eq 0 ]]; then + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + else + if (( FAST_HIGHLIGHT[chroma-docker-got-subcommand] == 0 )); then + FAST_HIGHLIGHT[chroma-docker-got-subcommand]=1 + FAST_HIGHLIGHT[chroma-docker-subcommand]="$__wrd" + __style=${FAST_THEME_NAME}subcommand + (( FAST_HIGHLIGHT[chroma-docker-counter] += 1 )) + else + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + if [[ "${FAST_HIGHLIGHT[chroma-docker-subcommand]}" = "image" ]]; then + [[ "$__wrd" != -* ]] && { + (( FAST_HIGHLIGHT[chroma-docker-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-docker-counter] )) + + if (( __idx1 == 2 )); then + __style=${FAST_THEME_NAME}subcommand + elif (( __idx1 == 3 )); then + .fast-run-command "docker images -q" chroma-docker-list "" + [[ -n "${__lines_list[(r)$__wrd]}" ]] && { + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + } || { + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + } + fi + } || __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + else + return 1 + fi + fi + fi +} + +# Add region_highlight entry (via `reply' array) +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-example.ch b/.zsh/fsh/→chroma/-example.ch new file mode 100644 index 0000000..8814922 --- /dev/null +++ b/.zsh/fsh/→chroma/-example.ch @@ -0,0 +1,120 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Example chroma function. It colorizes first two arguments as `builtin' style, +# third and following arguments as `globbing' style. First two arguments may +# be "strings", they will be passed through to normal higlighter (by returning 1). +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# +# +# Overall functioning is: when command "example" is occured, this function +# is called with $1 == 1, it ("example") is the first token ($2), then for any +# following token, this function is called with $1 == 0, until end of command +# is occured (i.e. till enter is pressed or ";" is put into source, or the +# command line simply ends). +# +# Other tips are: +# - $CURSOR holds cursor position +# - $BUFFER holds whole command line buffer +# - $LBUFFER holds command line buffer that is left from the cursor, i.e. it's a +# BUFFER substring 1 .. $CURSOR +# - $RBUFFER is the same as LBUFFER but holds part of BUFFER right to the cursor +# +# The function receives $BUFFER but via sequence of tokens, which are shell words, +# e.g. "a b c" is a shell word, while a b c are 3 shell words. +# +# FAST_HIGHLIGHT is a friendly hash array which allows to store strings without +# creating global parameters (variables). If you need hash, just use it first +# declaring, under some distinct name like: typeset -gA CHROMA_EXPLE_DICT. +# Remember to reset the hash and others at __first_call == 1, so that you have +# a fresh state for new command. + +# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. +# So the below 8192 assignment takes care that next token will be routed to chroma. +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global string variables. + FAST_HIGHLIGHT[chroma-example-counter]=0 + + # Set style for region_highlight entry. It is used below in + # '[[ -n "$__style" ]] ...' line, which adds highlight entry, + # like "10 12 fg=green", through `reply' array. + # + # Could check if command `example' exists and set `unknown-token' + # style instead of `command' + __style=${FAST_THEME_NAME}command + +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + else + # Count non-option tokens + (( FAST_HIGHLIGHT[chroma-example-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-example-counter] )) + + # Colorize 1..2 as builtin, 3.. as glob + if (( FAST_HIGHLIGHT[chroma-example-counter] <= 2 )); then + if [[ "$__wrd" = \"* ]]; then + # Pass through, fsh main code will do the highlight! + return 1 + else + __style=${FAST_THEME_NAME}builtin + fi + else + __style=${FAST_THEME_NAME}globbing + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# If 1 will be added to __start_pos, this will highlight "oken". +# If 1 will be subtracted from __end_pos, this will highlight "toke". +# $PREBUFFER is for specific situations when users does command \ +# i.e. when multi-line command using backslash is entered. +# +# This is a common place of adding such entry, but any above code can do +# it itself (and it does in other chromas) and skip setting __style to +# this way disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves. +# _start_pos=$_end_pos advainces pointers in command line buffer. +# +# To pass through means to `return 1'. The highlighting of +# this single token is then done by fast-syntax-highlighting's +# main code and chroma doesn't have to do anything. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-fast-theme.ch b/.zsh/fsh/→chroma/-fast-theme.ch new file mode 100644 index 0000000..15bc210 --- /dev/null +++ b/.zsh/fsh/→chroma/-fast-theme.ch @@ -0,0 +1,40 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +local __first_call="$1" __wrd="${(Q)2}" __start_pos="$3" __end_pos="$4" +local __style + +if (( __first_call )); then + FAST_HIGHLIGHT[chroma-fast-theme-first]=0 + return 1 +elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +elif (( ${FAST_HIGHLIGHT[chroma-fast-theme-first]} )) || [[ $__wrd = -* ]]; then + return 1 +else + FAST_HIGHLIGHT[chroma-fast-theme-first]=1 +fi + +if [[ "$__wrd" = */* || "$__wrd" = (XDG|LOCAL|HOME|OPT):* ]]; then + __wrd="${${__wrd/(#s)XDG:/${${XDG_CONFIG_HOME:-$HOME/.config}%/}/fsh/}%.ini}.ini" + __wrd="${${__wrd/(#s)LOCAL://usr/local/share/fsh/}%.ini}.ini" + __wrd="${${__wrd/(#s)HOME:/$HOME/.fsh/}%.ini}.ini" + __wrd="${${__wrd/(#s)OPT://opt/local/share/fsh/}%.ini}.ini" + __wrd=${~__wrd} # allow user to quote ~ +else + __wrd="$FAST_BASE_DIR/themes/$__wrd.ini" +fi + +if [[ -f $__wrd ]]; then + __style=${FAST_THEME_NAME}path +else + __style=${FAST_THEME_NAME}incorrect-subtle +fi + +(( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 diff --git a/.zsh/fsh/→chroma/-fpath_peq.ch b/.zsh/fsh/→chroma/-fpath_peq.ch new file mode 100644 index 0000000..072cee3 --- /dev/null +++ b/.zsh/fsh/→chroma/-fpath_peq.ch @@ -0,0 +1,61 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# This chroma does a narrow, obscure but prestigious parsing of fpath+=( elem1 +# elem2 ... ) construct to provide *the* *future* contents of $fpath to +# -autoload.ch, so that it can detect functions in those provided directories +# `elem1', `elem2', etc. and highlight the functions with `correct-subtle' +# instead of `incorrect-subtle'. Basically all thit is for command-lines like: +# +# % fpath+=( `pwd` ); autoload my-fun-from-PWD + +# Keep chroma-takever state meaning: until ; or similar (see $__arg_type below) +# The 8192 sum takes care that the next token will be routed to this chroma +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local -a deserialized + +(( __first_call )) && { + case $__wrd in + (fpath=\() + FAST_HIGHLIGHT[fpath_peq_mode]=1 + ;; + (fpath+=\() + FAST_HIGHLIGHT[fpath_peq_mode]=2 + ;; + (FPATH=) + FAST_HIGHLIGHT[fpath_peq_mode]=4 + ;; + (FPATH+=) + FAST_HIGHLIGHT[fpath_peq_mode]=8 + ;; + esac + if (( FAST_HIGHLIGHT[fpath_peq_mode] & 5 )); then + FAST_HIGHLIGHT[chroma-fpath_peq-elements]="! ${FAST_HIGHLIGHT[chroma-fpath_peq-elements]}" + fi + return 1 +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + [[ "$__wrd" != ")" ]] && { + deserialized=( "${(Q@)${(z@)FAST_HIGHLIGHT[chroma-fpath_peq-elements]}}" ) + [[ -z "${deserialized[1]}" && ${#deserialized} -eq 1 ]] && deserialized=() + # Support ~ and $VAR, for [a-zA-Z_][a-ZA-Z0-9_]# characters in "VAR" + deserialized+=( "${(Q)${${(j: :)__wrd}//(#b)((\$([0-9]##|[a-zA-Z_][a-zA-Z0-9_]#))|(\$\{([0-9]##|[a-zA-Z_][a-zA-Z0-9_]#)\})|(#s)~)/${(P)${${${${match[1]##\$\{(#c0,1)}%\}}:#\~}:-HOME}}}}" ) + FAST_HIGHLIGHT[chroma-fpath_peq-elements]="${(j: :)${(q@)deserialized}}" + } + + return 1 +} + +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-git.ch b/.zsh/fsh/→chroma/-git.ch new file mode 100644 index 0000000..12a97b3 --- /dev/null +++ b/.zsh/fsh/→chroma/-git.ch @@ -0,0 +1,954 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `git'. It colorizes the part of command +# line that holds `git' invocation. + +(( FAST_HIGHLIGHT[-git.ch-chroma-def] )) && return 1 + +FAST_HIGHLIGHT[-git.ch-chroma-def]=1 + +typeset -gA fsh__git__chroma__def +fsh__git__chroma__def=( + ## + ## No subcommand + ## + ## {{{ + + subcmd:NULL "NULL_0_opt" + NULL_0_opt "(-C|--exec-path=|--git-dir=|--work-tree=|--namespace=|--super-prefix=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || -c + <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP + <<>> __style=\${FAST_THEME_NAME}optarg-string // NO-OP + || (--version|--help|--html-path|--man-path|--info-path|-p|--paginate| + -P|--no-pager|--no-replace-objects|--bare) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + + "subcommands" "::→chroma/-git-get-subcommands" # run a function (the :: causes this) and use `reply' + #"subcommands" "(fetch|pull)" # run a function (the :: causes this) and use `reply' + + "subcmd-hook" "→chroma/-git-check-if-alias" + + "subcommands-blacklist" "mv,other" + + ## }}} + + ## + ## `FETCH' + ## + ## {{{ + + subcmd:fetch "FETCH_MULTIPLE_0_opt^ // FETCH_ALL_0_opt^ // FETCH_0_opt // + REMOTE_GR_1_arg // REF_#_arg // NO_MATCH_#_opt" + + # Special options (^ - has directives, currently - an :add and :del directive) + "FETCH_MULTIPLE_0_opt^" " + --multiple + <<>> __style=\${FAST_THEME_NAME}double-hyphen-option // NO-OP + || --multiple:add + <<>> REMOTE_GR_#_arg + || --multiple:del + <<>> REMOTE_GR_1_arg // REF_#_arg" # when --multiple is passed, then + # there is no refspec argument, only remotes-ids + # follow unlimited # of them, hence the # in the + # REMOTE_GR_#_arg + + # Special options (^ - has directives - an :del-directive) + "FETCH_ALL_0_opt^" " + --all + <<>> __style=\${FAST_THEME_NAME}double-hyphen-option // NO-OP + || --all:del + <<>> REMOTE_GR_1_arg // REF_#_arg" # --all can be only followed by options + + # FETCH_0_opt. FETCH-options (FETCH is an identifier) at position 0 -> + # -> before any argument + FETCH_0_opt " + (--depth=|--deepen=|--shallow-exclude=|--shallow-since=|--receive-pack=| + --refmap=|--recurse-submodules=|-j|--jobs=|--submodule-prefix=| + --recurse-submodules-default=|-o|--server-option=|--upload-pack| + --negotiation-tip=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (--help|--all|-a|--append|--unshallow|--update-shallow|--dry-run|-f|--force| + -k|--keep|--multiple|-p|--prune|-n|--no-tags|-t|--tags|--no-recurse-submodules| + -u|--update-head-ok|-q|--quiet|-v|--verbose|--progress| + -4|--ipv4|-6|--ipv6) + <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" + # Above: note the two <<>>-separated blocks for options that have + # some arguments – the second pair of action/handler is being + # run when an option argument is occurred (first one: the option + # itself). If there is only one <<>>-separated block, then the option + # is set to be argument-less. The argument is a) -o/--option argument + # and b) -o/--option=argument. + + REMOTE_GR_1_arg "NO-OP // ::→chroma/-git-verify-remote-or-group" # This definition is generic, reused later + "REF_#_arg" "NO-OP // ::→chroma/-git-verify-ref" # This too + "REMOTE_GR_#_arg" "NO-OP // ::→chroma/-git-verify-remote-or-group" # and this too + # The hash `#' above denotes: an argument at any position + # It will nicely match any following (above the first explicitly + # numbered ones) arguments passed when using --multiple + + # A generic action + NO_MATCH_\#_opt "* <<>> __style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" + NO_MATCH_\#_arg "__style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" + + ## }}} + + ## + ## PUSH + ## + ## {{{ + + subcmd:push "PUSH_0_opt // REMOTE_1_arg // REF_#_arg // NO_MATCH_#_opt" + + PUSH_0_opt " + (--receive-pack=|--exec=|--repo=|--push-option=|--signed=| + --force-with-lease=|--signed=|--recurse-submodules=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (--help|--all|--mirror|--tags|--follow-tags|--atomic|-n|--dry-run| + --porcelain|--delete|--tags|--follow-tags|--signed|--no-signed| + --atomic|--no-atomic|-o|--push-option|--force-with-lease| + --no-force-with-lease|-f|--force|-u|--set-upstream|--thin| + --no-thin|-q|--quiet|-v|--verbose|--progress|--no-recurse-submodules| + --verify|--no-verify|-4|--ipv4|-6|--ipv6) + <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" + + REMOTE_1_arg "NO-OP // ::→chroma/-git-verify-remote" # This definition is generic, reused later + + ### }}} + + ## + ## PULL + ## + ## {{{ + + subcmd:pull "PULL_0_opt // REMOTE_1_arg // REF_#_arg // NO_MATCH_#_opt" + + PULL_0_opt " + (--recurse-submodules=|-S|--gpg-sign=|--log=|-s|--strategy=|-X| + --strategy-option=|--rebase=|--depth=|--deepen=|--shallow-exclude=| + --shallow-since=|--negotiation-tip|--upload-pack|-o|--server-option=| + --no-recurse-submodules=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (--help|-q|--quiet|-v|--verbose|--progress|--no-recurse-submodules| + --commit|--no-commit|--edit|--no-edit|--ff|--no-ff|--ff-only| + --log|--no-log|--signoff|--no-signoff|--stat|-n|--no-stat|--squash| + --no-squash|--verify-signatures|--no-verify-signatures|--summary| + --no-summary|--allow-unrelated-histories|-r|--rebase|--no-rebase| + --autostash|--no-autostash|--all|-a|--append|--unshallow| + --update-shallow|-f|--force|-k|--keep|--no-tags|-u|--update-head-ok| + --progress|-4|--ipv4|-6|--ipv6|--recurse-submodules) + <<>> __style=\${FAST_THEME_NAME}single-hyphen-option // NO-OP" + + ## }}} + + ## + ## COMMIT + ## + ## {{{ + + subcmd:commit "COMMIT_#_opt // FILE_#_arg // NO_MATCH_#_opt" + + "COMMIT_#_opt" " + (-m|--message=|-am) + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action + || (--help|-a|--all|-p|--patch|--reset-author|--short|--branch| + --porcelain|--long|-z|--null|-s|--signoff|-n|--no-verify| + --allow-empty|--allow-empty-message|-e|--edit|--no-edit| + --amend|--no-post-rewrite|-i|--include|-o|--only|--untracked-files| + -v|--verbose|-q|--quiet|--dry-run|--status|--no-status|--no-gpg-sign) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (-C|--reuse-message=|-c|--reedit-message=|--fixup=|--squash=| + -F|--file=|--author=|--date=|-t|--template=|--cleanup=| + -u|--untracked-files=|-S|--gpg-sign=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action" + + # A generic action + "FILE_#_arg" "NO-OP // ::→chroma/-git-verify-file" + + ## }}} + + ## + ## MERGE + ## + ## {{{ + + subcmd:merge "MERGE_0_opt // COMMIT_#_arg" + MERGE_0_opt + "(-m) + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action + (-S|--gpg-sign=|--log=|-e|--strategy=|-X|--strategy-option=|-F| + --file) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (--help|--commit|--no-commit|-e|--edit|--no-edit|--ff|--no-ff|--ff-only| + --log|--no-log|--signoff|--no-signoff|-n|--stat|--no-stat|--squash| + --no-squash|--verify-signatures|--no-verify-signatures|--summary| + --no-summary|-q|--quiet|-v|--verbose|--progress|--no-progress| + --allow-unrelated-histories|--rerere-autoupdate|--no-rerere-autoupdate| + --abort|--continue) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + COMMIT_\#_arg "NO-OP // ::→chroma/-git-verify-commit" + + ## }}} + + ## + ## RESET + ## + ## {{{ + + subcmd:reset "RESET_0_opt^ // RESET_0_opt // RESET_#_arg // NO_MATCH_#_opt" + "RESET_0_opt^" " + (--soft|--mixed|--hard|--merge|--keep) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (--soft|--mixed|--hard|--merge|--keep):del + <<>> RESET_0_opt // RESET_#_arg + || (--soft|--mixed|--hard|--merge|--keep):add + <<>> RESET_1_arg // NO_MATCH_#_arg + " + + RESET_0_opt " + (-q|-p|--patch) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + RESET_1_arg "NO-OP // ::→chroma/-git-verify-commit" + + "RESET_#_arg" "NO-OP // ::→chroma/-git-RESET-verify-commit-or-file" + + + ## }}} + + ## + ## REVERT + ## + ## {{{ + + subcmd:revert "REVERT_SEQUENCER_0_opt^ // REVERT_0_opt // REVERT_#_arg // NO_MATCH_#_opt" + REVERT_0_opt " + (-m|--mainline|-S|--gpg-sign=|--strategy=|-X|--strategy-option=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (-e|--edit|--no-edit|-n|--no-commit|-s|--signoff) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + "REVERT_SEQUENCER_0_opt^" " + (--continue|--quit|--abort) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (--continue|--quit|--abort):del + <<>> REVERT_0_opt // REVERT_#_arg + || (--continue|--quit|--abort):add + <<>> NO_MATCH_#_arg" + + "REVERT_#_arg" "NO-OP // ::→chroma/-git-verify-commit" + + ## }}} + + ## + ## DIFF + ## + ## TODO: When a second argument is also a path and it points to a directory, then + ## git appends the previous file name to it – good to implement this too + ## {{{ + + subcmd:diff "DIFF_NO_INDEX_0_opt^ // DIFF_0_opt // COMMIT_FILE_DIR_#_arg // NO_MATCH_#_opt" + + "DIFF_NO_INDEX_0_opt^" " + --no-index + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || --no-index:del + <<>> COMMIT_FILE_DIR_#_arg + || --no-index:add + <<>> FILE_1_arg // FILE_2_arg // NO_MATCH_#_arg" + DIFF_0_opt " + (-U|--unified=|--anchored=|--diff-algorithm=|--stat=|--dirstat| + --submodule=|--color=|--color-moved=|--color-moved-ws=|--word-diff=| + --word-diff-regex=|--color-words=|--ws-error-highlight=|--abbrev=| + -B|--break-rewrites=|-M|--find-renames=|-C|--find-copies=|-l| + --diff-filter=|-S|-G|--find-object=|--relative=|-O|--relative=| + --inter-hunk-context=|--ignore-submodules=|--src-prefix=|--dst-prefix=| + --line-prefix=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (-p|--patch|-u|-s|--no-patch|--raw|--patch-with-raw|--indent-heuristic| + --no-indent-heuristic|--minimal|--patience|--histogram|--stat| + --compact-summary|--numstat|--shortstat|--dirstat|--summary| + --patch-with-stat|-z|--name-only|--name-status|--submodule|--no-color| + --color-moved|--word-diff|--color-words|--no-renames|--check| + --full-index|--binary|--abbrev|--break-rewrites|--find-renames| + --find-copies|--find-copies-harder|-D|--pickaxe-all|--pickaxe-regex| + --irreversible-delete|-R|--relative|-a|--text|--ignore-cr-at-eol| + --ignore-space-at-eol|-b|--ignore-space-change|-w|--ignore-all-space| + --ignore-blank-lines|-W|--function-context|--exit-code|--quiet| + --ext-diff|--no-ext-diff|--textconv|--no-textconv|--ignore-submodules| + --no-prefix|--ita-invisible-in-index|-1|--base|-2|--ours|-3|--theirs| + -0|--cached) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + # A generic action + "COMMIT_FILE_DIR_#_arg" "NO-OP // ::→chroma/-git-verify-commit-or-file-or-dir" + + # A generic action + "FILE_1_arg" "NO-OP // ::→chroma/-git-verify-file" + + # A generic action + "FILE_2_arg" "NO-OP // ::→chroma/-git-verify-file" + + ## }}} + + ## + ## ADD + ## + ## {{{ + + subcmd:add "ADD_0_opt // FILE_OR_DIR_#_arg // NO_MATCH_#_opt" + + ADD_0_opt " + --chmod= + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (-v|--verbose|-f|--force|-i|--interactive|-n|--dry-run| + -p|--patch|-e|--edit|--all|--no-all|-A|--all|--no-all| + --ignore-removal|--no-ignore-removal|-u|--update|-N| + --intent-to-add|--refresh|--ignore-errors|--ignore-missing| + --renormalize|--no-warn-embedded-repo) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + FILE_OR_DIR_#_arg "NO-OP // ::→chroma/-git-verify-file-or-dir" + + ## }}} + + ## + ## CHECKOUT + ## + ## {{{ + + subcmd:checkout "CHECKOUT_BRANCH_0_opt^ // + CHECKOUT_0_opt // FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg // FILE_#_arg // + FILE_#_arg // NO_MATCH_#_opt" + + "CHECKOUT_BRANCH_0_opt^" " + (-b|-B|--orphan) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (-b|-B|--orphan):del + <<>> FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg // FILE_#_arg // FILE_#_arg + || (-b|-B|--orphan):add + <<>> NEW_BRANCH_1_arg // COMMIT_2_arg // NO_MATCH_#_arg" + + NEW_BRANCH_1_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" + + COMMIT_2_arg "NO-OP // ::→chroma/-git-verify-commit" + + CHECKOUT_0_opt " + --conflict= + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (-q|--quiet|--progress|--no-progress|-f|--force|--ours|--theirs| + -b|-B|-t|--track|--no-track|-l|--detach|--orphan| + --ignore-skip-worktree-bits|-m|--merge|-p|--patch| + --ignore-other-worktrees|--no-ignore-other-worktrees) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + # A generic action + COMMIT_1_arg "NO-OP // ::→chroma/-git-verify-commit" + + # Unused + FILE_OR_BRANCH_OR_COMMIT_1_arg "NO-OP // ::→chroma/-git-file-or-ubranch-or-commit-verify" + FILE_OR_DIR_OR_BRANCH_OR_COMMIT_1_arg "NO-OP // ::→chroma/-git-file-or-dir-or-ubranch-or-commit-verify" + + ## }}} + + ## + ## REMOTE + ## + ## {{{ + + subcmd:remote "REMOTE_0_opt // REMOTE_ADD_1_arg // REMOTE_RENAME_1_arg // REMOTE_REMOVE_1_arg // + REMOTE_SET_HEAD_1_arg // REMOTE_SET_BRANCHES_1_arg // + REMOTE_GET_URL_1_arg // REMOTE_SET_URL_1_arg // REMOTE_SHOW_1_arg // + REMOTE_PRUNE_1_arg // REMOTE_UPDATE_1_arg" + + REMOTE_0_opt "(-v|--verbose) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_ADD_1_arg "add ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_ADD_OPTS_1_opt // REMOTE_A_NAME_2_arg // + REMOTE_A_URL_3_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_RENAME_1_arg "rename ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_2_arg // REMOTE_A_NAME_3_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_REMOVE_1_arg "remove ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_SET_HEAD_1_arg "set-head ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_2_arg // BRANCH_3_arg // + REMOTE_SET_HEAD_OPTS_1_opt // REMOTE_SET_HEAD_OPTS_2_opt // + NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_SET_BRANCHES_1_arg "set-branches ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_SET_BRANCHES_OPTS_1_opt // REMOTE_2_arg // + BRANCH_#_arg // NO_MATCH_#_opt" + + REMOTE_GET_URL_1_arg "get-url ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_GET_URL_OPTS_1_opt // REMOTE_2_arg // + NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_SET_URL_1_arg "set-url ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_SET_URL_OPTS_1_opt^ // + REMOTE_2_arg // REMOTE_A_URL_3_arg // REMOTE_A_URL_4_arg // + NO_MATCH_#_opt // NO_MATCH_#_arg" + + REMOTE_SHOW_1_arg "show ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_SHOW_OPTS_1_opt // REMOTE_#_arg // NO_MATCH_#_opt" + + REMOTE_PRUNE_1_arg "prune ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_PRUNE_OPTS_1_opt // REMOTE_#_arg // NO_MATCH_#_opt" + + REMOTE_UPDATE_1_arg "update ::::: __style=${FAST_THEME_NAME}subcommand // NO-OP <<>> + add:REMOTE_UPDATE_OPTS_1_opt // REMOTE_GR_#_arg // NO_MATCH_#_opt" + + REMOTE_ADD_OPTS_1_opt " + (-t|-m|--mirror=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (-f|--tags|--no-tags) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_SET_HEAD_OPTS_1_opt " + (-a|--auto|-d|--delete) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_SET_HEAD_OPTS_2_opt " + (-a|--auto|-d|--delete) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_SET_BRANCHES_OPTS_1_opt " + --add + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_GET_URL_OPTS_1_opt " + (--push|--all) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + "REMOTE_SET_URL_OPTS_1_opt^" " + --push|--add|--delete + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (--add|--delete):del + <<>> REMOTE_A_URL_4_arg" + + REMOTE_SHOW_OPTS_1_opt " + -n + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_PRUNE_OPTS_1_opt " + (-n|--dry-run) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_UPDATE_OPTS_1_opt " + (-p|--prune) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + REMOTE_A_NAME_2_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" + REMOTE_A_NAME_3_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" + REMOTE_A_URL_3_arg "NO-OP // ::→chroma/main-chroma-std-verify-url" + REMOTE_A_URL_4_arg "NO-OP // ::→chroma/main-chroma-std-verify-url" + BRANCH_3_arg "NO-OP // ::→chroma/-git-verify-branch" + BRANCH_\#_arg "NO-OP // ::→chroma/-git-verify-branch" + REMOTE_2_arg "NO-OP // ::→chroma/-git-verify-remote" + REMOTE_\#_arg "NO-OP // ::→chroma/-git-verify-remote" + + ## }}} + + ## + ## LOG + ## + + subcmd:log "LOG_0_opt // LOG_1_arg // FILE_#_arg // NO_MATCH_#_opt" + + LOG_0_opt " + (--decorate=|--decorate-refs=|--decorate-refs-exclude=|-L|-n|--max-count=| + --skip=|--since=|--after=|--until=|--before=|--author=|--committer=| + --grep-reflog=|--grep=|--min-parents=|--max-parents=|--branches=|--tags=| + --remotes=|--glob=|--exclude=|--no-walk=|--pretty=|--format=|--encoding=| + --expand-tabs=|--notes=|--show-notes=|--date=|--show-linear-break=|-U| + --unified=|--anchored=|--diff-algorithm=|--stat=|--dirstat=|--submodule=| + --color=|--color-moved=|--color-moved-ws=|--word-diff=|--word-diff-regex=| + --color-words=|--ws-error-highlight=|--abbrev=|-B|--break-rewrites=|-M| + --find-renames=|-C|--find-copies=|-l|--diff-filter=|-S|-G|--find-object=| + --relative=|-O|--relative=|--inter-hunk-context=|--ignore-submodules=| + --src-prefix=|--dst-prefix=|--line-prefix=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + + || (--follow|--decorate|--no-decorate|--source|--use-mailmap|--full-diff| + --log-size|--all-match|--invert-grep|-i|--regexp-ignore-case|--basic-regexp| + -E|--extended-regexp|-F|--fixed-strings|-P|--perl-regexp|--remove-empty| + --merges|--no-merges|--no-min-parents|--no-max-parents|--first-parent| + --not|--all|--branches|--tags|--remotes|--reflog|--single-worktree| + --ignore-missing|--bisect|--stdin|--cherry-mark|--cherry-pick|--left-only| + --right-only|--cherry|-g|--walk-reflogs|--merge|--boundary|--simplify-by-decoration| + --full-history|--dense|--sparse|--simplify-merges|--ancestry-path|--date-order| + --author-date-order|--topo-order|--reverse|--no-walk|--do-walk|--pretty| + --abbrev-commit|--no-abbrev-commit|--oneline|--expand-tabs|--no-expand-tabs| + --notes|--no-notes|--show-notes|--no-standard-notes|--show-signature| + --relative-date|--parents|--children|--left-right|--graph|--show-linear-break| + -c|--cc|-m|-r|-t|-p|-u|--patch|-s|--no-patch|--raw|--patch-with-raw| + --indent-heuristic|--no-indent-heuristic|--minimal|--patience|--histogram| + --stat|--compact-summary|--numstat|--shortstat|--dirstat|--summary| + --patch-with-stat|-z|--name-only|--name-status|--submodule|--color|--no-color| + --color-moved|--word-diff|--color-words|--no-renames|--check|--full-index| + --binary|--abbrev|--break-rewrites|--find-renames| + --find-copies|--find-copies-harder|-D|--irreversible-delete| + --pickaxe-all|--pickaxe-regex|-R|--relative|-a|--text|--ignore-cr-at-eol| + --ignore-space-at-eol|-b|--ignore-space-change|-w|--ignore-all-space| + --ignore-blank-lines|-W|--function-context|--ext-diff|--no-ext-diff| + --textconv|--no-textconv|--ignore-submodules|--no-prefix| + --ita-invisible-in-index) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + LOG_1_arg "NO-OP // ::→chroma/-git-verify-rev-range-or-file" + + ## + ## TAG + ## + + subcmd:tag "TAG_D_0_opt^ // TAG_L_0_opt^ // TAG_V_0_opt^ // TAG_0_opt^" + + "TAG_0_opt^" " + (-u|--local-user=|--cleanup=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || -m + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-action + <<>> NO-OP // ::→chroma/-git-commit-msg-opt-ARG-action + || (-F|--file) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/-git-verify-file + || (-a|--annotate|-s|--sign|-f|-e|--edit) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || (-u|--local-user=|--cleanup=|-m|-F|--file|-a|--annotate|-s|--sign| + -f|-e|--edit):add + <<>> TAG_NEW_1_arg // COMMIT_2_arg // NO_MATCH_#_arg // + NO_MATCH_#_opt" + + TAG_NEW_1_arg "NO-OP // ::→chroma/-git-verify-correct-branch-name" + + TAG_1_arg "NO-OP // ::→chroma/-git-verify-tag-name" + + "TAG_D_0_opt^" " + (-d) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || -d:add + <<>> TAG_#_arg // NO_MATCH_#_opt + || -d:del + <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" + + "TAG_#_arg" "NO-OP // ::→chroma/-git-verify-tag-name" + + "TAG_L_0_opt^" " + (-l) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || -l:add + <<>> TAG_L_0_opt // TAG_PAT_#_arg // NO_MATCH_#_opt + || -l:del + <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" + + TAG_L_0_opt " + (-n|--contains|--no-contains|--points-at|--column=|--sort=|--format=| + --color=) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action + || (--column|--no-column|--create-reflog|--merged|--no-merged|--color|-i) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + "TAG_PAT_#_arg" "NO-OP // ::→chroma/main-chroma-std-verify-pattern" + + "TAG_V_0_opt^" " + (-v) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + || -v:add + <<>> TAG_V_0_opt // TAG_#_arg // NO_MATCH_#_opt + || -v:del + <<>> TAG_0_opt // TAG_NEW_1_arg // COMMIT_2_arg" + + TAG_V_0_opt " + --format= + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-ARG-action" + + ## + ## All remaining subcommands + ## + ## {{{ + + "subcmd:*" "CATCH_ALL_#_opt" + "CATCH_ALL_#_opt" "* <<>> NO-OP // ::→chroma/main-chroma-std-aopt-SEMI-action" + + ## }}} +) + +# Called after entering just "git" on the command line +→chroma/-git-first-call() { + # Called for the first time - new command + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables + FAST_HIGHLIGHT[chroma-git-counter]=0 + FAST_HIGHLIGHT[chroma-git-got-subcommand]=0 + FAST_HIGHLIGHT[chroma-git-subcommand]="" + FAST_HIGHLIGHT[chrome-git-got-msg1]=0 + FAST_HIGHLIGHT[chrome-git-got-anymsg]=0 + FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=0 + FAST_HIGHLIGHT[chroma-git-checkout-new]=0 + FAST_HIGHLIGHT[chroma-git-fetch-multiple]=0 + FAST_HIGHLIGHT[chroma-git-branch-change]=0 + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 + FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit]=0 + FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=0 + return 1 +} + +→chroma/-git-check-if-alias() { + local _wrd="$1" + local -a _result + + typeset -ga fsh__chroma__git__aliases + _result=( ${(M)fsh__chroma__git__aliases[@]:#${_wrd}[[:space:]]##*} ) + →chroma/main-chroma-print "Got is-alias-_result: $_result" + [[ -n "$_result" ]] && \ + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="${${${_result#* }## ##}%% *}" +} + +# A hook that returns the list of git's +# available subcommands in $reply +→chroma/-git-get-subcommands() { + local __svalue + integer __ivalue + LANG=C .fast-run-command "git help -a" chroma-${FAST_HIGHLIGHT[chroma-current]}-subcmd-list "" $(( 15 * 60 )) + if [[ "${__lines_list[1]}" = See* ]]; then + # (**) + # git >= v2.20, the aliases in the `git help -a' command + __lines_list=( ${${${${(M)__lines_list[@]:#([[:space:]](#c3,3)[a-zA-Z0-9_]*|Command aliases)}##[[:space:]]##}//(#s)Command\ aliases(#e)/Command_aliases}} ) + __svalue="+${__lines_list[(I)Command_aliases]}" + __lines_list[1,__svalue-1]=( ${(@)__lines_list[1,__svalue-1]%%[[:space:]]##*} ) + else + # (**) + # git < v2.20, add aliases through extra code + __lines_list=( ${(s: :)${(M)__lines_list[@]:# [a-z]*}} ) + + __svalue=${#__lines_list} + # This allows to check if the command is an alias - we want to + # highlight the aliased command just like the target command of + # the alias + .fast-run-command "+git config --get-regexp 'alias.*'" chroma-${FAST_HIGHLIGHT[chroma-current]}-alias-list "[[:space:]]#alias." $(( 15 * 60 )) + fi + + __tmp=${#__lines_list} + typeset -ga fsh__chroma__git__aliases + fsh__chroma__git__aliases=( ${__lines_list[__svalue+1,__tmp]} ) + [[ ${__lines_list[__svalue]} != "Command_aliases" ]] && (( ++ __svalue, __ivalue=0, 1 )) || (( __ivalue=1 )) + __lines_list[__svalue,__tmp]=( ${(@)__lines_list[__svalue+__ivalue,__tmp]%%[[:space:]]##*} ) + reply=( "${__lines_list[@]}" ) +} + +# A generic handler +→chroma/-git-verify-remote() { + local _wrd="$4" + .fast-run-git-command "git remote" "chroma-git-remotes-$PWD" "" 10 + [[ -n ${__lines_list[(r)$_wrd]} ]] && { + __style=${FAST_THEME_NAME}correct-subtle; return 0 + } || { + [[ $_wrd != *:* ]] && { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } + } +} + +# A generic handler - checks if given ref is correct +→chroma/-git-verify-ref() { + local _wrd="$4" + _wrd="${_wrd%%:*}" + .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-refs-$PWD" "refs/heads" 10 + [[ -n ${__lines_list[(r)$_wrd]} ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } +} + +# A generic handler - checks if given remote or group is correct +→chroma/-git-verify-remote-or-group() { + →chroma/-git-verify-remote "$@" && return 0 + # The check for a group is to follow below + integer _start="$2" _end="$3" + local _scmd="$1" _wrd="$4" +} + +# A generic handler - checks whether the file exists +→chroma/-git-verify-file() { + integer _start="$2" _end="$3" __pos __start __end + local _wrd="$4" bg + + [[ -f $_wrd ]] && { + (( __start=_start, __end=_end, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]%bg=*} + ((1)) + } || { + (( __start=_start, __end=_end, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]%bg=*} + } + + [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && \ + ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != \ + ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} + ]] && \ + for (( __pos = 1; __pos <= (_end-_start); __pos++ )) { + [[ ${_wrd[__pos]} == "/" ]] && { + [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} = *bg=* ]] && { + (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") + ((1)) + } || { + (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}${bg:+,$bg}") + } + } + } +} + +# A generic handler - checks whether the file exists +→chroma/-git-verify-file-or-dir() { + integer _start="$2" _end="$3" __pos __start __end retval + local _wrd="$4" bg + + __style= + [[ -f $_wrd || -d $_wrd ]] && { + (( __start=_start, __end=_end, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]%bg=*} + ((1)) + } || { + (( __start=_start, __end=_end, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + bg=${(M)FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]%bg=*} + retval=1 + } + + [[ -n ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} && \ + ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} != \ + ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} + ]] && \ + for (( __pos = 1; __pos <= (_end-_start); __pos++ )) { + [[ ${_wrd[__pos]} == "/" ]] && { + [[ ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]} = *bg=* ]] && { + (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}") + ((1)) + } || { + (( __start=_start+__pos-__PBUFLEN, __start >= 0 )) && \ + reply+=("$(( __start - 1 )) $__start ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path_pathseparator]}${bg:+,$bg}") + } + } + } + return $retval +} + +→chroma/-git-verify-branch() { + local _wrd="$4" + .fast-run-git-command "git for-each-ref --format='%(refname:short)'" "chroma-git-branches-$PWD" "refs/heads" 10 + if [[ -n ${__lines_list[(r)$_wrd]} ]] { + __style=${FAST_THEME_NAME}correct-subtle; return 0 + } elif [[ -n ${__lines_list[(r)origin/$_wrd]} ]] { + __style=${FAST_THEME_NAME}correct-subtle; return 0 + } else { + __style=${FAST_THEME_NAME}incorrect-subtle; return 1 + } +} + +→chroma/-git-verify-also-unfetched-ref() { + local _wrd="$4" + .fast-run-git-command "git config --get checkout.defaultRemote" \ + "chroma-git-defaultRemote-$PWD" "" 10 + local remote="${__lines_list[1]:-origin}" + .fast-run-git-command "git rev-list --count --no-walk + --glob=\"refs/remotes/$remote/$_wrd\"" \ + "chroma-git-unfetched-ref-$PWD" "" 10 + + (( __lines_list[1] )) && { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } +} + +# A generic handler +→chroma/-git-file-or-ubranch-or-commit-verify() { + →chroma/-git-verify-commit "$@" && return + →chroma/-git-verify-file "$@" && return + →chroma/-git-verify-branch "$@" && return + →chroma/-git-verify-also-unfetched-ref "$@" +} + +# A generic handler +→chroma/-git-file-or-dir-or-ubranch-or-commit-verify() { + →chroma/-git-verify-commit "$@" && return + →chroma/-git-verify-file-or-dir "$@" && return + →chroma/-git-verify-branch "$@" && return + →chroma/-git-verify-also-unfetched-ref "$@" +} + +# A generic handler +→chroma/-git-verify-correct-branch-name() { + local _wrd="$4" + →chroma/-git-verify-commit "$@" && \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 0; } + + →chroma/-git-verify-remote "$@" && \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 0; } + + [[ "$_wrd" != ./* && "$_wrd" != *..* && "$_wrd" != *[~\^\ $'\t']* && + "$_wrd" != */ && "$_wrd" != *.lock && "$_wrd" != *\\* ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } +} + +# A generic handler that checks if given commit reference is correct +→chroma/-git-verify-commit() { + local _wrd="$4" + __lines_list=() + .fast-run-git-command --status "git rev-parse --verify --quiet \"$_wrd\"" \ + "chroma-git-commits-$PWD-$_wrd" "" $(( 1.5 * 60 )) + if (( __lines_list[1] == 0 )); then + __style=${FAST_THEME_NAME}correct-subtle + return 0 + fi + __style=${FAST_THEME_NAME}incorrect-subtle + return 1 +} + +# A generic handler that checks if given commit reference +# is correct or if it's a file that exists +→chroma/-git-verify-commit-or-file() { + →chroma/-git-verify-commit "$@" && return + →chroma/-git-verify-file "$@" +} + +# A generic handler that checks if given commit reference +# is correct or if it's a file or directives that exists +→chroma/-git-verify-commit-or-file-or-dir() { + →chroma/-git-verify-commit "$@" && return + →chroma/-git-verify-file-or-dir "$@" +} + +# A generic handler that checks if given revision range +# is correct or if a file of that name exists +→chroma/-git-verify-rev-range-or-file() { + local _wrd="$4" + + →chroma/-git-verify-commit "$@" && return 0 + + if [[ "$_wrd" = *..* ]]; then + (( FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file] )) && { + →chroma/-git-verify-file "$@" && return 0 + __style=${FAST_THEME_NAME}unknown-token + return 1 + } + + __style="" + return 0 + fi + + →chroma/-git-verify-file "$@" && \ + { FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1; return 0; } + + __style="" + return 1 +} + +→chroma/-git-verify-tag-name() { + local _wrd="$4" + .fast-run-git-command "git tag" "chroma-git-tags-$PWD" "" $(( 2*60 )) + [[ -n ${__lines_list[(r)$_wrd]} ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + __style=${FAST_THEME_NAME}incorrect-subtle +} + +# A handler for the commit's -m/--message options.Currently +# does the same what →chroma/main-chroma-std-aopt-action does +→chroma/-git-commit-msg-opt-action() { + →chroma/main-chroma-std-aopt-action "$@" +} + +# A handler for the commit's -m/--message options' argument +→chroma/-git-commit-msg-opt-ARG-action() { + integer _start="$2" _end="$3" + local _scmd="$1" _wrd="$4" + + (( __start >= 0 )) || return + + # Match the message body in case of an --message= option + if [[ "$_wrd" = (#b)(--message=)(*) && -n "${match[2]}" ]]; then + _wrd="${(Q)${match[2]//\`/x}}" + # highlight --message=>>something<< + reply+=("$(( __start+10 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") + elif [[ "$_wrd" != --message ]]; then + # highlight the message's body + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") + fi + + integer length=${FAST_HIGHLIGHT[git-cmsg-len]:-50} + + if (( ${#_wrd} > length )); then + for (( __idx1 = 1, __idx2 = 1; __idx1 <= length; ++ __idx1, ++ __idx2 )); do + # Use __arg from the fast-highlight-process's scope + while [[ "${__arg[__idx2]}" != "${_wrd[__idx1]}" ]]; do + (( ++ __idx2 )) + (( __idx2 > __asize )) && { __idx2=-1; break; } + done + (( __idx2 == -1 )) && break + done + if (( __idx2 != -1 )); then + if [[ -n "${match[1]}" ]]; then + reply+=("$(( __start+__idx2 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + else + reply+=("$(( __start+__idx2-1 )) $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + fi + fi +} + +# A RESET handler +# TODO: differentiate tree-ish from commit +→chroma/-git-RESET-verify-commit-or-file() { + →chroma/-git-verify-commit "$@" && { + →chroma/-git-verify-file "$@" && { + # TODO: with -p/--patch, the are optional, + # and this argument will be taken as a commit in a + # specific circumstances + FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1 + return 0 + } + + (( FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file] || + FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit] )) && \ + { __style=${FAST_THEME_NAME}unknown-token; return 1; } + + FAST_HIGHLIGHT[chroma-git-reset-etc-saw-commit]=1 + + __style=${FAST_THEME_NAME}correct-subtle + + return 0 + } + + →chroma/-git-verify-file "$@" && \ + { FAST_HIGHLIGHT[chroma-git-reset-etc-saw-file]=1; return 0; } + + return 1 +} + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-grep.ch b/.zsh/fsh/→chroma/-grep.ch new file mode 100644 index 0000000..54309bf --- /dev/null +++ b/.zsh/fsh/→chroma/-grep.ch @@ -0,0 +1,89 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars +integer __idx1 __idx2 + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-grep-counter]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-grep-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-grep-counter] )) + + # First non-option token is the pattern (regex), we will + # highlight it. + if (( FAST_HIGHLIGHT[chroma-grep-counter] == 1 )); then + [[ "$__wrd" = \"* ]] && __style=${FAST_THEME_NAME}double-quoted-argument + [[ "$__wrd" = \'* ]] && __style=${FAST_THEME_NAME}single-quoted-argument + [[ "$__wrd" = \$\'* ]] && __style=${FAST_THEME_NAME}dollar-quoted-argument + [[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + __style="" + + __chars="*+\\)([]^\$" + __idx1=__start_pos + __idx2=__start_pos + while [[ "$__wrd" = (#b)[^$__chars]#([\\][\\])#((+|\*|\[|\]|\)|\(|\^|\$)|[\\](+|\*|\[|\]|\)|\(|\^|\$))(*) ]]; do + if [[ -n "${match[3]}" ]]; then + __idx1+=${mbegin[3]}-1 + __idx2=__idx1+${mend[3]}-${mbegin[3]}+1 + (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-operator]}") + __idx1=__idx2 + else + __idx1+=${mbegin[5]}-1 + fi + __wrd="${match[5]}" + done + elif (( FAST_HIGHLIGHT[chroma-grep-counter] == 2 )); then + # Handle paths, etc. normally - just pass-through to the big + # highlighter (the main FSH highlighter, used before chromas). + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-hub.ch b/.zsh/fsh/→chroma/-hub.ch new file mode 100644 index 0000000..2f0626a --- /dev/null +++ b/.zsh/fsh/→chroma/-hub.ch @@ -0,0 +1,51 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" + +if (( __first_call )); then + chroma/-git.ch $* + return 1 +fi +[[ "$__arg_type" = 3 ]] && return 2 + +if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +fi + +if [[ "$__wrd" != -* ]] && (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then + .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 5 * 60 )) + # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix + __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) + + if (( ${#__lines_list} > 0 )); then + # (*) + # First remove alias name (#*[[:space:]]) and the space after it, then + # remove any leading spaces from what's left (##[[:space:]]##), then + # remove everything except the first word that's in the left line + # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") + FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" + else + FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" + fi + if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "browse" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci-status" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "compare" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "create" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "delete" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fork" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "issue" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pr" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull-request" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "release" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "sync" ]]; then + FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") + (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) + (( this_word = next_word )) + _start_pos=$4 + return 0 + fi +fi + +chroma/-git.ch $* diff --git a/.zsh/fsh/→chroma/-ionice.ch b/.zsh/fsh/→chroma/-ionice.ch new file mode 100644 index 0000000..f328f83 --- /dev/null +++ b/.zsh/fsh/→chroma/-ionice.ch @@ -0,0 +1,117 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) +# All rights reserved. +# +# The only licensing for this file follows. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- + +setopt local_options extendedglob warn_create_global typeset_silent + +# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. +# So the below 8192 assignment takes care that next token will be routed to chroma. +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style option_start=0 option_end=0 number_start=0 number_end=0 +local -a match mbegin mend + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global string variables. + FAST_HIGHLIGHT[ionice-option-argument]=0 + + # Set style for region_highlight entry. It is used below in + # '[[ -n "$__style" ]] ...' line, which adds highlight entry, + # like "10 12 fg=green", through `reply' array. + # + # Could check if command `example' exists and set `unknown-token' + # style instead of `command' + __style=${FAST_THEME_NAME}precommand + +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if (( FAST_HIGHLIGHT[ionice-option-argument] )); then + (( FAST_HIGHLIGHT[ionice-option-argument] = 0 )) + [[ $__wrd == [0-9]# ]] && __style=${FAST_THEME_NAME}mathnum || __style=${FAST_THEME_NAME}incorrect-subtle + else + case $__wrd in + --(class(data|)|(u|p(g|))id)) + __style=${FAST_THEME_NAME}double-hyphen-option + FAST_HIGHLIGHT[ionice-option-argument]=1 + ;; + -[cnpPu]) + __style=${FAST_THEME_NAME}single-hyphen-option + FAST_HIGHLIGHT[ionice-option-argument]=1 + ;; + --*) + __style=${FAST_THEME_NAME}double-hyphen-option + ;; + -*) + __style=${FAST_THEME_NAME}single-hyphen-option + ;; + *) + this_word=1 + next_word=2 + return 1 + ;; + esac + fi +} + +# Add region_highlight entry (via `reply' array). +# If 1 will be added to __start_pos, this will highlight "oken". +# If 1 will be subtracted from __end_pos, this will highlight "toke". +# $PREBUFFER is for specific situations when users does command \ +# i.e. when multi-line command using backslash is entered. +# +# This is a common place of adding such entry, but any above code can do +# it itself (and it does in other chromas) and skip setting __style to +# this way disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves. +# _start_pos=$_end_pos advainces pointers in command line buffer. +# +# To pass through means to `return 1'. The highlighting of +# this single token is then done by fast-syntax-highlighting's +# main code and chroma doesn't have to do anything. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-lab.ch b/.zsh/fsh/→chroma/-lab.ch new file mode 100644 index 0000000..9c76e03 --- /dev/null +++ b/.zsh/fsh/→chroma/-lab.ch @@ -0,0 +1,59 @@ +# vim:ft=zsh:et:sw=4 +# +# The `lab' tool after which this chroma is modeled after: +# https://github.com/zaquestion/lab +# +(( next_word = 2 | 8192 )) +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" + +if (( __first_call )); then + chroma/-git.ch $* + return 1 +fi +[[ "$__arg_type" = 3 ]] && return 2 + +if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +fi + +if [[ "$__wrd" != -* ]] && (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then + .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 5 * 60 )) + # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix + __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) + + if (( ${#__lines_list} > 0 )); then + # (*) + # First remove alias name (#*[[:space:]]) and the space after it, then + # remove any leading spaces from what's left (##[[:space:]]##), then + # remove everything except the first word that's in the left line + # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") + FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" + else + FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" + fi + if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "browse" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "mr" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "project" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "snippet" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "ci-status" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "compare" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "create" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "delete" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fork" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "issue" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pr" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull-request" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "release" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "sync" ]]; then + FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") + (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) + (( this_word = next_word )) + _start_pos=$4 + return 0 + fi +fi + +chroma/-git.ch $* diff --git a/.zsh/fsh/→chroma/-make.ch b/.zsh/fsh/→chroma/-make.ch new file mode 100644 index 0000000..e91746d --- /dev/null +++ b/.zsh/fsh/→chroma/-make.ch @@ -0,0 +1,105 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `make'. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 +local -a __lines_list reply2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables. + FAST_HIGHLIGHT[chroma-make-counter]=0 + FAST_HIGHLIGHT[chroma-make-skip-two]=0 + FAST_HIGHLIGHT[chroma-make-custom-dir]="./" + FAST_HIGHLIGHT[chroma-make-custom-file]="Makefile" + FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=0 + FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* || "$__wrd" = *=* ]]; then + [[ "$__wrd" = *=* ]] && { + __style=${FAST_THEME_NAME}variable + } || { + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + } + + if [[ "$__wrd" = (-I|-o|-W) ]]; then + FAST_HIGHLIGHT[chroma-make-skip-two]=1 + elif [[ "$__wrd" = "-C" ]]; then + FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=1 + elif [[ "$__wrd" = "-f" ]]; then + FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=1 + fi + else + if (( FAST_HIGHLIGHT[chroma-make-skip-two] )); then + FAST_HIGHLIGHT[chroma-make-skip-two]=0 + elif (( FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt] )); then + FAST_HIGHLIGHT[chroma-make-got-custom-dir-opt]=0 + FAST_HIGHLIGHT[chroma-make-custom-dir]="$__wrd" + elif (( FAST_HIGHLIGHT[chroma-make-got-custom-file-opt] )); then + FAST_HIGHLIGHT[chroma-make-got-custom-file-opt]=0 + FAST_HIGHLIGHT[chroma-make-custom-file]="$__wrd" + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-make-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-make-counter] )) + if (( FAST_HIGHLIGHT[chroma-make-counter] == 1 )); then + __wrd="${__wrd//\`/x}" + __wrd="${(Q)__wrd}" + + if [[ -f "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" ]] && \ + .fast-make-targets < "${FAST_HIGHLIGHT[chroma-make-custom-dir]%/}/${FAST_HIGHLIGHT[chroma-make-custom-file]}" + then + if [[ "${reply2[(r)$__wrd]}" ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + else + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + fi + else + # Pass-through to the big-loop outside + return 1 + fi + fi + fi +} + +# Add region_highlight entry (via `reply' array) +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-nice.ch b/.zsh/fsh/→chroma/-nice.ch new file mode 100644 index 0000000..7fa8a94 --- /dev/null +++ b/.zsh/fsh/→chroma/-nice.ch @@ -0,0 +1,138 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) +# All rights reserved. +# +# The only licensing for this file follows. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- + +setopt local_options extendedglob warn_create_global typeset_silent + +# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. +# So the below 8192 assignment takes care that next token will be routed to chroma. +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style option_start=0 option_end=0 number_start=0 number_end=0 +local -a match mbegin mend + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global string variables. + FAST_HIGHLIGHT[nice-arg-count]=0 + FAST_HIGHLIGHT[nice-increment-argument]=0 + + # Set style for region_highlight entry. It is used below in + # '[[ -n "$__style" ]] ...' line, which adds highlight entry, + # like "10 12 fg=green", through `reply' array. + # + # Could check if command `example' exists and set `unknown-token' + # style instead of `command' + __style=${FAST_THEME_NAME}precommand + +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if (( FAST_HIGHLIGHT[nice-increment-argument] )); then + (( FAST_HIGHLIGHT[nice-increment-argument] = 0 )) + [[ $__wrd = (-|+|)[0-9]## ]] \ + && __style=${FAST_THEME_NAME}mathnum \ + || __style=${FAST_THEME_NAME}incorrect-subtle + else + case $__wrd in + -(-|+|)[0-9]##) + (( option_start = __start_pos-${#PREBUFFER} , + option_end = option_start+1 , + number_start = option_end , + number_end = __end_pos-${#PREBUFFER} )) + option_style=${FAST_THEME_NAME}single-hyphen-option + ;; + (#b)(--adjustment)(=(-|+|)[0-9]#|)) + (( option_start = __start_pos-${#PREBUFFER} , + option_end = option_start+mend[1] )) + option_style=${FAST_THEME_NAME}double-hyphen-option + [[ -z $match[2] ]] \ + && (( FAST_HIGHLIGHT[nice-increment-argument] = 1 )) \ + || (( option_end += 1 , + number_start = option_start+mbegin[2]-mbegin[1]+1 , + number_end = __end_pos-${#PREBUFFER} )) + ;; + -n) + __style=${FAST_THEME_NAME}double-hyphen-option + FAST_HIGHLIGHT[nice-increment-argument]=1 + ;; + --*) + __style=${FAST_THEME_NAME}double-hyphen-option + ;; + -*) + __style=${FAST_THEME_NAME}single-hyphen-option + ;; + *) + this_word=1 + next_word=2 + return 1 + ;; + esac + + (( option_start > 0 && option_end )) \ + && reply+=("$option_start $option_end ${FAST_HIGHLIGHT_STYLES[$option_style]}") + (( number_start > 0 && number_end )) \ + && reply+=("$number_start $number_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]}") + fi +} + +# Add region_highlight entry (via `reply' array). +# If 1 will be added to __start_pos, this will highlight "oken". +# If 1 will be subtracted from __end_pos, this will highlight "toke". +# $PREBUFFER is for specific situations when users does command \ +# i.e. when multi-line command using backslash is entered. +# +# This is a common place of adding such entry, but any above code can do +# it itself (and it does in other chromas) and skip setting __style to +# this way disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves. +# _start_pos=$_end_pos advainces pointers in command line buffer. +# +# To pass through means to `return 1'. The highlighting of +# this single token is then done by fast-syntax-highlighting's +# main code and chroma doesn't have to do anything. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-nmcli.ch b/.zsh/fsh/→chroma/-nmcli.ch new file mode 100644 index 0000000..be444e5 --- /dev/null +++ b/.zsh/fsh/→chroma/-nmcli.ch @@ -0,0 +1,58 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +typeset -A subcommands +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" subcommand +subcommands=( + help "_" + general "help status hostname permissions logging _" + networking "help on off connectivity _" + radio "help all wifi wwan _" + connection "help show up down add modify clone edit delete monitor reload load import export _" + device "help status show set connect reapply modify disconnect delete monitor wifi lldp _" + agent "help secret polkit all _" + monitor "help _" + _ "_" +) + +if (( __first_call )); then + FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]="" + FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]="" + return 1 +elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +elif [[ "$2" = -* ]]; then + return 1 +elif [[ -z ${FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]} ]]; then + for subcommand in ${(@k)subcommands}; do + [[ $subcommand = $__wrd* ]] && break || subcommand="_" + done + if [[ $subcommand = _ ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + else + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") + fi + FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]="$subcommand" +elif [[ -z ${FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]} ]]; then + for subcommand in ${(s. .)subcommands[${FAST_HIGHLIGHT[chroma-nmcli-subcommand-a]}]}; do + [[ "$subcommand" = $__wrd* ]] && break || subcommand="_" + done + if [[ $subcommand = _ ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + else + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") + fi + FAST_HIGHLIGHT[chroma-nmcli-subcommand-b]="$subcommand" +else + return 1 +fi + +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 diff --git a/.zsh/fsh/→chroma/-node.ch b/.zsh/fsh/→chroma/-node.ch new file mode 100644 index 0000000..65f214c --- /dev/null +++ b/.zsh/fsh/→chroma/-node.ch @@ -0,0 +1,37 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style + +if (( __first_call )); then + FAST_HIGHLIGHT[chroma-node-file]=1 +elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +elif [[ "$__wrd" = -- ]]; then + FAST_HIGHLIGHT[chroma-node-file]=2 +elif (( FAST_HIGHLIGHT[chroma-node-file] != 2 )) && [[ "$__wrd" = -* ]]; then + if [[ "$__wrd" = -*e* || "$__wrd" = --eval ]]; then + FAST_HIGHLIGHT[chroma-node-file]=0 + fi +elif (( FAST_HIGHLIGHT[chroma-node-file] )); then + if [[ "$__wrd" = debug || "$__wrd" = inspect ]]; then + __style=${FAST_THEME_NAME}subcommand + else + FAST_HIGHLIGHT[chroma-node-file]=0 + if [[ -f ${~__wrd} || -f ${~__wrd}.js || -f ${~__wrd}/index.js ]]; then + __style=${FAST_THEME_NAME}path + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + fi + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + (( this_word = next_word )) + _start_pos=$_end_pos + + return 0 +fi + +return 1 diff --git a/.zsh/fsh/→chroma/-ogit.ch b/.zsh/fsh/→chroma/-ogit.ch new file mode 100644 index 0000000..6f76674 --- /dev/null +++ b/.zsh/fsh/→chroma/-ogit.ch @@ -0,0 +1,383 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (c) 2018 plexigras +# +# The old chroma function for command `git'. It colorizes the part of command +# line that holds `git' invocation. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 +local -a __lines_list chroma_git_remote_subcommands +chroma_git_remote_subcommands=(add rename remove set-head set-branches get-url set-url set-url set-url show prune update) + +if (( __first_call )); then + # Called for the first time - new command + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables + FAST_HIGHLIGHT[chroma-git-counter]=0 + FAST_HIGHLIGHT[chroma-git-got-subcommand]=0 + FAST_HIGHLIGHT[chroma-git-subcommand]="" + FAST_HIGHLIGHT[chrome-git-got-msg1]=0 + FAST_HIGHLIGHT[chrome-git-got-anymsg]=0 + FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=0 + FAST_HIGHLIGHT[chroma-git-checkout-new]=0 + FAST_HIGHLIGHT[chroma-git-fetch-multiple]=0 + FAST_HIGHLIGHT[chroma-git-branch-change]=0 + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 + return 1 +else + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = "--" ]]; then + FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]=1 + __style=${FAST_THEME_NAME}double-hyphen-option + elif [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-git-got-subcommand]} -eq 0 ]]; then + # Options occuring before a subcommand + if (( FAST_HIGHLIGHT[chroma-git-option-with-argument-active] == 0 )); then + if [[ "$__wrd" = -[^[:space:]-]#C ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=2 + elif [[ "$__wrd" = -[^[:space:]-]#c ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=1 + fi + fi + return 1 + else + # If at e.g. '>' or destination/source spec (of the redirection) + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + # If at main git option taking argument in a separate word (-C and -c) + elif (( FAST_HIGHLIGHT[chroma-git-option-with-argument-active] > 0 && \ + 0 == FAST_HIGHLIGHT[chroma-git-got-subcommand] )) + then + # Remember the value + __idx2=${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]} + # Reset the is-argument mark-field + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 + + (( __idx2 == 2 )) && return 1 + # Other options' args (i.e. arg of -c) aren't routed to the big-loop + # as they aren't paths and aren't handled in any special way there + elif (( FAST_HIGHLIGHT[chroma-git-got-subcommand] == 0 )); then + FAST_HIGHLIGHT[chroma-git-got-subcommand]=1 + + # Check if the command is an alias - we want to highlight the + # aliased command just like the target command of the alias + .fast-run-command "git config --get-regexp 'alias.*'" chroma-git-alias-list "" $(( 10 * 60 )) + # Grep for line: alias.{user-entered-subcmd}[[:space:]], and remove alias. prefix + __lines_list=( ${${(M)__lines_list[@]:#alias.${__wrd}[[:space:]]##*}#alias.} ) + + if (( ${#__lines_list} > 0 )); then + # (*) + # First remove alias name (#*[[:space:]]) and the space after it, then + # remove any leading spaces from what's left (##[[:space:]]##), then + # remove everything except the first word that's in the left line + # (%%[[:space:]]##*, i.e.: "everything from right side up to any space") + FAST_HIGHLIGHT[chroma-git-subcommand]="${${${__lines_list[1]#*[[:space:]]}##[[:space:]]##}%%[[:space:]]##*}" + else + FAST_HIGHLIGHT[chroma-git-subcommand]="$__wrd" + fi + if (( __start_pos >= 0 )); then + # if subcommand exists + LANG=C .fast-run-command "git help -a" chroma-git-subcmd-list "" $(( 10 * 60 )) + # (s: :) will split on every space, but because the expression + # isn't double-quoted, the empty elements will be eradicated + # Some further knowledge-base: s-flag is special, it skips + # empty elements and creates an array (not a concatenated + # string) even when double-quoted. The normally needed @-flag + # that logically breaks the concaetnated string back into array + # in case of double-quoting has additional effect for s-flag: + # it finally blocks empty-elements eradication. + if [[ "${__lines_list[1]}" = See* ]]; then + # (**) + # git >= v2.20 + __lines_list=( ${(M)${${${(M)__lines_list[@]:# [[:blank:]]#[a-z]*}##[[:blank:]]##}%%[[:blank:]]##*}:#${FAST_HIGHLIGHT[chroma-git-subcommand]}} ) + else + # (**) + # git < v2.20 + __lines_list=( ${(M)${(s: :)${(M)__lines_list[@]:# [a-z]*}}:#${FAST_HIGHLIGHT[chroma-git-subcommand]}} ) + fi + + # Above we've checked: + # 1) If given subcommand is an alias (*) + # 2) If the command, or command pointed by the alias, exists (**) + # 3) There's little problem, git v2.20 outputs aliases in git help -a, + # which means that alias will be recognized as correct if it will + # point at another alias or on itself. That's a minor problem, a + # TODO for future planned optimization for v2.20 Git + # 4) Notice that the above situation is better than the previous - the + # alias is being verified to point to a valid git subcommand + # That's all that's needed to decide on the correctnes: + if (( ${#__lines_list} > 0 )); then + __style=${FAST_THEME_NAME}subcommand + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + fi + # The counter includes the subcommand itself + (( FAST_HIGHLIGHT[chroma-git-counter] += 1 )) + else + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + if [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "push" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "pull" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fetch" ]] \ + && (( ${FAST_HIGHLIGHT[chroma-git-fetch-multiple]} == 0 )); then + # if not option + if [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" -eq 1 ]]; then + (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) + if (( __idx1 == 2 )); then + .fast-run-git-command "git remote" "chroma-git-remotes" "" + else + __wrd="${__wrd%%:*}" + .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" + fi + # if remote/ref exists + if [[ -n ${__lines_list[(r)$__wrd]} ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + # if ref (__idx1 == 3) does not exist and subcommand is push + elif (( __idx1 != 2 )) && [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "push" ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + # if not existing remote name, because not an URL (i.e. no colon) + elif [[ $__idx1 -eq 2 && $__wrd != *:* ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos+${#__wrd}-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + # if option + else + if [[ "$__wrd" = "--multiple" && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "fetch" ]]; then + FAST_HIGHLIGHT[chroma-git-fetch-multiple]=1 + __style=${FAST_THEME_NAME}double-hyphen-option + else + return 1 + fi + fi + elif (( ${FAST_HIGHLIGHT[chroma-git-fetch-multiple]} )) \ + && [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" -eq 1 ]]; then + .fast-run-git-command "git remote" "chroma-git-remotes" "" + if [[ -n ${__lines_list[(r)$__wrd]} ]]; then + __style=${FAST_THEME_NAME}correct-subtle + fi + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "commit" ]]; then + match[1]="" + match[2]="" + # if previous argument is -m or current argument is --message=something + if (( FAST_HIGHLIGHT[chrome-git-got-msg1] == 1 && ! FAST_HIGHLIGHT[chrome-git-got-anymsg] )) \ + || [[ "$__wrd" = (#b)(--message=)(*) && "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 ]]; then + FAST_HIGHLIGHT[chrome-git-got-msg1]=0 + FAST_HIGHLIGHT[chrome-git-got-anymsg]=1 + if [[ -n "${match[1]}" ]]; then + __wrd="${(Q)${match[2]//\`/x}}" + # highlight (--message=)something + (( __start=__start_pos-${#PREBUFFER}, __end=__start_pos-${#PREBUFFER}+10, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") + # highlight --message=(something) + (( __start=__start_pos-${#PREBUFFER}+10, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") + else + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") + fi + local __firstline=${__wrd%%$'\n'*} + if (( ${#__firstline} > 50 )); then + for (( __idx1 = 1, __idx2 = 1; __idx1 <= 50; ++ __idx1, ++ __idx2 )); do + while [[ "${__arg[__idx2]}" != "${__firstline[__idx1]}" ]]; do + (( ++ __idx2 )) + (( __idx2 > __asize )) && { __idx2=-1; break; } + done + (( __idx2 == -1 )) && break + done + if (( __idx2 != -1 )); then + if [[ -n "${match[1]}" ]]; then + (( __start=__start_pos-${#PREBUFFER}+__idx2, __end=__end_pos-${#PREBUFFER}-$#__wrd+$#__firstline-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + else + (( __start=__start_pos-${#PREBUFFER}+__idx2-1, __end=__end_pos-${#PREBUFFER}-$#__wrd+$#__firstline-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + fi + fi + # if before -- + elif [[ "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 ]]; then + if [[ "$__wrd" = -[^[:space:]-]#m ]]; then + FAST_HIGHLIGHT[chrome-git-got-msg1]=1 + __style=${FAST_THEME_NAME}single-hyphen-option + else + return 1 + fi + # if after -- is file + elif [[ -e "$__wrd" ]]; then + __style=${FAST_THEME_NAME}path + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" ]] \ + || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "revert" ]] \ + || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "merge" ]] \ + || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]] \ + || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "reset" ]] \ + || [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "rebase" ]]; then + + # if doing `git checkout -b ...' + if [[ "$__wrd" = -[^[:space:]-]#b && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" ]]; then + FAST_HIGHLIGHT[chroma-git-checkout-new]=1 + __style=${FAST_THEME_NAME}single-hyphen-option + # if command is not checkout -b something + elif [[ "${FAST_HIGHLIGHT[chroma-git-checkout-new]}" = 0 ]]; then + # if not option + if [[ "$__wrd" != -* || "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 1 ]]; then + (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) + if (( __idx1 == 2 )) || \ + [[ "$__idx1" = 3 && "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]]; then + # if is ref + if command git rev-parse --verify --quiet "$__wrd" >/dev/null 2>&1; then + __style=${FAST_THEME_NAME}correct-subtle + # if is file and subcommand is checkout or diff + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "reset" \ + || "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "diff" ]] && [[ -e ${~__wrd} ]]; then + __style=${FAST_THEME_NAME}path + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "checkout" && \ + "1" = "$(command git rev-list --count --no-walk --glob="refs/remotes/${$(git \ + config --get checkout.defaultRemote):-*}/$__wrd")" ]] + then + __style=${FAST_THEME_NAME}correct-subtle + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + fi + # if option + else + return 1 + fi + # if option + elif [[ "${FAST_HIGHLIGHT[chrome-git-occurred-double-hyphen]}" = 0 && "$__wrd" = -* ]]; then + return 1 + fi + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "remote" && "$__wrd" != -* ]]; then + (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) + if [[ "$__idx1" = 2 ]]; then + if (( ${chroma_git_remote_subcommands[(I)$__wrd]} )); then + FAST_HIGHLIGHT[chroma-git-remote-subcommand]="$__wrd" + __style=${FAST_THEME_NAME}subcommand + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + elif [[ "$__idx1" = 3 && "$FAST_HIGHLIGHT[chroma-git-remote-subcommand]" = "add" ]]; then + .fast-run-git-command "git remote" "chroma-git-remotes" "" + if [[ -n ${__lines_list[(r)$__wrd]} ]]; then + __style=${FAST_THEME_NAME}incorrect-subtle + fi + elif [[ "$__idx1" = 3 && -n "$FAST_HIGHLIGHT[chroma-git-remote-subcommand]" ]]; then + .fast-run-git-command "git remote" "chroma-git-remotes" "" + if [[ -n ${__lines_list[(r)$__wrd]} ]]; then + __style=${FAST_THEME_NAME}correct-subtle + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + fi + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "branch" ]]; then + if [[ "$__wrd" = --delete \ + || "$__wrd" = --edit-description \ + || "$__wrd" = --set-upstream-to=* \ + || "$__wrd" = --unset-upstream \ + || "$__wrd" = -[^[:space:]-]#d \ + || "$__wrd" = -[^[:space:]-]#D ]]; then + FAST_HIGHLIGHT[chroma-git-branch-change]=1 + return 1 + elif [[ "$__wrd" != -* ]]; then + .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" + if [[ -n ${__lines_list[(r)$__wrd]} ]]; then + __style=${FAST_THEME_NAME}correct-subtle + elif (( FAST_HIGHLIGHT[chroma-git-branch-change] )); then + __style=${FAST_THEME_NAME}incorrect-subtle + fi + else + return 1 + fi + elif [[ "${FAST_HIGHLIGHT[chroma-git-subcommand]}" = "tag" ]]; then + if [[ "${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]}" -le 0 ]]; then + if [[ "$__wrd" = -[^[:space:]-]#(u|m) ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=1 + elif [[ "$__wrd" = -[^[:space:]-]#F ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=2 + elif [[ "$__wrd" = -[^[:space:]-]#d ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=3 + elif [[ "$__wrd" = (--contains|--no-contains|--points-at|--merged|--no-merged) ]]; then + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=4 + fi + if [[ "$__wrd" != -* ]]; then + (( FAST_HIGHLIGHT[chroma-git-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-git-counter] )) + if [[ ${FAST_HIGHLIGHT[chroma-git-counter]} -eq 2 ]]; then + .fast-run-git-command "git for-each-ref --format='%(refname:short)' refs/heads" "chroma-git-branches" "refs/heads" + .fast-run-git-command "+git tag" "chroma-git-tags" "" + [[ -n ${__lines_list[(r)$__wrd]} ]] && __style=${FAST_THEME_NAME}incorrect-subtle + elif [[ ${FAST_HIGHLIGHT[chroma-git-counter]} -eq 3 ]]; then + fi + else + return 1 + fi + else + case "${FAST_HIGHLIGHT[chroma-git-option-with-argument-active]}" in + (1) + __style=${FAST_THEME_NAME}optarg-string + ;; + (2) + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 + return 1; + ;; + (3) + .fast-run-git-command "git tag" "chroma-git-tags" "" + [[ -n ${__lines_list[(r)$__wrd]} ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + __style=${FAST_THEME_NAME}incorrect-subtle + ;; + (4) + if git rev-parse --verify --quiet "$__wrd" >/dev/null 2>&1; then + __style=${FAST_THEME_NAME}correct-subtle + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + ;; + esac + FAST_HIGHLIGHT[chroma-git-option-with-argument-active]=0 + fi + else + return 1 + fi + fi + fi +fi + +# Add region_highlight entry (via `reply' array) +if [[ -n "$__style" ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") +fi + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-perl.ch b/.zsh/fsh/→chroma/-perl.ch new file mode 100644 index 0000000..49f0ad3 --- /dev/null +++ b/.zsh/fsh/→chroma/-perl.ch @@ -0,0 +1,80 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `perl'. It highlights code passed to perl +# with -e option - does syntax check by calling `perl -ce', then highlights +# as correct or incorrect code. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables. + FAST_HIGHLIGHT[chrome-perl-got-eswitch]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-perl-got-subcommand]} -eq 0 ]]; then + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + + if [[ "$__wrd" = "-e" || ("$__wrd" = -*e* && "$__wrd" != --*) ]]; then + FAST_HIGHLIGHT[chrome-perl-got-eswitch]=1 + fi + else + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + if (( FAST_HIGHLIGHT[chrome-perl-got-eswitch] == 1 )); then + FAST_HIGHLIGHT[chrome-perl-got-eswitch]=0 + if perl -ce "$__wrd" >/dev/null 2>&1; then + # Add correct-subtle style + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + else + # Add incorrect-subtle style + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + else + # Pass-through to the big-loop outside + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array) +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-precommand.ch b/.zsh/fsh/→chroma/-precommand.ch new file mode 100644 index 0000000..7e85a06 --- /dev/null +++ b/.zsh/fsh/→chroma/-precommand.ch @@ -0,0 +1,17 @@ +# vim:ft=zsh:et:sw=4 + +local __first_call="$1" __start_pos="$3" __end_pos="$4" + +[[ "$__arg_type" = 3 ]] && return 2 + +(( __first_call )) && { + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}precommand]}") + (( next_word = (next_word & ~2) | 4 | 1 )) +} || { + return 1 +} + +(( this_word = next_word )) +_start_pos=$_end_pos +return 0 diff --git a/.zsh/fsh/→chroma/-printf.ch b/.zsh/fsh/→chroma/-printf.ch new file mode 100644 index 0000000..89d2789 --- /dev/null +++ b/.zsh/fsh/→chroma/-printf.ch @@ -0,0 +1,86 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Highlights the special sequences like "%s" in string passed to `printf'. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __val +integer __idx1 __idx2 + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-printf-counter]=0 + FAST_HIGHLIGHT[chroma-printf-counter-all]=1 + FAST_HIGHLIGHT[chroma-printf-message]="" + FAST_HIGHLIGHT[chroma-printf-skip-two]=0 + return 1 +# Following call (not first one). +} || { + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + (( FAST_HIGHLIGHT[chroma-printf-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-printf-counter-all] )) + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if [[ "$__wrd" = -* ]]; then + if [[ "$__wrd" = "-v" ]]; then + FAST_HIGHLIGHT[chroma-printf-skip-two]=1 + fi + return 1 + else + # Count non-option tokens. + if (( FAST_HIGHLIGHT[chroma-printf-skip-two] )); then + FAST_HIGHLIGHT[chroma-printf-skip-two]=0 + return 1 + else + (( FAST_HIGHLIGHT[chroma-printf-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-printf-counter] )) + if [[ "$__idx1" -eq 1 ]]; then + [[ "$__wrd" = \"* ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-quoted-argument]}") + [[ "$__wrd" = \'* ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}single-quoted-argument]}") + FSH_LIST=() # use fsh_sy_h_append function to write to FSH_LIST + : "${__wrd//(#m)\%[\#\+\ 0-]#[0-9]#([.][0-9]#)(#c0,1)[diouxXfFeEgGaAcsb]/$(( fsh_sy_h_append($MBEGIN, $MEND) ))}"; + for __val in "${FSH_LIST[@]}" ; do + __idx1=$(( __start_pos + ${__val%%;;*} )) + __idx2=__idx1+${__val##*;;}-${__val%%;;*}+1 + (( __start=__idx1-${#PREBUFFER}, __end=__idx2-${#PREBUFFER}-1, __start >= 0 )) && \ + reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}mathnum]}") + done + else + return 1 + fi + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above code +# can do it itself and skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-ruby.ch b/.zsh/fsh/→chroma/-ruby.ch new file mode 100644 index 0000000..3495cc8 --- /dev/null +++ b/.zsh/fsh/→chroma/-ruby.ch @@ -0,0 +1,81 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for command `ruby'. It highlights code passed to ruby +# with -e option - does syntax check by calling `ruby -ce', then highlights +# as correct or incorrect code. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global variables. + FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* && ${FAST_HIGHLIGHT[chroma-ruby-got-subcommand]} -eq 0 ]]; then + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + + if [[ "$__wrd" = "-e" || ("$__wrd" = -*e* && "$__wrd" != --*) ]]; then + FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=1 + fi + else + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + if (( FAST_HIGHLIGHT[chrome-ruby-got-eswitch] == 1 )); then + FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 + if ruby -ce "$__wrd" >/dev/null 2>&1; then + # Add correct-subtle style + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}") + else + # Add incorrect-subtle style + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") + fi + else + # Pass-through to the big-loop outside + return 1 + fi + FAST_HIGHLIGHT[chrome-ruby-got-eswitch]=0 + fi +} + +# Add region_highlight entry (via `reply' array) +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-scp.ch b/.zsh/fsh/→chroma/-scp.ch new file mode 100644 index 0000000..d162284 --- /dev/null +++ b/.zsh/fsh/→chroma/-scp.ch @@ -0,0 +1,87 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Tracks scp command and emits message when one tries to pass port to hostspec. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars +integer __idx1 __idx2 +local -a __results + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-scp-counter]=0 + FAST_HIGHLIGHT[chroma-scp-counter-all]=1 + FAST_HIGHLIGHT[chroma-scp-message]="" + FAST_HIGHLIGHT[chroma-scp-skip-two]=0 + return 1 +} || { + (( FAST_HIGHLIGHT[chroma-scp-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-scp-counter-all] )) + + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + if [[ "$__wrd" = (-c|-F|-i|-l|-o|-P|-S) ]]; then + FAST_HIGHLIGHT[chroma-scp-skip-two]=1 + fi + else + # Count non-option tokens. + if (( FAST_HIGHLIGHT[chroma-scp-skip-two] )); then + FAST_HIGHLIGHT[chroma-scp-skip-two]=0 + else + (( FAST_HIGHLIGHT[chroma-scp-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-scp-counter] )) + if [[ "${FAST_HIGHLIGHT[chroma-scp-counter]}" -eq 1 ]]; then + if [[ "$__arg" = [^:]##:[0-9]## ]]; then + FAST_HIGHLIGHT[chroma-scp-message]+="Format of hostname incorrect, use -P to pass port number" + else + return 1 + fi + else + return 1 + fi + fi + fi + + if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-scp-counter-all] )); then + [[ -n "${FAST_HIGHLIGHT[chroma-scp-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-scp-message]}" + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above code +# can do it itself and skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-sh.ch b/.zsh/fsh/→chroma/-sh.ch new file mode 100644 index 0000000..43fa8f9 --- /dev/null +++ b/.zsh/fsh/→chroma/-sh.ch @@ -0,0 +1,72 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma function for `sh' shell. It colorizes string passed with -c option. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call=$1 __wrd=$2 __start_pos=$3 __end_pos=$4 +local __style +integer __idx1 __idx2 +local -a __lines_list + +(( __first_call )) && { + # Called for the first time - new command + FAST_HIGHLIGHT[chrome-git-got-c]=0 + return 1 +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ $__arg_type = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + __wrd=${${${(Q)__wrd}#[\"\']}%[\"\']} + if [[ $__wrd = -* && $__wrd != -*c* ]]; then + __style=${FAST_THEME_NAME}${${${__wrd:#--*}:+single-hyphen-option}:-double-hyphen-option} + else + if (( FAST_HIGHLIGHT[chrome-git-got-c] == 1 )); then + for (( __idx1 = 1, __idx2 = 1; __idx2 <= __asize; ++ __idx1 )); do + [[ ${__arg[__idx2]} = ${__wrd[__idx1]} ]] && break + while [[ ${__arg[__idx2]} != ${__wrd[__idx1]} ]]; do + (( ++ __idx2 )) + (( __idx2 > __asize )) && { __idx2=0; break; } + done + (( __idx2 == 0 )) && break + [[ ${__arg[__idx2]} = ${__wrd[__idx1]} ]] && break + done + + FAST_HIGHLIGHT[chrome-git-got-c]=0 + (( _start_pos-__PBUFLEN >= 0 )) && \ + -fast-highlight-process "$PREBUFFER" "${__wrd}" "$(( __start_pos + __idx2 - 1 ))" + elif [[ $__wrd = -*c* ]]; then + FAST_HIGHLIGHT[chrome-git-got-c]=1 + else + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array) +[[ -n $__style ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-source.ch b/.zsh/fsh/→chroma/-source.ch new file mode 100644 index 0000000..dc27e76 --- /dev/null +++ b/.zsh/fsh/→chroma/-source.ch @@ -0,0 +1,75 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma for `source' builtin - verifies if file to be sourced compiles +# correctly. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars __home=${XDG_CACHE_HOME:-$HOME/.cache}/fsh +integer __idx1 __idx2 + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-src-counter]=0 + __style=${FAST_THEME_NAME}builtin + +} || { + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-src-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-src-counter] )) + + if (( FAST_HIGHLIGHT[chroma-src-counter] == 1 )); then + command mkdir -p "$__home" + command cp -f "${__wrd}" "$__home" 2>/dev/null && { + zcompile "$__home"/"${__wrd:t}" 2>/dev/null 1>&2 && __style=${FAST_THEME_NAME}correct-subtle || __style=${FAST_THEME_NAME}incorrect-subtle + } + elif (( FAST_HIGHLIGHT[chroma-src-counter] == 2 )); then + # Handle paths, etc. normally - just pass-through to the big + # highlighter (the main FSH highlighter, used before chromas). + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does) and skip setting __style +# to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-ssh.ch b/.zsh/fsh/→chroma/-ssh.ch new file mode 100644 index 0000000..879158f --- /dev/null +++ b/.zsh/fsh/→chroma/-ssh.ch @@ -0,0 +1,156 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) +# +# Tracks ssh command and emits message when one tries to pass port to hostspec. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +emulate -LR zsh +setopt extended_glob warn_create_global typeset_silent + +# This chroma guards that port number isn't passed in hostname (no :{port} occurs). + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style check_port=0 host_start_offset host_style user_style possible_host +local -a match mbegin mend completions_user completions_host + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-ssh-counter]=0 + FAST_HIGHLIGHT[chroma-ssh-counter-all]=1 + FAST_HIGHLIGHT[chroma-ssh-message]="" + FAST_HIGHLIGHT[chroma-ssh-skip-two]=0 + return 1 +} || { + # Following call, i.e. not the first one. + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + (( FAST_HIGHLIGHT[chroma-ssh-counter-all] += 1 )) + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + if [[ "$__wrd" = (-b|-c|-D|-E|-e|-F|-I|-i|-J|-L|-l|-m|-O|-o|-p|Q|R|-S|-W|-w) ]]; then + FAST_HIGHLIGHT[chroma-ssh-skip-two]=1 + fi + else + if (( FAST_HIGHLIGHT[chroma-ssh-skip-two] )); then + FAST_HIGHLIGHT[chroma-ssh-skip-two]=0 + else + # Count non-option tokens. + (( FAST_HIGHLIGHT[chroma-ssh-counter] += 1 )) + if [[ "${FAST_HIGHLIGHT[chroma-ssh-counter]}" -eq 1 ]]; then + if [[ $__arg = (#b)(([^@]#)(@)|)(*) ]] + then + [[ -n $match[2] ]] \ + && { + user_style= + () { + # Zstyle clobbers reply for sure + zstyle -a ":completion:*:users" users completions_users + } + (( ! $#completions_users )) && completions_users=(${(k)userdirs}) + if (( $#completions_users )); then + [[ $match[2] = ${~${:-(${(j:|:)completions_users})}} ]] \ + && user_style=${FAST_THEME_NAME}correct-subtle \ + || user_style=${FAST_THEME_NAME}incorrect-subtle + fi + [[ -n $user_style ]] \ + && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}-(mend[5]-mend[2]), __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$user_style]}") + } + [[ -n $match[3] ]] \ + && (( __start=__start_pos-${#PREBUFFER}+(mbegin[3]-mbegin[1]), __end=__end_pos-${#PREBUFFER}-(mend[5]-mend[3]), __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subtle-separator]}") + + host_style= + case $match[4] in + (<->|<0-255>.<0-255>.<0-255>.<0-255>) + host_style=${FAST_THEME_NAME}mathnum + check_port=1 + ;; + (([0-9a-fA-F][0-9a-fA-F:]#|)::([0-9a-fA-F:]#[0-9a-fA-F]|)|[0-9a-fA-F]##:[0-9a-fA-F:]#[0-9a-fA-F]) + host_style=${FAST_THEME_NAME}mathnum + ;; + (*) + check_port=1 + ;; + esac + possible_host=$match[4] + (( host_start_offset = mbegin[4] - mbegin[1], host_end_offset = 0 )) + + if (( check_port )) && [[ $possible_host = (#b)(*)(:[0-9]##) ]]; then + (( __start=__start_pos-${#PREBUFFER}+(host_start_offset+mbegin[2]-mbegin[1]), __end=__end_pos-host_end_offset-${#PREBUFFER}, __start >= 0, + host_end_offset+=mend[2]-mend[1] )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}") \ + && possible_host=$match[1] \ + && FAST_HIGHLIGHT[chroma-ssh-message]+="Format of hostname incorrect, use -p to pass port number" + + fi + + if [[ -z $host_style ]]; then + () { + # Zstyle clobbers reply for sure + local mbegin mend match reply + zstyle -a ":completion:*:hosts" hosts completions_host + } + (( ! $#completions_host && $+_cache_hosts )) && completions_host=($_cache_hosts[*]) + if (( $#completions_host )); then + [[ $possible_host = ${~${:-(${(j:|:)completions_host})}} ]] \ + && host_style=${FAST_THEME_NAME}correct-subtle \ + || host_style=${FAST_THEME_NAME}incorrect-subtle + fi + fi + + [[ -n $host_style ]] \ + && (( __start=__start_pos-${#PREBUFFER}+host_start_offset, __end=__end_pos-${#PREBUFFER}-host_end_offset, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$host_style]}") + else + __style=${FAST_THEME_NAME}incorrect-subtle + fi + + (( next_word = 1 )) + + fi + fi + fi + + if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-ssh-counter-all] )); then + [[ -n "${FAST_HIGHLIGHT[chroma-ssh-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-ssh-message]}" + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above code +# can do it itself and skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-subcommand.ch b/.zsh/fsh/→chroma/-subcommand.ch new file mode 100644 index 0000000..0665548 --- /dev/null +++ b/.zsh/fsh/→chroma/-subcommand.ch @@ -0,0 +1,25 @@ +# vim:ft=zsh:et:sw=4 +(( next_word = 2 | 8192 )) +[[ "$__arg_type" = 3 ]] && return 2 + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" + +if (( __first_call )); then + FAST_HIGHLIGHT[chroma-subcommand]="" + return 1 +elif (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +elif [[ "$2" = -* ]]; then + return 1 +elif [[ -z "${FAST_HIGHLIGHT[chroma-subcommand]}" ]]; then + FAST_HIGHLIGHT[chroma-subcommand]="$__wrd" + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}subcommand]}") +else + return 1 +fi + +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 diff --git a/.zsh/fsh/→chroma/-subversion.ch b/.zsh/fsh/→chroma/-subversion.ch new file mode 100644 index 0000000..4149cc6 --- /dev/null +++ b/.zsh/fsh/→chroma/-subversion.ch @@ -0,0 +1,250 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2018 Sebastian Gniazdowski +# Copyright (C) 2019 by Philippe Troin (F-i-f on GitHub) +# All rights reserved. +# +# The only licensing for this file follows. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- + +→chroma/-subversion.ch/parse-revision() { + setopt local_options extendedglob warn_create_global typeset_silent + local __wrd="$1" __start_pos="$2" __end_pos="$3" __style __start __end + case $__wrd in + (r|)[0-9]##) __style=${FAST_THEME_NAME}mathnum ;; + (HEAD|BASE|COMITTED|PREV)) __style=${FAST_THEME_NAME}correct-subtle ;; + '{'[^}]##'}') __style=${FAST_THEME_NAME}subtle-bg ;; + *) __style=${FAST_THEME_NAME}incorrect-subtle ;; + esac + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") +} + +→chroma/-subversion.ch/parse-target() { + setopt local_options extendedglob warn_create_global typeset_silent + local __wrd="$1" __start_pos="$2" __end_pos="$3" __style __start __end + if [[ $__wrd == *@[^/]# ]] + then + local place=${__wrd%@[^/]#} + local rev=$__wrd[$(($#place+2)),$#__wrd] + if [[ -e $place ]]; then + local __style + [[ -d $place ]] && __style="${FAST_THEME_NAME}path-to-dir" || __style="${FAST_THEME_NAME}path" + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}-$#rev-1, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + fi + (( __start=__start_pos-${#PREBUFFER}+$#place, __end=__end_pos-${#PREBUFFER}-$#rev, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") + →chroma/-subversion.ch/parse-revision $rev $((__start_pos+$#place+1)) $__end_pos + else + return 1 + fi +} + +setopt local_options extendedglob warn_create_global + +# Keep chroma-takever state meaning: until ;, handle highlighting via chroma. +# So the below 8192 assignment takes care that next token will be routed to chroma. +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style +integer __idx1 __idx2 + +(( __first_call )) && { + # Called for the first time - new command. + # FAST_HIGHLIGHT is used because it survives between calls, and + # allows to use a single global hash only, instead of multiple + # global string variables. + FAST_HIGHLIGHT[subversion-command]=$__wrd + FAST_HIGHLIGHT[subversion-option-argument]= + FAST_HIGHLIGHT[subversion-subcommand]= + FAST_HIGHLIGHT[subversion-subcommand-arguments]=0 + + # Set style for region_highlight entry. It is used below in + # '[[ -n "$__style" ]] ...' line, which adds highlight entry, + # like "10 12 fg=green", through `reply' array. + # + # Could check if command `example' exists and set `unknown-token' + # style instead of `command' + __style=${FAST_THEME_NAME}command + +} || { + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + case $FAST_HIGHLIGHT[subversion-command]/$FAST_HIGHLIGHT[subversion-subcommand] in + svn/) + case $__wrd in + --username|-u) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --password|-p) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --config-(dir|option)) FAST_HIGHLIGHT[subversion-option-argument]=any;; + esac + ;; + svn/?*) + case $__wrd in + --accept) FAST_HIGHLIGHT[subversion-option-argument]=accept;; + --change|-c) FAST_HIGHLIGHT[subversion-option-argument]=revision;; + --changelist|--cl) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --(set-|)depth) FAST_HIGHLIGHT[subversion-option-argument]=depth;; + --diff(3|)-cmd) FAST_HIGHLIGHT[subversion-option-argument]=cmd;; + --editor-cmd) FAST_HIGHLIGHT[subversion-option-argument]=cmd;; + --encoding) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --file) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --limit|-l) FAST_HIGHLIGHT[subversion-option-argument]=number;; + --message|-m) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --native-eol) FAST_HIGHLIGHT[subversion-option-argument]=eol;; + --new|--old) FAST_HIGHLIGHT[subversion-option-argument]=target;; + --revision|-r) FAST_HIGHLIGHT[subversion-option-argument]=revision-pair;; + --show-revs) FAST_HIGHLIGHT[subversion-option-argument]=show-revs;; + --strip) FAST_HIGHLIGHT[subversion-option-argument]=number;; + --with-revprop) FAST_HIGHLIGHT[subversion-option-argument]=revprop;; + esac + ;; + svnadmin/*) + case $__wrd in + --config-dir) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --fs-type) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --memory-cache-size|-M) FAST_HIGHLIGHT[subversion-option-argument]=number;; + --parent-dir) FAST_HIGHLIGHT[subversion-option-argument]=any;; + --revision|-r) FAST_HIGHLIGHT[subversion-option-argument]=revision-pair;; + esac + ;; + svndumpfilter/*) + case $__wrd in + --targets) FAST_HIGHLIGHT[subversion-option-argument]=any;; + esac + ;; + esac + elif [[ -n $FAST_HIGHLIGHT[subversion-option-argument] ]]; then + case $FAST_HIGHLIGHT[subversion-option-argument] in + any) + FAST_HIGHLIGHT[subversion-option-argument]= + return 1 + ;; + accept) + [[ $__wrd = (p(|ostpone)|e(|dit)|l(|aunch)|base|working|recommended|[mt][cf]|(mine|theirs)-(conflict|full)) ]] \ + && __style=${FAST_THEME_NAME}correct-subtle \ + || __style=${FAST_THEME_NAME}incorrect-subtle + ;; + depth) + [[ $__wrd = (empty|files|immediates|infinity) ]] \ + && __style=${FAST_THEME_NAME}correct-subtle \ + || __style=${FAST_THEME_NAME}incorrect-subtle + ;; + number) + [[ $__wrd = [0-9]## ]] \ + && __style=${FAST_THEME_NAME}mathnum \ + || __style=${FAST_THEME_NAME}incorrect-subtle + ;; + eol) + [[ $__wrd = (CR(|LF)|LF) ]] \ + && __style=${FAST_THEME_NAME}correct-subtle \ + || __style=${FAST_THEME_NAME}incorrect-subtle + ;; + show-revs) + [[ $__wrd = (merged|eligible) ]] \ + && __style=${FAST_THEME_NAME}correct-subtle \ + || __style=${FAST_THEME_NAME}incorrect-subtle + ;; + revision) + →chroma/-subversion.ch/parse-revision $__wrd $__start_pos $__end_pos + ;; + revision-pair) + local -a match mbegin mend + if [[ $__wrd = (#b)(\{[^}]##\}|[^:]##)(:)(*) ]]; then + →chroma/-subversion.ch/parse-revision $match[1] $__start_pos $(( __end_pos - ( mend[3]-mend[2] ) - 1 )) + →chroma/-subversion.ch/parse-revision $match[3] $(( __start_pos + ( mbegin[3]-mbegin[1] ) )) $__end_pos + (( __start=__start_pos-${#PREBUFFER}+(mbegin[2]-mbegin[1]), __end=__end_pos-${#PREBUFFER}-(mend[3]-mend[2]), __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}for-loop-separator]}") + else + →chroma/-subversion.ch/parse-revision $__wrd $__start_pos $__end_pos + fi + ;; + target) + →chroma/-subversion.ch/parse-target $__wrd $__start_pos $__end_pos || return $? + ;; + cmd) + this_word=1 + return 1 + ;; + esac + FAST_HIGHLIGHT[subversion-option-argument]= + elif [[ -z $FAST_HIGHLIGHT[subversion-subcommand] ]] + then + FAST_HIGHLIGHT[subversion-subcommand]=$__wrd + local subcmds + case $FAST_HIGHLIGHT[subversion-command] in + svn) subcmds='(add|auth|blame|praise|annotate|ann|cat|changelist|cl|checkout|co|cleanup|commit|ci|copy|cp|delete|del|remove|rm|diff|di|export|help|\?|h|import|info|list|ls|lock|log|merge|mergeinfo|mkdir|move|mv|rename|ren|patch|propdel|pdel|pd|propedit|pedit|pe|propget|pget|pg|proplist|plist|pl|propset|pset|ps|relocate|resolve|resolved|revert|status|stat|st|switch|sw|unlock|update|up|upgrade|x-shelf-diff|x-shelf-drop|x-shelf-list|x-shelves|x-shelf-list-by-paths|x-shelf-log|x-shelf-save|x-shelve|x-unshelve)' ;; + svnadmin) subcmds="(crashtest|create|delrevprop|deltify|dump|dump-revprops|freeze|help|\?|h|hotcopy|info|list-dblogs|list-unused-dblogs|load|load-revprops|lock|lslocks|lstxns|pack|recover|rmlocks|rmtxns|setlog|setrevprop|setuuid|unlock|upgrade|verify)";; + svndumpfilter) subcmds='(include|exclude|help|\?)';; + esac + [[ $FAST_HIGHLIGHT[subversion-subcommand] = $~subcmds ]] \ + && __style=${FAST_THEME_NAME}subcommand \ + || __style=${FAST_THEME_NAME}incorrect-subtle + FAST_HIGHLIGHT[subversion-subcommand-arguments]=0 + else + (( FAST_HIGHLIGHT[subversion-subcommand-arguments]+=1 )) + if [[ ( $FAST_HIGHLIGHT[subversion-subcommand] == (checkout|co|export|log|merge|switch|sw) && $FAST_HIGHLIGHT[subversion-subcommand-arguments] -eq 1 ) \ + || $FAST_HIGHLIGHT[subversion-subcommand] == (blame|praise|annotate|ann|cat|copy|cp|diff|info|list|ls|mergeinfo) ]]; then + →chroma/-subversion.ch/parse-target $__wrd $__start_pos $__end_pos || return $? + else + return 1 + fi + fi +} + +# Add region_highlight entry (via `reply' array). +# If 1 will be added to __start_pos, this will highlight "oken". +# If 1 will be subtracted from __end_pos, this will highlight "toke". +# $PREBUFFER is for specific situations when users does command \ +# i.e. when multi-line command using backslash is entered. +# +# This is a common place of adding such entry, but any above code can do +# it itself (and it does in other chromas) and skip setting __style to +# this way disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through, do obligatory things ourselves. +# _start_pos=$_end_pos advainces pointers in command line buffer. +# +# To pass through means to `return 1'. The highlighting of +# this single token is then done by fast-syntax-highlighting's +# main code and chroma doesn't have to do anything. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-vim.ch b/.zsh/fsh/→chroma/-vim.ch new file mode 100644 index 0000000..b3fecd1 --- /dev/null +++ b/.zsh/fsh/→chroma/-vim.ch @@ -0,0 +1,51 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Chroma for vim, shows last opened files under prompt. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __chars +integer __idx1 __idx2 +local -a __viminfo + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + (( ${+commands[vim]} )) && __style=${FAST_THEME_NAME}command || __style=${FAST_THEME_NAME}unknown-token + + { __viminfo=( ${(f)"$(<$HOME/.viminfo)"} ); } >> /dev/null + __viminfo=( "${${(M)__viminfo[@]:#>*}[@]:t}" ) + __viminfo=( "${__viminfo[@]:#COMMIT_EDITMSG}" ) + zle -M "Last opened:"$'\n'"${(F)__viminfo[1,5]}" +} || { + # Pass almost everything to big loop + return 1 +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above +# code can do it itself (and it does, see other chromas) and +# skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-whatis.ch b/.zsh/fsh/→chroma/-whatis.ch new file mode 100644 index 0000000..993f989 --- /dev/null +++ b/.zsh/fsh/→chroma/-whatis.ch @@ -0,0 +1,138 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018-2019 Sebastian Gniazdowski + +(( next_word = 2 | 8192 )) +local THEFD check __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style + +(( ! ${+FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]} )) && \ + FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=0 + +(( ! ${+FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]} )) && { + is-at-least 5.0.6 && local __res=1 || local __res=0 + FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]="$__res" +} + +-fast-whatis-chroma-callback() { + emulate -L zsh + setopt extendedglob warncreateglobal typesetsilent + + local THEFD="$1" input check=2 nl=$'\n' __wrd __style + + .fast-zts-read-all "$THEFD" input + + zle -F "$THEFD" + exec {THEFD}<&- + + __wrd="${${input#[^$nl]#$nl}%%$nl*}" + if [[ "$input" = test* ]]; then + if [[ "${input%$nl}" = *[^0-9]'0' ]]; then + if [[ "${input#test$nl}" = *nothing\ appropriate* ]]; then + FAST_HIGHLIGHT[whatis_chroma_type]=2 + else + FAST_HIGHLIGHT[whatis_chroma_type]=0 + fi + else + FAST_HIGHLIGHT[whatis_chroma_type]=1 + fi + elif [[ "$input" = type2* ]]; then + [[ "$input" != *nothing\ appropriate* ]] && check=1 || check=0 + elif [[ "$input" = type1* ]]; then + [[ "${input%$nl}" = *0 ]] && check=1 || check=0 + fi + + if (( check != 2 )); then + FAST_HIGHLIGHT[whatis-cache-$__wrd]=$check + if (( check )) then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]} + elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} + else + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} + fi + local -a start_end + start_end=( ${(s:/:)${${(M)${${input#type?${nl}[^$nl]#$nl}}#*$nl}%$nl}} ) + (( start_end[1] >= 0 )) && region_highlight+=("$start_end[1] $start_end[2] $__style") + zle -R + fi + + FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=1 + return 0 +} + +zle -N -- -fast-whatis-chroma-callback + +if (( __first_call )) && [[ -z "${FAST_HIGHLIGHT[whatis_chroma_type]}" ]] ;then + if ! command -v whatis > /dev/null; then + FAST_HIGHLIGHT[whatis_chroma_type]=0 + return 1 + fi + + exec {THEFD}< <( + print "test" + LANG=C whatis "osx whatis fallback check" + print "$?" + ) + command true # a workaround of Zsh bug + zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback +fi + +[[ "$__arg_type" = 3 ]] && return 2 + +if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 +fi + +if (( __first_call )) || [[ "$__wrd" = -* ]]; then + return 1 +elif (( ! FAST_HIGHLIGHT[whatis_chroma_type] )); then + # Return 1 (i.e. treat the argument as a path) only if the callback have + # had a chance to establish the whatis_chroma_type field + (( FAST_HIGHLIGHT[whatis_chroma_callback_was_ran] )) && return 1 +else + if [[ -z "${FAST_HIGHLIGHT[whatis-cache-$__wrd]}" ]]; then + if (( FAST_HIGHLIGHT[whatis_chroma_type] == 2 )); then + exec {THEFD}< <( + print "type2" + print "$__wrd" + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} )) + print "$__start/$__end" + LANG=C whatis "$__wrd" 2>/dev/null + ) + command true # see above + zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback + else + exec {THEFD}< <( + print "type1" + print "$__wrd" + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} )) + print "$__start/$__end" + LANG=C whatis "$__wrd" &> /dev/null + print "$?" + ) + command true + zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback + fi + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end $__style") + else + check=${FAST_HIGHLIGHT[whatis-cache-$__wrd]} + if (( check )) then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]} + elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]} + elif (( FAST_HIGHLIGHT[whatis_chroma_type] )); then + __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]} + fi + [[ -n "$__style" ]] && \ + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \ + reply+=("$__start $__end $__style") + fi +fi +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4:sts=4 diff --git a/.zsh/fsh/→chroma/-which.ch b/.zsh/fsh/→chroma/-which.ch new file mode 100644 index 0000000..5a5d7b3 --- /dev/null +++ b/.zsh/fsh/→chroma/-which.ch @@ -0,0 +1,96 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Outputs (under prompt) result of query done with `which', `type -w', +# `whence -v', `whereis', `whatis'. +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg; the token can be eg.: "grep" +# +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +local __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4" +local __style __output __chars +integer __idx1 __idx2 +local -a __results + +# First call, i.e. command starts, i.e. "grep" token etc. +(( __first_call )) && { + FAST_HIGHLIGHT[chroma-which-counter]=0 + FAST_HIGHLIGHT[chroma-which-counter-all]=1 + FAST_HIGHLIGHT[chroma-which-message]="" + FAST_HIGHLIGHT[chroma-which-skip-two]=0 + __style=${FAST_THEME_NAME}command + __output="" + +# Following call (not first one). +} || { + (( FAST_HIGHLIGHT[chroma-which-counter-all] += 1, __idx2 = FAST_HIGHLIGHT[chroma-which-counter-all] )) + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + fi + + if [[ "$__wrd" = -* ]]; then + # Detected option, add style for it. + [[ "$__wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + if [[ "$__wrd" = "-x" ]]; then + FAST_HIGHLIGHT[chroma-which-skip-two]=1 + fi + else + # Count non-option tokens. + if (( FAST_HIGHLIGHT[chroma-which-skip-two] )); then + FAST_HIGHLIGHT[chroma-which-skip-two]=0 + else + (( FAST_HIGHLIGHT[chroma-which-counter] += 1, __idx1 = FAST_HIGHLIGHT[chroma-which-counter] )) + if [[ "$__idx1" -eq 1 ]]; then + __chars="{" + __output="$(command which "$__wrd" 2>/dev/null)" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"command which: $__output" + __output="$(builtin which "$__wrd" 2>/dev/null)" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"builtin which: ${${${${__output[1,100]}//$'\n'/;}//$'\t'/ }//$__chars;/$__chars}${__output[101,101]:+...}" + __output="$(builtin type -w "$__wrd" 2>/dev/null)" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"type -w: $__output" + __output="$(builtin whence -v "$__wrd" 2>/dev/null)" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whence -v: $__output" + __output="$(command whereis "$__wrd" 2>/dev/null)" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whereis: $__output" + __output="$(command whatis "$__wrd" 2>/dev/null)" + __output="${${__output%%$'\n'*}//[[:blank:]]##/ }" + FAST_HIGHLIGHT[chroma-which-message]+=$'\n'"whatis: $__output" + fi + fi + fi + + if (( ${#${(z)BUFFER}} <= FAST_HIGHLIGHT[chroma-which-counter-all] )); then + [[ -n "${FAST_HIGHLIGHT[chroma-which-message]}" ]] && zle -M "${FAST_HIGHLIGHT[chroma-which-message]#$'\n'}" + fi +} + +# Add region_highlight entry (via `reply' array). +# +# This is a common place of adding such entry, but any above code +# can do it itself and skip setting __style to disable this code. +[[ -n "$__style" ]] && (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") + +# We aren't passing-through (no return 1 occured), do obligatory things ourselves. +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/-zinit.ch b/.zsh/fsh/→chroma/-zinit.ch new file mode 100644 index 0000000..06637a8 --- /dev/null +++ b/.zsh/fsh/→chroma/-zinit.ch @@ -0,0 +1,378 @@ +# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# Copyright (c) 2018-2019 Sebastian Gniazdowski +# +# Chroma function for command `git'. It colorizes the part of command +# line that holds `git' invocation. + +(( FAST_HIGHLIGHT[-zinit.ch-chroma-def] )) && return 1 + +FAST_HIGHLIGHT[-zinit.ch-chroma-def]=1 + +typeset -gA fsh__zinit__chroma__def +fsh__zinit__chroma__def=( + ## + ## No subcommand + ## + ## {{{ + + subcmd:NULL "NULL_0_opt" + NULL_0_opt "(-help|--help|-h) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + "subcommands" "(help|man|self-update|cd|times|zstatus|load|light|unload|snippet|ls|ice||update|status|report|delete|loaded|list|cd|create|edit|glance|stress|changes|recently|clist|completions|cdisable|cname|cenable|cname|creinstall|cuninstall|csearch|compinit|dtrace|dstart|dstop|dunload|dreport|dclear|compile|uncompile|compiled|cdlist|cdreplay|cdclear|srv|recall|env-whitelist|bindkeys|module)" + + ## }}} + + # Generic actions + NO_MATCH_\#_opt "* <<>> __style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" + NO_MATCH_\#_arg "__style=\${FAST_THEME_NAME}incorrect-subtle // NO-OP" + + + ## + ## `ice' + ## + ## {{{ + + subcmd:ice "ICE_#_arg // NO_MATCH_#_opt" + + "ICE_#_arg" "NO-OP // ::→chroma/-zinit-check-ice-mod" + + ## }}} + + ## + ## `snippet' + ## + ## {{{ + + subcmd:snippet "SNIPPET_0_opt // SNIPPET_1_arg // NO_MATCH_#_opt // + NO_MATCH_#_arg" + + SNIPPET_0_opt "(-f|--command) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + SNIPPET_1_arg "NO-OP // ::→chroma/-zinit-verify-snippet" + + ## }}} + + ## + ## `load' + ## + ## {{{ + + "subcmd:load" + "LOAD_1_arg // LOAD_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + LOAD_1_arg "NO-OP // ::→chroma/-zinit-verify-plugin" + + LOAD_2_arg "NO-OP // ::→chroma/-zinit-verify-plugin" + + ## }}} + + ## + ## `compile|uncompile|stress|edit|glance|recall|status|cd|changes` + ## + ## {{{ + + "subcmd:(compile|uncompile|stress|edit|glance|recall|status|cd|changes)" + "PLGSNP_1_arg // PLGSNP_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + PLGSNP_1_arg "NO-OP // ::→chroma/-zinit-verify-plugin-or-snippet" + + PLGSNP_2_arg "NO-OP // ::→chroma/-zinit-verify-plugin-or-snippet" + + ## }}} + + ## + ## `update' + ## + ## {{{ + + subcmd:update "UPDATE_0_opt // PLGSNP_1_arg // PLGSNP_2_arg // + NO_MATCH_#_opt // NO_MATCH_#_arg" + + UPDATE_0_opt " + (--all|-r|--reset|-q|--quiet|-p|--parallel) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + ## }}} + + ## + ## `light' + ## + ## {{{ + + subcmd:light "LIGHT_0_opt // LOAD_1_arg // LOAD_2_arg // NO_MATCH_#_opt // + NO_MATCH_#_arg" + + LIGHT_0_opt "-b + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + ## }}} + + ## + ## `unload' + ## + ## {{{ + + subcmd:unload "UNLOAD_0_opt // UNLOAD_1_arg // UNLOAD_2_arg // NO_MATCH_#_opt // + NO_MATCH_#_arg" + + UNLOAD_0_opt "-q + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + UNLOAD_1_arg "NO-OP // ::→chroma/-zinit-verify-loaded-plugin" + + UNLOAD_2_arg "NO-OP // ::→chroma/-zinit-verify-loaded-plugin" + + ## }}} + + ## + ## `report' + ## + ## {{{ + + subcmd:report "REPORT_0_opt // UNLOAD_1_arg // UNLOAD_2_arg // NO_MATCH_#_opt // + NO_MATCH_#_arg" + + REPORT_0_opt "--all + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + ## }}} + + ## + ## `delete' + ## + ## {{{ + + "subcmd:delete" + "DELETE_0_opt // PLGSNP_1_arg // PLGSNP_2_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + DELETE_0_opt " + (--all|--clean|-y|--yes|-q|--quiet) + <<>> NO-OP // ::→chroma/main-chroma-std-aopt-action" + + ## }}} + + ## + ## `cenable' + ## + ## {{{ + + subcmd:cenable "COMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + COMPLETION_1_arg "NO-OP // ::→chroma/-zinit-verify-disabled-completion" + + ## }}} + + ## + ## `cdisable' + ## + ## {{{ + + subcmd:cdisable "DISCOMPLETION_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + DISCOMPLETION_1_arg "NO-OP // ::→chroma/-zinit-verify-completion" + + ## }}} + + + ## + ## `light' + ## + ## {{{ + + subcmd:uncompile "UNCOMPILE_1_arg // NO_MATCH_#_opt // NO_MATCH_#_arg" + + UNCOMPILE_1_arg "NO-OP // ::→chroma/-zinit-verify-compiled-plugin" + + ## }}} + + ## + ## `*' + ## + ## {{{ + + "subcmd:*" "CATCH_ALL_#_opt" + "CATCH_ALL_#_opt" "* <<>> NO-OP // ::→chroma/main-chroma-std-aopt-SEMI-action" + + ## }}} +) + +#→chroma/-zinit-first-call() { + # This is being done in the proper place - in -fast-highlight-process + #FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=0 +#} + +→chroma/-zinit-verify-plugin() { + local _scmd="$1" _wrd="$4" + + [[ -d "$_wrd" ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } + + typeset -a plugins + plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N:t) ) + plugins=( "${plugins[@]//---//}" ) + plugins=( "${plugins[@]:#_local/zinit}" ) + plugins=( "${plugins[@]:#custom}" ) + + [[ -n "${plugins[(r)$_wrd]}" ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + return 1 + #__style=${FAST_THEME_NAME}incorrect-subtle + return 0 +} + +→chroma/-zinit-verify-plugin-or-snippet() { + →chroma/-zinit-verify-plugin "$1" "" "" "$4" || \ + →chroma/-zinit-verify-snippet "$1" "" "" "$4" + return $? +} + +→chroma/-zinit-verify-loaded-plugin() { + local _scmd="$1" _wrd="$4" + typeset -a plugins absolute1 absolute2 absolute3 normal + plugins=( "${ZINIT_REGISTERED_PLUGINS[@]:#_local/zinit}" ) + normal=( "${plugins[@]:#%*}" ) + absolute1=( "${(M)plugins[@]:#%*}" ) + absolute1=( "${absolute1[@]/\%\/\//%/}" ) + local hm="${HOME%/}" + absolute2=( "${absolute1[@]/$hm/HOME}" ) + absolute3=( "${absolute1[@]/\%/}" ) + plugins=( $absolute1 $absolute2 $absolute3 $normal ) + + [[ -n "${plugins[(r)$_wrd]}" ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + return 1 + #__style=${FAST_THEME_NAME}incorrect-subtle + + return 0 +} + +→chroma/-zinit-verify-completion() { + local _scmd="$1" _wrd="$4" + # Find enabled completions + typeset -a completions + completions=( "${ZINIT[COMPLETIONS_DIR]}"/_*(N:t) ) + completions=( "${completions[@]#_}" ) + + [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + return 1 + + return 0 +} + +→chroma/-zinit-verify-disabled-completion() { + local _scmd="$1" _wrd="$4" + # Find enabled completions + typeset -a completions + completions=( "${ZINIT[COMPLETIONS_DIR]}"/[^_]*(N:t) ) + + [[ -n "${completions[(r)${_wrd#_}]}" ]] && \ + __style=${FAST_THEME_NAME}correct-subtle || \ + return 1 + + return 0 +} + +→chroma/-zinit-verify-compiled-plugin() { + local _scmd="$1" _wrd="$4" + + typeset -a plugins + plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N) ) + + typeset -a show_plugins p matches + for p in "${plugins[@]}"; do + matches=( $p/*.zwc(N) ) + if [ "$#matches" -ne "0" ]; then + p="${p:t}" + [[ "$p" = (_local---zinit|custom) ]] && continue + p="${p//---//}" + show_plugins+=( "$p" ) + fi + done + + [[ -n "${show_plugins[(r)$_wrd]}" ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + return 1 +} + +→chroma/-zinit-verify-snippet() { + local _scmd="$1" url="$4" dirname local_dir + url="${${url#"${url%%[! $'\t']*}"}%/}" + id_as="${FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]:-${ZINIT_ICE[id-as]:-$url}}" + + filename="${${id_as%%\?*}:t}" + dirname="${${id_as%%\?*}:t}" + local_dir="${${${id_as%%\?*}:h}/:\/\//--}" + [[ "$local_dir" = "." ]] && local_dir="" || local_dir="${${${${${local_dir#/}//\//--}//=/--EQ--}//\?/--QM--}//\&/--AMP--}" + local_dir="${ZINIT[SNIPPETS_DIR]}${local_dir:+/$local_dir}" + + (( ${+ZINIT_ICE[svn]} || ${FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]} )) && { + # TODO: handle the SVN path's specifics + [[ -d "$local_dir/$dirname" ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + return 1 + } || { + # TODO: handle the non-SVN path's specifics + [[ -d "$local_dir/$dirname" ]] && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + return 1 + } +} + +→chroma/-zinit-check-ice-mod() { + local _scmd="$1" _wrd="$4" + [[ "$_wrd" = (svn(\'|\")*|svn) ]] && \ + FAST_HIGHLIGHT[chroma-zinit-ice-elements-svn]=1 + [[ "$_wrd" = (#b)(id-as(:|)(\'|\")(*)(\'|\")|id-as:(*)|id-as(*)) ]] && \ + FAST_HIGHLIGHT[chroma-zinit-ice-elements-id-as]="${match[4]}${match[6]}${match[7]}" + + # Copy from zinit-autoload.zsh / -zplg-recall + local -a ice_order nval_ices ext_val_ices + ext_val_ices=( ${(@)${(@Ms.|.)ZINIT_EXTS[ice-mods]:#*\'\'*}//\'\'/} ) + + ice_order=( + svn proto from teleid bindmap cloneopts id-as depth if wait load + unload blockf pick bpick src as ver silent lucid notify mv cp + atinit atclone atload atpull nocd run-atpull has cloneonly make + service trackbinds multisrc compile nocompile nocompletions + reset-prompt wrap-track reset sh \!sh bash \!bash ksh \!ksh csh + \!csh aliases countdown ps-on-unload ps-on-update trigger-load + light-mode is-snippet atdelete pack git verbose on-update-of + subscribe param extract + # Include all additional ices – after + # stripping them from the possible: '' + ${(@s.|.)${ZINIT_EXTS[ice-mods]//\'\'/}} + ) + nval_ices=( + blockf silent lucid trackbinds cloneonly nocd run-atpull + nocompletions sh \!sh bash \!bash ksh \!ksh csh \!csh + aliases countdown light-mode is-snippet git verbose + + # Include only those additional ices, + # don't have the '' in their name, i.e. + # aren't designed to hold value + ${(@)${(@s.|.)ZINIT_EXTS[ice-mods]}:#*\'\'*} + + # Must be last + svn + ) + + if [[ "$_wrd" = (#b)(${(~j:|:)${ice_order[@]:#(${(~j:|:)nval_ices[@]:#(${(~j:|:)ext_val_ices[@]})})}})(*) ]]; then + reply+=("$(( __start )) $(( __start+${mend[1]} )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") + reply+=("$(( __start+${mbegin[2]} )) $(( __end )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-string]}") + -fast-highlight-string + return 0 + elif [[ "$_wrd" = (#b)(${(~j:|:)nval_ices[@]}) ]]; then + __style=${FAST_THEME_NAME}single-hyphen-option + return 0 + else + __style=${FAST_THEME_NAME}incorrect-subtle + return 1 + fi +} + +return 0 + +# vim:ft=zsh:et:sw=4 diff --git a/.zsh/fsh/→chroma/main-chroma.ch b/.zsh/fsh/→chroma/main-chroma.ch new file mode 100644 index 0000000..323a978 --- /dev/null +++ b/.zsh/fsh/→chroma/main-chroma.ch @@ -0,0 +1,460 @@ +# Copyright (c) 2018 Sebastian Gniazdowski +# +# Main chroma function. It allows to create the command-dedicated chromas +# (like -git.ch) through a definition provided by `chroma_def' array (read +# from the upper scope). +# +# $1 - 0 or 1, denoting if it's first call to the chroma, or following one +# $2 - the current token, also accessible by $__arg from the above scope - +# basically a private copy of $__arg +# $3 - a private copy of $_start_pos, i.e. the position of the token in the +# command line buffer, used to add region_highlight entry (see man), +# because Zsh colorizes by *ranges* in command line buffer +# $4 - a private copy of $_end_pos from the above scope +# + +(( next_word = 2 | 8192 )) + +→chroma/main-chroma-print() { + (( FAST_HIGHLIGHT[DEBUG] )) && print "$@" >> /tmp/fsh-dbg +} + +local __chroma_name="${1#\%}" __first_call="$2" __wrd="$3" __start_pos="$4" __end_pos="$5" + +# Not a well formed chroma name +[[ -z "$__chroma_name" ]] && return 1 + +# Load the fsh_{name-of-the-chroma}_chroma_def array +(( !FAST_HIGHLIGHT[-${__chroma_name}.ch-chroma-def] )) && →chroma/-${__chroma_name}.ch + +→chroma/main-chroma-print -r -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +→chroma/main-chroma-print -r -- @@@@@@@ local __chroma_name="${1#\%}" __first_call="$2" __wrd="$3" __start_pos="$4" __end_pos="$5" @@@@@@@ +local __style __entry __value __action __handler __tmp __svalue __hspaces=$'\t ' __nl=$'\n' __ch_def_name +integer __idx1 __idx2 __start __end __ivalue __have_value=0 +local -a __lines_list __avalue +local -A map +map=( "#" "_H" "^" "_D" "*" "_S" ) + +(( __start=_start_pos-__PBUFLEN, __end=_end_pos-__PBUFLEN )) + +# Handler that highlights the options +→chroma/main-chroma-std-aopt-action() { + integer _start="$2" _end="$3" + local _scmd="$1" _wrd="$4" + + [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { + reply+=("$_start $(( _end - mend[2] + mbegin[2] - 1 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") + } || { + [[ "$_wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + } +} + +# Handler that highlights the options' arguments +→chroma/main-chroma-std-aopt-ARG-action() { + integer _start="$2" _end="$3" + local _scmd="$1" _wrd="$4" + + [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { + reply+=("$(( _start + 1 + mend[1] )) $_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") + } || __style=${FAST_THEME_NAME}optarg-${${${(M)_wrd:#(-|)<->}:+number}:-string} +} + +# This handler also highlights explicit arguments, i.e. --opt=the-explicit-arg +→chroma/main-chroma-std-aopt-SEMI-action() { + integer _start="$2" _end="$3" + local _scmd="$1" _wrd="$4" + + [[ "$_wrd" = (#b)(--[a-zA-Z0-9_-]##)=(*) ]] && { + reply+=("$_start $(( _end - mend[2] + mbegin[2] - 1 )) ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}double-hyphen-option]}") + reply+=("$(( _start + 1 + mend[1] )) $_end ${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}optarg-${${${(M)match[2]:#<->}:+number}:-string}]}") + } || { + [[ "$_wrd" = --* ]] && __style=${FAST_THEME_NAME}double-hyphen-option || \ + __style=${FAST_THEME_NAME}single-hyphen-option + } +} + +# A handler which verifies the token as an GIT url +→chroma/main-chroma-std-verify-url() { + setopt localoptions extendedglob + local _wrd="$4" + integer url_correct=0 + # Correct matches + # Correct matches + if [[ "$_wrd" = (#b)(git|http|https|ftp|ftps|file)://([a-zA-Z0-9._~-]##)(:[0-9]##)(#c0,1)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then + url_correct=1 + elif [[ "$_wrd" = (#b)rsync://([a-zA-Z0-9._~-]##)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then + url_correct=1 + elif [[ "$_wrd" = (#b)ssh://([a-zA-Z0-9._~-]##@)(#c0,1)([a-zA-Z0-9._~-]##)(:[0-9]##)(#c0,1)(/([a-zA-Z0-9./_~:-]##))(#c0,1) ]]; then + url_correct=1 + elif [[ "$_wrd" = (#b)([a-zA-Z0-9._~-]##@)(#c0,1)([a-zA-Z0-9._~-]##):([a-zA-Z0-9./_~:-](#c0,1)[a-zA-Z0-9._~:-][a-zA-Z0-9./_~:-]#)(#c0,1) ]]; then + url_correct=1 + elif [[ "$_wrd" = (#b)[[:alnum:]/_~:.-]## ]]; then + url_correct=1 + fi + + (( url_correct )) && \ + { __style=${FAST_THEME_NAME}correct-subtle; return 0; } || \ + { __style=${FAST_THEME_NAME}incorrect-subtle; return 1; } +} + +# A handler which verifies the token as a shell wildcard +→chroma/main-chroma-std-verify-pattern() { + setopt localoptions extendedglob + local _wrd="$4" + __style=${FAST_THEME_NAME}globbing-ext +} + +# Creates a hash table for given option set (an *_opt field in the chroma def.) +→chroma/main-create-OPTION-hash.ch() { + local __subcmd="$1" __option_set_id="$2" __the_hash_name="$3" __ __e __el __the_hash_name __var_name + local -a __split __sp __s + + →chroma/main-chroma-print -rl "======================" " **## STARTING ##** →chroma/main-##CREATE##-option-HASH.ch // subcmd:$__subcmd // option_set_id:$__option_set_id // h-nam:$__the_hash_name" + →chroma/main-chroma-print "[D] Got option-set: ${(j:,:)__option_set_id}" + typeset -gA "$__the_hash_name" + →chroma/main-chroma-print "[E] __the_hash_name ${__the_hash_name}:[$__option_set_id]" + + # Split on || + __ch_def_name="fsh__${__chroma_name}__chroma__def[${__option_set_id}]" + __split=( "${(P@s:||:)__ch_def_name}" ) + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() + # Remove only leading and trailing whitespace + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + + →chroma/main-chroma-print -rl "[F] Got ||-__split: _________" ${${(@)${${__split[@]##[[:space:]]##}[@]//[${__hspaces}]##/ }[@]//[${__nl}]##/$__nl}[@]//(#s)/:::} "_________" + for __el in $__split; do + __sp=( "${(@s:<<>>:)__el}" ) + [[ ${#__sp} -eq 1 && -z "${__sp[1]}" ]] && __sp=() + __sp=( "${__sp[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + + →chroma/main-chroma-print -l -- "Processing an ||-part - got <<>>-split: _________" "${${__sp[@]}[@]/(#s)/-\\t}" "_________" + __e="${__sp[1]}" + local __e1=${${__e#\(}%\)(:add|:del|)} + local __e2=${(M)__e##\(*\)(:add|:del)} + # Split on | with the ( and ) and :add/:del stripped and then append + # the :add or :del depending on what's on the input line + __s=() + for __ in ${(@s:|:)__e1}; do + __s+=( $__${__e2:+${(M)__e%(:add|:del)}} ) + done + [[ ${#__s} -eq 1 && -z "${__s[1]}" ]] && __s=() + __s=( "${__s[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + shift __sp + + for __ in $__s; do + __=${__%\^} + [[ "$__" = -*:(add|del) ]] && __var_name="${__the_hash_name}[${__}-directive]" || __var_name="${__the_hash_name}[${__}-opt-action]" + →chroma/main-chroma-print "${(r:70:: :):-${__var_name}} := >>${__sp[1]}${${${#__sp}:#(0|1)}:+ +}<<" + : ${(P)__var_name::=${__sp[1]}${${${#__sp}:#(0|1)}:+ +}} + + if (( ${#__sp} >= 2 )); then + __var_name="${__the_hash_name}[${__}-opt-arg-action]" + →chroma/main-chroma-print "${(r:70:: :):-${__var_name}} := >>${__sp[2]}<<}" + : ${(P)__var_name::=$__sp[2]} + fi + done + done +} + +# Processes given token +→chroma/main-process-token.ch() { + local __subcmd="$1" __wrd="$2" __val __var_name __main_hash_name __the_hash_name __i __size + local -a __splitted __split __added + + →chroma/main-chroma-print "\n******************* Starting →chroma/main-process-token <<$__wrd>>// subcmd:${(qq)__subcmd}" + __main_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^\*])/${map[${match[1]}]}}" + __var_name="${__main_hash_name}[subcmd:$__subcmd]" + __splitted=( "${(@s://:P)__var_name}" ) + [[ ${#__splitted} -eq 1 && -z "${__splitted[1]}" ]] && __splitted=() + __splitted=( "${__splitted[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + + →chroma/main-chroma-print -rl -- "[B] MAIN-PROCESS-TOKEN: got [OPTION/ARG-**S-E-T-S**] //-splitted from subcmd:$__subcmd: ${${(j:, :)__splitted}:-EMPTY-SET!}" "----- __splitted\\Deleted: -----" ${${(j:, :)${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}}:-EMPTY-SET (deleted)!} "----- Added\\Deleted: -----" ${${(j:, :)${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}}:-EMPTY-SET (added)!} -----\ Deleted:\ ----- ${(j:, :)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}} >> /tmp/reply + + (( ! ${#__splitted} )) && { + __var_name="${__main_hash_name}[subcmd:*]" + __splitted=( "${(@s://:P)__var_name}" ) + [[ ${#__splitted} -eq 1 && -z "${__splitted[1]}" ]] && __splitted=() + __splitted=( "${__splitted[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + (( ! ${#__splitted} )) && return 1 + } + + →chroma/main-chroma-print -rl -- "---NO-HASH-CREATE-FROM-NOW-ON---" + + if [[ -z "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" ]]; then + →chroma/main-chroma-print -rl -- "-z OPT-WITH-ARG-ACTIVE == true" + if [[ "$__wrd" = -* ]]; then + →chroma/main-chroma-print "1st-PATH (-z opt-with-arg-active, non-opt-arg branch, i.e. OPTION BRANCH) [#${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}]" + for __val in ${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})} ${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}; do + [[ "${__val}" != "${__val%%_([0-9]##|\#)##*}"_${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}_opt(\*|\^|) && "${__val}" != "${__val%%_([0-9]##|\#)*}"_"#"_opt(\*|\^|) ]] && { →chroma/main-chroma-print "DIDN'T MATCH $__val / arg counter:${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" ; continue; } || →chroma/main-chroma-print "Got candidate: $__val" + # Create the hash cache-parameter if needed + __the_hash_name="fsh__chroma__${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}__${__subcmd//[^a-zA-Z0-9_]/_}__${${__val//(#b)([\#\^\*])/${map[${match[1]}]}}//[^a-zA-Z0-9_]/_}" + [[ "$__val" = *_opt(\*|\^|) && "${(P)+__the_hash_name}" -eq 0 ]] && →chroma/main-create-OPTION-hash.ch "$__subcmd" "$__val" "$__the_hash_name" || →chroma/main-chroma-print "Not creating, the hash already exists..." + # Try dedicated-entry for the option + __var_name="${__the_hash_name}[${${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}-opt-action]" + __split=( "${(@s://:P)__var_name}" ) + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() + # If no result, then try with catch-all entry + (( ! ${#__split} )) && { + →chroma/main-chroma-print "% no ${(q-)${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}-opt-action, retrying with *-opt-action" "|__var_name|:$__var_name" + __var_name="${__the_hash_name}[*-opt-action]" + __split=( "${(@s://:P)__var_name}" ) + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() + } + __svalue="$__var_name" + # Remove whitespace + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + →chroma/main-chroma-print -l -- "\`$__val' // ${#__split} // $__wrd: (ch.run #${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]}), deref. of \`$__var_name'" + if (( ${#__split} )); then + →chroma/main-chroma-print -l -- "Got split of {\$#__split:$#__split} ${__wrd}-opt-action or *-opt-action" "${${(q-)__split[@]}[@]/(#s)/->\\t}" + if [[ "${__split[2]}" = *[[:blank:]]+ ]]; then + →chroma/main-chroma-print "YES handling the value (the OPT.ARGUMENT)! [${__split[2]}]" + if [[ "$__wrd" = *=* ]]; then + →chroma/main-chroma-print "The-immediate Arg-Acquiring, of option" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="${__svalue%-opt-action\]}-opt-arg-action]" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="${__wrd#*=}" + __have_value=2 + else + →chroma/main-chroma-print "Enable Arg-Awaiting, of option" + →chroma/main-chroma-print "FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]=\"${__svalue%-opt-action\]}-opt-arg-action]\"" + __have_value=0 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="${__svalue%-opt-action\]}-opt-arg-action]" + fi + fi + + __action="${__split[1]}" + __handler="${__split[2]%[[:blank:]]+}" + + # Check for directives (like :add) + if [[ "$__val" = *_opt\^ ]]; then + __var_name="${__the_hash_name}[${${${${(M)__wrd#?*=}:+${__wrd%=*}=}:-$__wrd}}:add-directive]" + (( ${(P)+__var_name} )) && __split=( "${(@s://:P)__var_name}" ) || __split=() + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split[1]=() + __ivalue=${#__split} + __var_name="${__var_name%:add-*}:del-directive]" + (( ${(P)+__var_name} )) && __split+=( "${(@s://:P)__var_name}" ) + [[ ${#__split} -eq $(( __ivalue + 1 )) && -z "${__split[__ivalue+1]}" ]] && __split[__ivalue+1]=() + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + __tmp=${#__split} + + # First: del-directive + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]+="${(j: :)__split[__ivalue+1,__tmp]} " + + →chroma/main-chroma-print -rl ":add / :del directives: __ivalue:$__ivalue, THE __SPLIT[#$__tmp]: " "${__split[@]}" "//" "The FAST_HIGHLIGHT[chroma-*deleted-nodes]: " ${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]} >> /tmp/reply + + # Second: add-directive + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]+="${(j: :)__split[1,__ivalue]} " + fi + [[ "$__handler" = ::[^[:space:]]* ]] && __handler="${__handler#::}" || __handler="" + [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(1): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } + [[ "$__have_value" -ne 2 && -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl "Running action (1): $__action" ; eval "() { $__action; }"; } + [[ "$__val" != *\* ]] && break + else + →chroma/main-chroma-print -rl -- "NO-MATCH ROUTE TAKEN" + fi + done + else + →chroma/main-chroma-print "1st-PATH-B (-z opt-with-arg-active, non-opt-arg branch, ARGUMENT BRANCH [#${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}]) //// added-nodes: ${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}" + for __val in ${__splitted[@]:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})} ${${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}:#(${(~j:|:)${(@)=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}})}; do + [[ "${__val}" != "${__val%%_([0-9]##|\#)*}"_"${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}"_arg(\*|\^|) && "${__val}" != "${__val%%_([0-9]##|\#)*}"_"#"_arg(\*|\^|) ]] && { →chroma/main-chroma-print "Continuing for $__val / arg counter ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" ; continue } + # Create the hash cache-parameter if needed + __the_hash_name="fsh__chroma__${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}__${__subcmd//[^a-zA-Z0-9_]/_}__${${__val//\#/H}//[^a-zA-Z0-9_]/_}" + __action="" __handler="" + →chroma/main-chroma-print "A hit, chosen __val:$__val!" + __ch_def_name="fsh__${__chroma_name}__chroma__def[$__val]" + __split=( "${(P@s:<<>>:)__ch_def_name}" ) + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + + __sp=( "${(@s://:)__split[1]}" ) + __sp=( "${__sp[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + __action="${__sp[1]#*::::: ##}" + + # Verify if it's the expected argument + [[ "${__sp[1]}" = *:::::* && "$__wrd" != ${~${__sp[1]%% ##:::::*}} ]] && \ + { →chroma/main-chroma-print -r "mismatch ${__sp[1]%% ##:::::*} != $__wrd, continuing" ; continue; } + + →chroma/main-chroma-print -l -- "Got action record for $__val, i.e. the split:" "${__sp[@]//(#s)/-\t}" "_________" + + [[ "${__sp[2]}" = ::[^[:space:]]* ]] && __handler="${__sp[2]#::}" || { [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && →chroma/main-chroma-print "=== Error === In chroma definition: a handler entry ${(q)__sp[2]} without leading \`::'" ; } + [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(3): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } + [[ -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running action(3): $__action" ; eval "() { $__action; } \"${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}\" \"$__start\" \"$__end\" \"$__wrd\""; } + + # Check for argument directives (like :add) + if (( ${#__split} >= 2 )); then + for __ in "${(@)__split[2,-1]}"; do + __splitted=( "${(@s://:)__}" ) + if [[ "${__splitted[1]}" = add:* ]]; then + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]+="${__splitted[1]#add:} ${(j: :)__splitted[2,-1]} " + elif [[ "${__splitted[1]}" = del:* ]]; then + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]+="${__splitted[1]#del:} ${(j: :)__splitted[2,-1]} " + fi + done + →chroma/main-chroma-print -l "ARGUMENT :add / :del directives: THE __SPLIT[#${#__split}]: " "${__split[@]//(#s)/-\\t}" "//" "The FAST_HIGHLIGHT[chroma-*deleted-nodes]: " ${(@)${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]}//(#s)/-\\t} "The FAST_HIGHLIGHT[chroma-*added-nodes]: " ${(@)${=FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]}//(#s)/-\\t} + fi + + [[ "$__val" != *\* ]] && break + done + fi + else + →chroma/main-chroma-print -- "2nd-PATH (-n opt-with-arg-active) NON-EMPTY arg-active:\nThe actual opt-val <<< \$__wrd:$__wrd >>> store (after the \`Arg-Awaiting' in the chroma-run: #$(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]-1 )) [current: #$(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr] ))])" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="$__wrd" + __have_value=1 + fi + + # Execute the action if not during simulated opt-argument (--opt=...) + →chroma/main-chroma-print "** BEFORE: \`if (( __have_value ))'" + if (( __have_value )); then + →chroma/main-chroma-print "In the \`if (( __have_value ))' [have_value: $__have_value]" + # Split + __var_name="${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="" + __split=( "${(@s://:P)__var_name}" ) + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && { →chroma/main-chroma-print -rl "NULL at __var_name:$__var_name" ; __split=(); } + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + + # Remember 1st level action + (( __have_value == 2 )) && __value="$__action" || __value="" + + if (( ${#__split} )); then + →chroma/main-chroma-print -l -- "Got //-split (3, for opt-ARG-action, from [$__var_name]):" "${${(q-)__split[@]}[@]/(#s)/+\\t}" + __action="${__split[1]}" + __handler="${__split[2]}" + [[ "$__handler" = ::[^[:space:]]* ]] && __handler="${__handler#::}" + + [[ -n "$__handler" && "$__handler" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running handler(2): $__handler" ; "$__handler" "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]:-NULL}" "$__start" "$__end" "$__wrd"; } + [[ -n "$__action" && "$__action" != "NO-OP" ]] && { →chroma/main-chroma-print -rl -- "Running action(2): $__action" ; eval "$__action"; } + →chroma/main-chroma-print -rl -- "The __action value: [$__value]" + [[ "$__have_value" -eq 2 && -n "$__value" && "$__value" != "NO-OP" ]] && { →chroma/main-chroma-print -rl "Running action (of 1, at 2): $__value" ; eval "$__value"; } + fi + fi + →chroma/main-chroma-print -- "_________ Exiting →chroma/main-process-token.ch $__subcmd / $__wrd _________" +} + +# Iterates over the chroma def. fields and creates initial +# fields in the fsh__${__chroma_name}__chroma__def hash +→chroma/-pre_process_chroma_def.ch() { + local __key __value __ke _val __the_hash_name="$1" __var_name + local -a __split + + →chroma/main-chroma-print -rl -- "Starting PRE_PROCESS for __the_hash_name:$__the_hash_name" + + __ch_def_name="fsh__${__chroma_name}__chroma__def[subcommands]" + local __subcmds="${(P)__ch_def_name}" + if [[ "$__subcmds" = "::"* ]]; then + ${__subcmds#::} + __var_name="${__the_hash_name}[subcommands]" + : ${(P)__var_name::=(${(j:|:)reply})} + else + __var_name="${__the_hash_name}[subcommands]" + : ${(P)__var_name::=$__subcmds} + fi + →chroma/main-chroma-print "Got SUBCOMMANDS: ${(P)__var_name}" + + __ch_def_name="fsh__${__chroma_name}__chroma__def[subcmd-hook]" + local __subcmd_hook="${(P)__ch_def_name}" + if [[ -n "$__subcmd_hook" ]]; then + __var_name="${__the_hash_name}[subcmd-hook]" + : ${(P)__var_name::=$__subcmd_hook} + fi + + __ch_def_name="fsh__${__chroma_name}__chroma__def[(I)subcmd:*]" + for __key in "${(P@)__ch_def_name}"; do + __split=( "${(@s:|:)${${__key##subcmd:\((#c0,1)}%\)}}" ) + [[ ${#__split} -eq 1 && -z "${__split[1]}" ]] && __split=() + __split=( "${__split[@]//((#s)[[:space:]]##|[[:space:]]##(#e))/}" ) + for __ke in "${__split[@]}"; do + __var_name="${__the_hash_name}[subcmd:$__ke]" + __ch_def_name="fsh__${__chroma_name}__chroma__def[$__key]" + : ${(P)__var_name::=${(P)__ch_def_name}} + →chroma/main-chroma-print -rl -- "Storred ${__var_name}=chroma_def[$__key], i.e. = ${(P)__ch_def_name}" + done + done +} + +if (( __first_call )); then + →chroma/-${__chroma_name}-first-call + FAST_HIGHLIGHT[chroma-current]="$__wrd" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]=0 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand]=0 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="" + FAST_HIGHLIGHT[chrome-${FAST_HIGHLIGHT[chroma-current]}-occurred-double-hyphen]=0 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]="" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-arg]="" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]=1 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-added-nodes]="" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-deleted-nodes]="" + __the_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^])/${map[${match[1]}]}}" + (( 0 == ${(P)+__the_hash_name} )) && { + typeset -gA "$__the_hash_name" + →chroma/-pre_process_chroma_def.ch "$__the_hash_name" + } || →chroma/main-chroma-print "...No... [\${+$__the_hash_name} ${(P)+__the_hash_name}]" + return 1 +else + (( ++ FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr] )) + # Following call, i.e. not the first one + + # Check if chroma should end – test if token is of type + # "starts new command", if so pass-through – chroma ends + [[ "$__arg_type" = 3 ]] && return 2 + + →chroma/main-chroma-print "== @@ Starting @@ #${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-call-nr]} Main-Chroma-call == // << __WORD:$__wrd >> ## Subcommand: ${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL} //@@// -n option-with-arg-active:${(q-)FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" + if [[ "$__wrd" = -* || -n "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-option-with-arg-active]}" + ]]; then + →chroma/main-chroma-print "## The \`if -*' i.e. \`IF OPTION' MAIN branch" + →chroma/main-process-token.ch "${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL}" "$__wrd" + else + # If at e.g. '>' or destination/source spec (of the redirection) + if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then + return 1 + elif (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand] == 0 )) { + __the_hash_name="fsh__chroma__main__${${FAST_HIGHLIGHT[chroma-current]//[^a-zA-Z0-9_]/_}//(#b)([\#\^])/${map[${match[1]}]}}" + __var_name="${__the_hash_name}[subcommands]" + if [[ "$__wrd" = ${(P)~__var_name} ]]; then + →chroma/main-chroma-print "GOT-SUBCOMMAND := $__wrd, subcmd verification / OK" + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-got-subcommand]=1 + FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]="$__wrd" + __var_name="${__the_hash_name}[subcmd-hook]" + (( ${(P)+__var_name} )) && { →chroma/main-chroma-print -r -- "Running subcmd-hook: ${(P)__var_name}" ; "${(P)__var_name}" "$__wrd"; } + __style="${FAST_THEME_NAME}subcommand" + else + →chroma/main-chroma-print "subcmd verif / NOT OK; Incrementing the COUNTER-ARG ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]} -> $(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] + 1 ))" >> /tmp/fsh-dbg + (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] += 1 )) + →chroma/main-chroma-print "UNRECOGNIZED ARGUMENT ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" + →chroma/main-process-token.ch "${${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}:-NULL}" "$__wrd" + fi + } else { + __wrd="${__wrd//\`/x}" + __arg="${__arg//\`/x}" + __wrd="${(Q)__wrd}" + + local __tmp_def_name="fsh__${__chroma_name}__chroma__def[subcommands-blacklist]" + if [[ ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]} = \ + (${(~j:|:)${(@s:,:)${(PA)__tmp_def_name}}}) + ]] { + return 1 + } + + →chroma/main-chroma-print "Incrementing the COUNTER-ARG ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]} -> $(( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] + 1 ))" + (( FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg] += 1 )) + →chroma/main-chroma-print "ARGUMENT ${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-counter-arg]}" + + →chroma/main-chroma-print "ELSE *-got-subcommand == 1 is TRUE" + →chroma/main-process-token.ch "${FAST_HIGHLIGHT[chroma-${FAST_HIGHLIGHT[chroma-current]}-subcommand]}" "$__wrd" + } + fi +fi + + +# Add region_highlight entry (via `reply' array) +if [[ -n "$__style" ]]; then + (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) \ + && reply+=("$__start $__end ${FAST_HIGHLIGHT_STYLES[$__style]}") +fi + +# We aren't passing-through, do obligatory things ourselves +(( this_word = next_word )) +_start_pos=$_end_pos + +return 0 + +# vim:ft=zsh:et:sw=4