diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-07-31 14:22:57 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-07-31 14:22:57 +0200 |
| commit | 36070dd429af69f1042f4ee56488a960c4d8e7ef (patch) | |
| tree | bdf9ab393e5b8e632a46319d4d3923fe19608e37 /src/rc | |
| parent | ac2676cbcfa3be81b6136efc28b009bc25489c30 (diff) | |
CommandManager: rework command parser
a new type of strings is supported inspired by the ruby strings.
%<delimiter>content<delimiter>, if opening delimiter is one of
([{<, then closing delimiter is the matching )]}> and balanced
delimiters in the string needs not to be escaped, else the closing
delimiter is the same as the opening one.
shell expansion is available through %sh<delimiter>command<delimiter>
syntax.
Command flags have been removed, as these strings provide proper nesting
support, so now, you can for example do:
def command %{ echo %sh{ ls } }
Diffstat (limited to 'src/rc')
| -rw-r--r-- | src/rc/cpp.kak | 45 | ||||
| -rw-r--r-- | src/rc/diff.kak | 17 | ||||
| -rw-r--r-- | src/rc/git.kak | 34 | ||||
| -rw-r--r-- | src/rc/global.kak | 13 | ||||
| -rw-r--r-- | src/rc/kakrc.kak | 27 |
5 files changed, 77 insertions, 59 deletions
diff --git a/src/rc/cpp.kak b/src/rc/cpp.kak index 82b9e9bf..f3e4dec9 100644 --- a/src/rc/cpp.kak +++ b/src/rc/cpp.kak @@ -1,29 +1,33 @@ -hook global BufCreate .*\.(c|cc|cpp|cxx|C|h|hh|hpp|hxx|H) \ +hook global BufCreate .*\.(c|cc|cpp|cxx|C|h|hh|hpp|hxx|H) %{ setb filetype cpp +} -hook global WinSetOption filetype=cpp \ - addhl group cpp-highlight; \ - addhl -group cpp-highlight regex "\<(this|true|false|NULL|nullptr|)\>|\<-?\d+[fdiu]?|'((\\.)?|[^'\\])'" red default; \ - addhl -group cpp-highlight regex "\<(void|int|char|unsigned|float|bool|size_t)\>" yellow default; \ - addhl -group cpp-highlight regex "\<(while|for|if|else|do|switch|case|default|goto|break|continue|return|using|try|catch|throw|new|delete|and|or|not)\>" blue default; \ - addhl -group cpp-highlight regex "\<(const|auto|namespace|inline|static|volatile|class|struct|enum|union|public|protected|private|template|typedef|virtual|friend|extern|typename)\>" green default; \ - addhl -group cpp-highlight regex "(?<!')\"(\\\"|[^\"])*\"" magenta default; \ - addhl -group cpp-highlight regex "(\`|(?<=\n))\h*#\h*[^\n]*" magenta default; \ - addhl -group cpp-highlight regex "(//[^\n]*\n)|(/\*.*?(\*/|\'))" cyan default; \ - addfilter group cpp-filters; \ - addfilter -group cpp-filters preserve_indent; \ - addfilter -group cpp-filters cleanup_whitespaces; \ - hook window InsertEnd .* exec xs\h+(?=\n)<ret>d +hook global WinSetOption filetype=cpp %{ + addhl group cpp-highlight; + addhl -group cpp-highlight regex "\<(this|true|false|NULL|nullptr|)\>|\<-?\d+[fdiu]?|'((\\.)?|[^'\\])'" red default; + addhl -group cpp-highlight regex "\<(void|int|char|unsigned|float|bool|size_t)\>" yellow default; + addhl -group cpp-highlight regex "\<(while|for|if|else|do|switch|case|default|goto|break|continue|return|using|try|catch|throw|new|delete|and|or|not)\>" blue default; + addhl -group cpp-highlight regex "\<(const|auto|namespace|inline|static|volatile|class|struct|enum|union|public|protected|private|template|typedef|virtual|friend|extern|typename)\>" green default; + addhl -group cpp-highlight regex "(?<!')\"(\\\"|[^\"])*\"" magenta default; + addhl -group cpp-highlight regex "(\`|(?<=\n))\h*#\h*[^\n]*" magenta default; + addhl -group cpp-highlight regex "(//[^\n]*\n)|(/\*.*?(\*/|\'))" cyan default; + addfilter group cpp-filters; + addfilter -group cpp-filters preserve_indent; + addfilter -group cpp-filters cleanup_whitespaces; + hook window InsertEnd .* %{ exec xs\h+(?=\n)<ret>d } +} -hook global WinSetOption filetype=(?!cpp).* \ - rmhl cpp-highlight; \ +hook global WinSetOption filetype=(?!cpp).* %{ + rmhl cpp-highlight; rmfilter cpp-filters +} -hook global BufNew .*\.(h|hh|hpp|hxx|H) \ +hook global BufNew .*\.(h|hh|hpp|hxx|H) %{ exec ggi<c-r>%<ret><esc>ggxs\.<ret>c_<esc><space>A_INCLUDED<esc>xyppI#ifndef<space><esc>jI#define<space><esc>jI#endif<space>//<space><esc>O<esc> +} -def alt edit \ - `case ${kak_bufname} in +def alt %{ edit %sh{ + case ${kak_bufname} in *.c) echo ${kak_bufname/%c/h} ;; *.cc) echo ${kak_bufname/%cc/hh} ;; *.cpp) echo ${kak_bufname/%cpp/hpp} ;; @@ -34,4 +38,5 @@ def alt edit \ *.hpp) echo ${kak_bufname/%hpp/cpp} ;; *.hxx) echo ${kak_bufname/%hxx/cxx} ;; *.H) echo ${kak_bufname/%H/C} ;; - esac`
\ No newline at end of file + esac +}}
\ No newline at end of file diff --git a/src/rc/diff.kak b/src/rc/diff.kak index 8a9a390f..434026ab 100644 --- a/src/rc/diff.kak +++ b/src/rc/diff.kak @@ -1,11 +1,14 @@ -hook global BufCreate .*\.(diff|patch) \ +hook global BufCreate .*\.(diff|patch) %{ setb filetype diff +} -hook global WinSetOption filetype=diff \ - addhl group diff-highlight; \ - addhl -group diff-highlight regex "^\+[^\n]*\n" green default; \ - addhl -group diff-highlight regex "^-[^\n]*\n" red default; \ - addhl -group diff-highlight regex "^@@[^\n]*@@" cyan default; +hook global WinSetOption filetype=diff %{ + addhl group diff-highlight + addhl -group diff-highlight regex "^\+[^\n]*\n" green default + addhl -group diff-highlight regex "^-[^\n]*\n" red default + addhl -group diff-highlight regex "^@@[^\n]*@@" cyan default +} -hook global WinSetOption filetype=(?!diff).* \ +hook global WinSetOption filetype=(?!diff).* %{ rmhl diff-highlight +} diff --git a/src/rc/git.kak b/src/rc/git.kak index 8b391ce5..14fa37c3 100644 --- a/src/rc/git.kak +++ b/src/rc/git.kak @@ -1,23 +1,29 @@ -hook global BufCreate .*COMMIT_EDITMSG \ +hook global BufCreate .*COMMIT_EDITMSG %{ setb filetype git-commit +} -hook global WinSetOption filetype=git-commit \ - addhl group git-commit-highlight; \ - addhl -group git-commit-highlight regex "#[^\n]*\n" cyan default; \ - addhl -group git-commit-highlight regex "\<(modified|deleted|new file):[^\n]*\n" magenta default; \ - addhl -group git-commit-highlight regex "\<(modified|deleted|new file):" red default; +hook global WinSetOption filetype=git-commit %{ + addhl group git-commit-highlight + addhl -group git-commit-highlight regex "#[^\n]*\n" cyan default + addhl -group git-commit-highlight regex "\<(modified|deleted|new file):[^\n]*\n" magenta default + addhl -group git-commit-highlight regex "\<(modified|deleted|new file):" red default +} -hook global WinSetOption filetype=(?!git-commit).* \ +hook global WinSetOption filetype=(?!git-commit).* %{ rmhl git-commit-highlight +} -hook global BufCreate .*git-rebase-todo \ +hook global BufCreate .*git-rebase-todo %{ setb filetype git-rebase +} -hook global WinSetOption filetype=git-rebase \ - addhl group git-rebase-highlight; \ - addhl -group git-rebase-highlight regex "#[^\n]*\n" cyan default; \ - addhl -group git-rebase-highlight regex "^(pick|edit|reword|squash|fixup|exec|[persfx]) \w+" magenta default; \ - addhl -group git-rebase-highlight regex "^(pick|edit|reword|squash|fixup|exec|[persfx])" green default; +hook global WinSetOption filetype=git-rebase %{ + addhl group git-rebase-highlight + addhl -group git-rebase-highlight regex "#[^\n]*\n" cyan default + addhl -group git-rebase-highlight regex "^(pick|edit|reword|squash|fixup|exec|[persfx]) \w+" magenta default + addhl -group git-rebase-highlight regex "^(pick|edit|reword|squash|fixup|exec|[persfx])" green default +} -hook global WinSetOption filetype=(?!git-rebase).* \ +hook global WinSetOption filetype=(?!git-rebase).* %{ rmhl git-rebase-highlight +} diff --git a/src/rc/global.kak b/src/rc/global.kak index 4f8da202..983a420b 100644 --- a/src/rc/global.kak +++ b/src/rc/global.kak @@ -1,14 +1,15 @@ def -env-params \ - -shell-completion 'global -c ${kak_param0}' \ - tag eval \ - `if [[ ${kak_param0} != "" ]]; then + -shell-completion %{ global -c ${kak_param0} } \ + tag %{ eval %sh{ + if [[ ${kak_param0} != "" ]]; then tagname=${kak_param0} else tagname=${kak_selection} fi - params=$(global --result grep ${tagname} | sed "s/\([^:]*\):\([0-9]*\):\(.*\)/'\1:\2 \3' 'edit \1 \2; try exec \"20k41Xs\\\\Q\3<ret>\" catch echo \"could not find [\3] near \1:\2\"; exec \2g'/") + params=$(global --result grep ${tagname} | sed "s/\([^:]*\):\([0-9]*\):\(.*\)/'\1:\2 \3' 'edit \1 \2; try %{ exec \"20k41Xs\\\\Q\3<ret>\" } catch %{ echo \"could not find [\3] near \1:\2\"; exec \2g }'/") if [[ ${params} != "" ]]; then - echo "menu -auto-single $params" + echo "menu -auto-single ${params//$'\n'/ }" else echo echo tag ${tagname} not found - fi` + fi +}} diff --git a/src/rc/kakrc.kak b/src/rc/kakrc.kak index a2f3c668..a7ab8b31 100644 --- a/src/rc/kakrc.kak +++ b/src/rc/kakrc.kak @@ -1,17 +1,20 @@ -hook global BufCreate (.*/)?(kakrc|.*.kak) \ +hook global BufCreate (.*/)?(kakrc|.*.kak) %{ setb filetype kak +} -hook global WinSetOption filetype=kak \ - addhl group kak-highlight; \ - addhl -group kak-highlight regex \<(hook|addhl|rmhl|addfilter|rmfilter|exec|source|runtime|def|echo|edit|set[gbw])\> green default; \ - addhl -group kak-highlight regex \<(default|black|red|green|yellow|blue|magenta|cyan|white)\> yellow default; \ - addhl -group kak-highlight regex (?<=\<hook)(\h+\w+){2}\h+\H+ magenta default; \ - addhl -group kak-highlight regex (?<=\<hook)(\h+\w+){2} cyan default; \ - addhl -group kak-highlight regex (?<=\<hook)(\h+\w+) red default; \ - addhl -group kak-highlight regex (?<=\<hook)(\h+(global|buffer|window)) blue default; \ - addhl -group kak-highlight regex (?<=\<regex)\h+\S+ magenta default; \ - addhl -group kak-highlight regex (?<=\<set[gbw])\h+\S+\h+\S+ magenta default; \ +hook global WinSetOption filetype=kak %{ + addhl group kak-highlight + addhl -group kak-highlight regex \<(hook|addhl|rmhl|addfilter|rmfilter|exec|source|runtime|def|echo|edit|set[gbw])\> green default + addhl -group kak-highlight regex \<(default|black|red|green|yellow|blue|magenta|cyan|white)\> yellow default + addhl -group kak-highlight regex (?<=\<hook)(\h+\w+){2}\h+\H+ magenta default + addhl -group kak-highlight regex (?<=\<hook)(\h+\w+){2} cyan default + addhl -group kak-highlight regex (?<=\<hook)(\h+\w+) red default + addhl -group kak-highlight regex (?<=\<hook)(\h+(global|buffer|window)) blue default + addhl -group kak-highlight regex (?<=\<regex)\h+\S+ magenta default + addhl -group kak-highlight regex (?<=\<set[gbw])\h+\S+\h+\S+ magenta default addhl -group kak-highlight regex (?<=\<set[gbw])\h+\S+ red default +} -hook global WinSetOption filetype=(?!kak).* \ +hook global WinSetOption filetype=(?!kak).* %{ rmhl kak-highlight +} |
