summaryrefslogtreecommitdiff
path: root/src/rc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-07-31 14:22:57 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-07-31 14:22:57 +0200
commit36070dd429af69f1042f4ee56488a960c4d8e7ef (patch)
treebdf9ab393e5b8e632a46319d4d3923fe19608e37 /src/rc
parentac2676cbcfa3be81b6136efc28b009bc25489c30 (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.kak45
-rw-r--r--src/rc/diff.kak17
-rw-r--r--src/rc/git.kak34
-rw-r--r--src/rc/global.kak13
-rw-r--r--src/rc/kakrc.kak27
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
+}