diff --git a/rc/filetype/asciidoc.kak b/rc/filetype/asciidoc.kak index 21607da0..b6e79002 100644 --- a/rc/filetype/asciidoc.kak +++ b/rc/filetype/asciidoc.kak @@ -8,8 +8,14 @@ hook global BufCreate .+\.(a(scii)?doc|asc) %{ set-option buffer filetype asciidoc } -hook -once global BufSetOption filetype=asciidoc %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook -group asciidoc-highlight global WinSetOption filetype=asciidoc %{ require-module asciidoc + + add-highlighter window/asciidoc ref asciidoc + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/asciidoc } } provide-module asciidoc %{ @@ -40,12 +46,4 @@ add-highlighter shared/asciidoc/ regex ^:[-\w]+: 0:meta # Commands # ‾‾‾‾‾‾‾‾ -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group asciidoc-highlight global WinSetOption filetype=asciidoc %{ - add-highlighter window/asciidoc ref asciidoc - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/asciidoc } -} - } diff --git a/rc/filetype/c-family.kak b/rc/filetype/c-family.kak index 68c2a387..9e30e200 100644 --- a/rc/filetype/c-family.kak +++ b/rc/filetype/c-family.kak @@ -23,8 +23,39 @@ hook global BufCreate .*\.m %{ set-option buffer filetype objc } -hook -once global BufSetOption filetype=(c|cpp|objc) %{ +hook global WinSetOption filetype=(c|cpp|objc) %[ require-module c-family + + evaluate-commands "set-option window static_words %%opt{%val{hook_param_capture_1}_static_words}" + + hook -group "%val{hook_param_capture_1}-trim-indent" window ModeChange insert:.* c-family-trim-indent + hook -group "%val{hook_param_capture_1}-insert" window InsertChar \n c-family-insert-on-newline + hook -group "%val{hook_param_capture_1}-indent" window InsertChar \n c-family-indent-on-newline + hook -group "%val{hook_param_capture_1}-indent" window InsertChar \{ c-family-indent-on-opening-curly-brace + hook -group "%val{hook_param_capture_1}-indent" window InsertChar \} c-family-indent-on-closing-curly-brace + hook -group "%val{hook_param_capture_1}-insert" window InsertChar \} c-family-insert-on-closing-curly-brace + + alias window alt "%val{hook_param_capture_1}-alternative-file" + + hook -once -always window WinSetOption filetype=.* " + remove-hooks window %val{hook_param_capture_1}-.+ + unalias window alt %val{hook_param_capture_1}-alternative-file + " +] + +hook -group c-highlight global WinSetOption filetype=c %{ + add-highlighter window/c ref c + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/c } +} + +hook -group cpp-highlight global WinSetOption filetype=cpp %{ + add-highlighter window/cpp ref cpp + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/cpp } +} + +hook -group objc-highlight global WinSetOption filetype=objc %{ + add-highlighter window/objc ref objc + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/objc } } @@ -234,9 +265,7 @@ evaluate-commands %sh{ join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf '%s\n' "hook global WinSetOption filetype=c %{ - set-option window static_words $(join "${keywords} ${attributes} ${types} ${macros}" ' ') - }" + printf %s\\n "declare-option str-list c_static_words $(join "${keywords} ${attributes} ${types} ${macros}" ' ')" # Highlight keywords printf %s " @@ -286,9 +315,7 @@ evaluate-commands %sh{ join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=cpp %{ - set-option window static_words $(join "${keywords} ${attributes} ${entities} ${types} ${values}" ' ') - }" + printf %s\\n "declare-option str-list cpp_static_words $(join "${keywords} ${attributes} ${entities} ${types} ${values}" ' ')" # Highlight keywords printf %s " @@ -328,9 +355,7 @@ evaluate-commands %sh{ join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=objc %{ - set-option window static_words $(join "${keywords} ${attributes} ${types} ${values} ${decorators}" ' ') - }" + printf %s\\n "declare-option str-list objc_static_words $(join "${keywords} ${attributes} ${types} ${values} ${decorators}" ' ')" # Highlight keywords printf %s " @@ -342,37 +367,6 @@ evaluate-commands %sh{ " } -hook global WinSetOption filetype=(c|cpp|objc) %[ - hook -group "%val{hook_param_capture_1}-trim-indent" window ModeChange insert:.* c-family-trim-indent - hook -group "%val{hook_param_capture_1}-insert" window InsertChar \n c-family-insert-on-newline - hook -group "%val{hook_param_capture_1}-indent" window InsertChar \n c-family-indent-on-newline - hook -group "%val{hook_param_capture_1}-indent" window InsertChar \{ c-family-indent-on-opening-curly-brace - hook -group "%val{hook_param_capture_1}-indent" window InsertChar \} c-family-indent-on-closing-curly-brace - hook -group "%val{hook_param_capture_1}-insert" window InsertChar \} c-family-insert-on-closing-curly-brace - - alias window alt "%val{hook_param_capture_1}-alternative-file" - - hook -once -always window WinSetOption filetype=.* " - remove-hooks window %val{hook_param_capture_1}-.+ - unalias window alt %val{hook_param_capture_1}-alternative-file - " -] - -hook -group c-highlight global WinSetOption filetype=c %{ - add-highlighter window/c ref c - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/c } -} - -hook -group cpp-highlight global WinSetOption filetype=cpp %{ - add-highlighter window/cpp ref cpp - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/cpp } -} - -hook -group objc-highlight global WinSetOption filetype=objc %{ - add-highlighter window/objc ref objc - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/objc } -} - declare-option -docstring %{control the type of include guard to be inserted in empty headers Can be one of the following: ifdef: old style ifndef/define guard diff --git a/rc/filetype/clojure.kak b/rc/filetype/clojure.kak index 062e4f0c..e7852227 100644 --- a/rc/filetype/clojure.kak +++ b/rc/filetype/clojure.kak @@ -8,8 +8,22 @@ hook global BufCreate .*[.](clj|cljc|cljs|cljx|edn) %{ set-option buffer filetype clojure } -hook -once global BufSetOption filetype=clojure %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +hook global WinSetOption filetype=clojure %[ require-module clojure + + set-option window static_words %opt{clojure_static_words} + + hook window ModeChange insert:.* -group clojure-trim-indent clojure-trim-indent + hook window InsertChar \n -group clojure-indent clojure-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window clojure-.+ } +] + +hook -group clojure-highlight global WinSetOption filetype=clojure %{ + add-highlighter window/clojure ref clojure + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/clojure } } provide-module clojure %{ @@ -157,12 +171,11 @@ evaluate-commands %sh{ print_word_highlighter(core_fns, "function"); print_word_highlighter(core_vars, "variable"); - printf(" hook global WinSetOption filetype=clojure %%{\n"\ - " set-option window static_words "); + printf("declare-option str-list clojure_static_words ") print_static_words(keywords); print_static_words(core_fns); print_static_words(core_vars); - printf("\n }\n"); + printf("\n"); } EOF } @@ -199,18 +212,4 @@ define-command -hidden clojure-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -hook -group clojure-highlight global WinSetOption filetype=clojure %{ - add-highlighter window/clojure ref clojure - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/clojure } -} - -hook global WinSetOption filetype=clojure %[ - hook window ModeChange insert:.* -group clojure-trim-indent clojure-trim-indent - hook window InsertChar \n -group clojure-indent clojure-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window clojure-.+ } -] - } diff --git a/rc/filetype/css.kak b/rc/filetype/css.kak index 8c5def9c..f8a0d26e 100644 --- a/rc/filetype/css.kak +++ b/rc/filetype/css.kak @@ -8,10 +8,26 @@ hook global BufCreate .*[.](css) %{ set-option buffer filetype css } -hook -once global BufSetOption filetype=css %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=css %[ require-module css + + hook window ModeChange insert:.* -group css-trim-indent css-trim-indent + hook window InsertChar \n -group css-indent css-indent-on-new-line + hook window InsertChar \} -group css-indent css-indent-on-closing-curly-brace + set-option buffer extra_word_chars '_' '-' + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window css-.+ } +] + +hook -group css-highlight global WinSetOption filetype=css %{ + add-highlighter window/css ref css + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/css } } + provide-module css %[ # Highlighters @@ -64,21 +80,4 @@ define-command -hidden css-indent-on-closing-curly-brace %[ ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group css-highlight global WinSetOption filetype=css %{ - add-highlighter window/css ref css - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/css } -} - -hook global WinSetOption filetype=css %[ - hook window ModeChange insert:.* -group css-trim-indent css-trim-indent - hook window InsertChar \n -group css-indent css-indent-on-new-line - hook window InsertChar \} -group css-indent css-indent-on-closing-curly-brace - set-option buffer extra_word_chars '_' '-' - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window css-.+ } -] - ] diff --git a/rc/filetype/d.kak b/rc/filetype/d.kak index b042f4f9..3772ff8b 100644 --- a/rc/filetype/d.kak +++ b/rc/filetype/d.kak @@ -8,8 +8,26 @@ hook global BufCreate .*\.di? %{ set-option buffer filetype d } -hook -once global BufSetOption filetype=d %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=d %{ require-module d + + set-option window static_words %opt{d_static_words} + + # cleanup trailing whitespaces when exiting insert mode + hook window ModeChange insert:.* -group d-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } + hook window InsertChar \n -group d-indent d-indent-on-new-line + hook window InsertChar \{ -group d-indent d-indent-on-opening-curly-brace + hook window InsertChar \} -group d-indent d-indent-on-closing-curly-brace + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window d-.+ } +} + +hook -group d-highlight global WinSetOption filetype=d %{ + add-highlighter window/d ref d + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/d } } provide-module d %🦀 @@ -68,9 +86,7 @@ evaluate-commands %sh{ decorators="disable|property|nogc|safe|trusted|system" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=d %{ - set-option window static_words ${keywords} ${attributes} ${types} ${values} ${decorators} ${properties} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list d_static_words ${keywords} ${attributes} ${types} ${values} ${decorators} ${properties}" | tr '|' ' ' # Highlight keywords printf %s " @@ -119,22 +135,4 @@ define-command -hidden d-indent-on-closing-curly-brace %[ try %[ execute-keys -itersel -draft ^\h+\}$hms\A|.\z1 ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group d-highlight global WinSetOption filetype=d %{ - add-highlighter window/d ref d - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/d } -} - -hook global WinSetOption filetype=d %{ - # cleanup trailing whitespaces when exiting insert mode - hook window ModeChange insert:.* -group d-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } - hook window InsertChar \n -group d-indent d-indent-on-new-line - hook window InsertChar \{ -group d-indent d-indent-on-opening-curly-brace - hook window InsertChar \} -group d-indent d-indent-on-closing-curly-brace - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window d-.+ } -} - 🦀 diff --git a/rc/filetype/dart.kak b/rc/filetype/dart.kak index 49701429..660c550e 100644 --- a/rc/filetype/dart.kak +++ b/rc/filetype/dart.kak @@ -8,11 +8,29 @@ hook global BufCreate .*\.dart %{ set-option buffer filetype dart } -hook -once global BufSetOption filetype=dart %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=dart %{ require-module dart + + set-option window static_words %opt{dart_static_words} + + # cleanup trailing whitespaces when exiting insert mode + hook window ModeChange insert:.* -group dart-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } + hook window InsertChar \n -group dart-indent dart-indent-on-new-line + hook window InsertChar \{ -group dart-indent dart-indent-on-opening-curly-brace + hook window InsertChar \} -group dart-indent dart-indent-on-closing-curly-brace + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window dart-.+ } } -provide-module dart %{ +hook -group dart-highlight global WinSetOption filetype=dart %{ + add-highlighter window/dart ref dart + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/dart } +} + +provide-module dart %🦀 # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ @@ -44,9 +62,7 @@ evaluate-commands %sh{ classes="[A-Z][a-zA-Z0-9]*" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=dart %{ - set-option window static_words ${keywords} ${attributes} ${types} ${values} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list dart_static_words ${keywords} ${attributes} ${types} ${values}" | tr '|' ' ' # Highlight keywords printf %s " @@ -93,23 +109,4 @@ define-command -hidden dart-indent-on-closing-curly-brace %[ try %[ execute-keys -itersel -draft ^\h+\}$hms\A|.\z1 ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group dart-highlight global WinSetOption filetype=dart %{ - add-highlighter window/dart ref dart - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/dart } -} - -hook global WinSetOption filetype=dart %{ - # cleanup trailing whitespaces when exiting insert mode - hook window ModeChange insert:.* -group dart-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } - hook window InsertChar \n -group dart-indent dart-indent-on-new-line - hook window InsertChar \{ -group dart-indent dart-indent-on-opening-curly-brace - hook window InsertChar \} -group dart-indent dart-indent-on-closing-curly-brace - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window dart-.+ } -} - -# balancing }}} -} +🦀 diff --git a/rc/filetype/dockerfile.kak b/rc/filetype/dockerfile.kak index b76716e2..f308ec92 100644 --- a/rc/filetype/dockerfile.kak +++ b/rc/filetype/dockerfile.kak @@ -10,8 +10,17 @@ hook global BufCreate .*/?Dockerfile(\.\w+)?$ %{ set-option buffer filetype dockerfile } -hook -once global BufSetOption filetype=dockerfile %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=dockerfile %{ require-module dockerfile + set-option window static_words %opt{dockerfile_static_words} +} + +hook -group dockerfile-highlight global WinSetOption filetype=dockerfile %{ + add-highlighter window/dockerfile ref dockerfile + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/dockerfile } } provide-module dockerfile %{ @@ -31,9 +40,7 @@ evaluate-commands %sh{ keywords="${keywords}|MAINTAINER|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=dockerfile %{ - set window static_words ONBUILD|${keywords} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list dockerfile_static_words ONBUILD|${keywords}" | tr '|' ' ' # Highlight keywords printf %s " @@ -45,12 +52,4 @@ evaluate-commands %sh{ add-highlighter shared/dockerfile/code/ regex '\$\{[\w_]+\}' 0:value add-highlighter shared/dockerfile/code/ regex '\$[\w_]+' 0:value -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group dockerfile-highlight global WinSetOption filetype=dockerfile %{ - add-highlighter window/dockerfile ref dockerfile - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/dockerfile } -} - } diff --git a/rc/filetype/elixir.kak b/rc/filetype/elixir.kak index 83321f00..56c3681e 100644 --- a/rc/filetype/elixir.kak +++ b/rc/filetype/elixir.kak @@ -8,10 +8,24 @@ hook global BufCreate .*[.](ex|exs) %{ set-option buffer filetype elixir } -hook -once global BufSetOption filetype=elixir %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=elixir %{ require-module elixir + + hook window ModeChange insert:.* -group elixir-trim-indent elixir-trim-indent + hook window InsertChar \n -group elixir-indent elixir-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window elixir-.+ } } +hook -group elixir-highlight global WinSetOption filetype=elixir %{ + add-highlighter window/elixir ref elixir + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/elixir } +} + + provide-module elixir %[ # Highlighters @@ -66,19 +80,4 @@ define-command -hidden elixir-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group elixir-highlight global WinSetOption filetype=elixir %{ - add-highlighter window/elixir ref elixir - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/elixir } -} - -hook global WinSetOption filetype=elixir %{ - hook window ModeChange insert:.* -group elixir-trim-indent elixir-trim-indent - hook window InsertChar \n -group elixir-indent elixir-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window elixir-.+ } -} - ] diff --git a/rc/filetype/go.kak b/rc/filetype/go.kak index 2df0ba9d..d697c574 100644 --- a/rc/filetype/go.kak +++ b/rc/filetype/go.kak @@ -8,8 +8,26 @@ hook global BufCreate .*\.go %{ set-option buffer filetype go } -hook -once global BufSetOption filetype=go %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=go %{ require-module go + + set-option window static_words %opt{go_static_words} + + # cleanup trailing whitespaces when exiting insert mode + hook window ModeChange insert:.* -group go-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } + hook window InsertChar \n -group go-indent go-indent-on-new-line + hook window InsertChar \{ -group go-indent go-indent-on-opening-curly-brace + hook window InsertChar \} -group go-indent go-indent-on-closing-curly-brace + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window go-.+ } +} + +hook -group go-highlight global WinSetOption filetype=go %{ + add-highlighter window/go ref go + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/go } } provide-module go %🦀 @@ -29,26 +47,26 @@ add-highlighter shared/go/code/ regex %{-?([0-9]*\.(?!0[xX]))?\b([0-9]+|0[xX][0- evaluate-commands %sh{ # Grammar - keywords="break|default|func|interface|select|case|defer|go|map|struct" - keywords="${keywords}|chan|else|goto|package|switch|const|fallthrough|if|range|type" - keywords="${keywords}|continue|for|import|return|var" - types="bool|byte|chan|complex128|complex64|error|float32|float64|int|int16|int32" - types="${types}|int64|int8|interface|intptr|map|rune|string|struct|uint|uint16|uint32|uint64|uint8" - values="false|true|nil|iota" - functions="append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover" + keywords='break default func interface select case defer go map struct + chan else goto package switch const fallthrough if range type + continue for import return var' + types='bool byte chan complex128 complex64 error float32 float64 int int16 int32 + int64 int8 interface intptr map rune string struct uint uint16 uint32 uint64 uint8' + values='false true nil iota' + functions='append cap close complex copy delete imag len make new panic print println real recover' + + join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=go %{ - set-option window static_words ${keywords} ${attributes} ${types} ${values} ${functions} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list go_static_words $(join "${keywords} ${attributes} ${types} ${values} ${functions}" ' ')" # Highlight keywords printf %s " - add-highlighter shared/go/code/ regex \b(${keywords})\b 0:keyword - add-highlighter shared/go/code/ regex \b(${attributes})\b 0:attribute - add-highlighter shared/go/code/ regex \b(${types})\b 0:type - add-highlighter shared/go/code/ regex \b(${values})\b 0:value - add-highlighter shared/go/code/ regex \b(${functions})\b 0:builtin + add-highlighter shared/go/code/ regex \b($(join "${keywords}" '|'))\b 0:keyword + add-highlighter shared/go/code/ regex \b($(join "${attributes}" '|'))\b 0:attribute + add-highlighter shared/go/code/ regex \b($(join "${types}" '|'))\b 0:type + add-highlighter shared/go/code/ regex \b($(join "${values}" '|'))\b 0:value + add-highlighter shared/go/code/ regex \b($(join "${functions}" '|'))\b 0:builtin " } @@ -84,22 +102,4 @@ define-command -hidden go-indent-on-closing-curly-brace %[ try %[ execute-keys -itersel -draft ^\h+\}$hms\A|.\z1 ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group go-highlight global WinSetOption filetype=go %{ - add-highlighter window/go ref go - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/go } -} - -hook global WinSetOption filetype=go %{ - # cleanup trailing whitespaces when exiting insert mode - hook window ModeChange insert:.* -group go-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } - hook window InsertChar \n -group go-indent go-indent-on-new-line - hook window InsertChar \{ -group go-indent go-indent-on-opening-curly-brace - hook window InsertChar \} -group go-indent go-indent-on-closing-curly-brace - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window go-.+ } -} - 🦀 diff --git a/rc/filetype/haskell.kak b/rc/filetype/haskell.kak index ecedbcfd..88b3ed29 100644 --- a/rc/filetype/haskell.kak +++ b/rc/filetype/haskell.kak @@ -8,10 +8,25 @@ hook global BufCreate .*[.](hs) %{ set-option buffer filetype haskell } -hook -once global BufSetOption filetype=haskell %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=haskell %{ require-module haskell + + set-option window extra_word_chars '_' "'" + hook window ModeChange insert:.* -group haskell-trim-indent haskell-trim-indent + hook window InsertChar \n -group haskell-indent haskell-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window haskell-.+ } } +hook -group haskell-highlight global WinSetOption filetype=haskell %{ + add-highlighter window/haskell ref haskell + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/haskell } +} + + provide-module haskell %[ # Highlighters @@ -94,20 +109,4 @@ define-command -hidden haskell-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group haskell-highlight global WinSetOption filetype=haskell %{ - add-highlighter window/haskell ref haskell - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/haskell } -} - -hook global WinSetOption filetype=haskell %{ - set-option window extra_word_chars '_' "'" - hook window ModeChange insert:.* -group haskell-trim-indent haskell-trim-indent - hook window InsertChar \n -group haskell-indent haskell-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window haskell-.+ } -} - ] diff --git a/rc/filetype/html.kak b/rc/filetype/html.kak index 81db5c9b..57d1ee6e 100644 --- a/rc/filetype/html.kak +++ b/rc/filetype/html.kak @@ -12,10 +12,29 @@ hook global BufCreate .*\.xml %{ set-option buffer filetype xml } -hook -once global BufSetOption filetype=(html|xml) %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=(html|xml) %{ require-module html + + hook window ModeChange insert:.* -group "%val{hook_param_capture_1}-trim-indent" html-trim-indent + hook window InsertChar '>' -group "%val{hook_param_capture_1}-indent" html-indent-on-greater-than + hook window InsertChar \n -group "%val{hook_param_capture_1}-indent" html-indent-on-new-line + + hook -once -always window WinSetOption "filetype=.*" " + remove-hooks window ""%val{hook_param_capture_1}-.+"" + " } +hook -group html-highlight global WinSetOption filetype=(html|xml) %{ + add-highlighter "window/%val{hook_param_capture_1}" ref html + hook -once -always window WinSetOption "filetype=.*" " + remove-highlighter ""window/%val{hook_param_capture_1}"" + " +} + + provide-module html %[ try %{ @@ -65,24 +84,4 @@ define-command -hidden html-indent-on-new-line %{ try %{ execute-keys -draft k (?!area)(?!base)(?!br)(?!col)(?!command)(?!embed)(?!hr)(?!img)(?!input)(?!keygen)(?!link)(?!menuitem)(?!meta)(?!param)(?!source)(?!track)(?!wbr)(?!/)(?!>)[a-zA-Z0-9_-]+[^>]*?>$ j } } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group html-highlight global WinSetOption filetype=(html|xml) %{ - add-highlighter "window/%val{hook_param_capture_1}" ref html - hook -once -always window WinSetOption "filetype=.*" " - remove-highlighter ""window/%val{hook_param_capture_1}"" - " -} - -hook global WinSetOption filetype=(html|xml) %{ - hook window ModeChange insert:.* -group "%val{hook_param_capture_1}-trim-indent" html-trim-indent - hook window InsertChar '>' -group "%val{hook_param_capture_1}-indent" html-indent-on-greater-than - hook window InsertChar \n -group "%val{hook_param_capture_1}-indent" html-indent-on-new-line - - hook -once -always window WinSetOption "filetype=.*" " - remove-hooks window ""%val{hook_param_capture_1}-.+"" - " -} - ] diff --git a/rc/filetype/javascript.kak b/rc/filetype/javascript.kak index 7dc2034d..d45cf3b1 100644 --- a/rc/filetype/javascript.kak +++ b/rc/filetype/javascript.kak @@ -13,6 +13,34 @@ hook -once global BufSetOption filetype=(java|type)script %{ require-module javascript } +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=(javascript|typescript) %{ + require-module javascript + + hook window ModeChange insert:.* -group "%val{hook_param_capture_1}-trim-indent javascript-trim-indent" + hook window InsertChar .* -group "%val{hook_param_capture_1}-indent javascript-indent-on-char" + hook window InsertChar \n -group "%val{hook_param_capture_1}-indent javascript-indent-on-new-line" + + hook -once -always window WinSetOption filetype=.* " + remove-hooks window %val{hook_param_capture_1}-.+ + " +} + +hook -group javascript-highlight global WinSetOption filetype=javascript %{ + add-highlighter window/javascript ref javascript + + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/javascript } +} + +hook -group typescript-highlight global WinSetOption filetype=typescript %{ + add-highlighter window/typescript ref typescript + + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/typescript } +} + + provide-module javascript %🦀 # Commands @@ -93,23 +121,6 @@ define-command -hidden init-javascript-filetype -params 1 %~ # Keywords are collected at # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords add-highlighter "shared/%arg{1}/code/" regex \b(async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|export|extends|finally|for|function|if|import|in|instanceof|let|new|of|return|static|super|switch|throw|try|typeof|var|void|while|with|yield)\b 0:keyword - - # Initialization - # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - - hook -group "%arg{1}-highlight" global WinSetOption "filetype=%arg{1}" " - add-highlighter window/%arg{1} ref %arg{1} - - hook -once -always window WinSetOption filetype=.* %%{ remove-highlighter window/%arg{1} } - " - - hook global WinSetOption "filetype=%arg{1}" " - hook window ModeChange insert:.* -group %arg{1}-trim-indent javascript-trim-indent - hook window InsertChar .* -group %arg{1}-indent javascript-indent-on-char - hook window InsertChar \n -group %arg{1}-indent javascript-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %%{ remove-hooks window %arg{1}-.+ } - " ~ init-javascript-filetype javascript diff --git a/rc/filetype/json.kak b/rc/filetype/json.kak index d863d596..9af3d6b9 100644 --- a/rc/filetype/json.kak +++ b/rc/filetype/json.kak @@ -9,9 +9,27 @@ hook global BufCreate .*[.](json) %{ } hook -once global BufSetOption filetype=json %{ - require-module json } +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=json %{ + require-module json + + hook window ModeChange insert:.* -group json-trim-indent json-trim-indent + hook window InsertChar .* -group json-indent json-indent-on-char + hook window InsertChar \n -group json-indent json-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window json-.+ } +} + +hook -group json-highlight global WinSetOption filetype=json %{ + add-highlighter window/json ref json + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/json } +} + + provide-module json %( # Highlighters @@ -49,20 +67,4 @@ define-command -hidden json-indent-on-new-line %< > > -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group json-highlight global WinSetOption filetype=json %{ - add-highlighter window/json ref json - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/json } -} - -hook global WinSetOption filetype=json %{ - hook window ModeChange insert:.* -group json-trim-indent json-trim-indent - hook window InsertChar .* -group json-indent json-indent-on-char - hook window InsertChar \n -group json-indent json-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window json-.+ } -} - ) diff --git a/rc/filetype/kakrc.kak b/rc/filetype/kakrc.kak index 1b270b80..fcfd6e82 100644 --- a/rc/filetype/kakrc.kak +++ b/rc/filetype/kakrc.kak @@ -8,8 +8,27 @@ hook global BufCreate (.*/)?(kakrc|.*.kak) %{ set-option buffer filetype kak } -hook -once global BufSetOption filetype=kak %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=kak %~ require-module kak + + set-option window static_words %opt{kak_static_words} + + hook window InsertChar \n -group kak-indent kak-indent-on-new-line + hook window InsertChar [>)}\]] -group kak-indent kak-indent-on-closing-matching + hook window InsertChar (?![[{(<>)}\]])[^\s\w] -group kak-indent kak-indent-on-closing-char + # cleanup trailing whitespaces on current line insert end + hook window ModeChange insert:.* -group kak-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } + set-option buffer extra_word_chars '_' '-' + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window kak-.+ } +~ + +hook -group kak-highlight global WinSetOption filetype=kak %{ + add-highlighter window/kakrc ref kakrc + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/kakrc } } provide-module kak %🦀 @@ -52,10 +71,7 @@ evaluate-commands %sh{ join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf '%s\n' "hook global WinSetOption filetype=kak %{ - set-option window static_words $(join "${keywords} ${attributes} ${types} ${values}" ' ')' - set-option -- window extra_word_chars '_' '-' - }" + printf %s\\n "declare-option str-list kak_static_words $(join "${keywords} ${attributes} ${types} ${values}" ' ')'" # Highlight keywords (which are always surrounded by whitespace) printf '%s\n' "add-highlighter shared/kakrc/code/keywords regex (?:\s|\A)\K($(join "${keywords}" '|'))(?:(?=\s)|\z) 0:keyword @@ -98,23 +114,4 @@ define-command -hidden kak-indent-on-closing-char %{ try %{ execute-keys -draft -itersel ^\h*\Q %val{hook_param} \E$gi %val{hook_param} %\w*\Q %val{hook_param} \E$ s \A|.\z gi 1 } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group kak-highlight global WinSetOption filetype=kak %{ - add-highlighter window/kakrc ref kakrc - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/kakrc } -} - -hook global WinSetOption filetype=kak %~ - hook window InsertChar \n -group kak-indent kak-indent-on-new-line - hook window InsertChar [>)}\]] -group kak-indent kak-indent-on-closing-matching - hook window InsertChar (?![[{(<>)}\]])[^\s\w] -group kak-indent kak-indent-on-closing-char - # cleanup trailing whitespaces on current line insert end - hook window ModeChange insert:.* -group kak-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } - set-option buffer extra_word_chars '_' '-' - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window kak-.+ } -~ - 🦀 diff --git a/rc/filetype/latex.kak b/rc/filetype/latex.kak index 3b8511d1..ebdeb97c 100644 --- a/rc/filetype/latex.kak +++ b/rc/filetype/latex.kak @@ -8,10 +8,18 @@ hook global BufCreate .*\.tex %{ set-option buffer filetype latex } -hook -once global BufSetOption filetype=latex %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=latex %{ require-module latex } +hook -group latex-highlight global WinSetOption filetype=latex %{ + add-highlighter window/latex ref latex + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/latex } +} + provide-module latex %( # Highlighters @@ -32,12 +40,4 @@ add-highlighter shared/latex/content/ regex '\\(emph|textit)\{([^}]+)\}' 2:defau # Bold text add-highlighter shared/latex/content/ regex '\\textbf\{([^}]+)\}' 1:default+b -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group latex-highlight global WinSetOption filetype=latex %{ - add-highlighter window/latex ref latex - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/latex } -} - ) diff --git a/rc/filetype/lisp.kak b/rc/filetype/lisp.kak index 39f946e7..1efed1eb 100644 --- a/rc/filetype/lisp.kak +++ b/rc/filetype/lisp.kak @@ -8,8 +8,21 @@ hook global BufCreate .*[.](lisp) %{ set-option buffer filetype lisp } -hook -once global BufSetOption filetype=lisp %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=lisp %{ require-module lisp + + hook window ModeChange insert:.* -group lisp-trim-indent lisp-trim-indent + hook window InsertChar \n -group lisp-indent lisp-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window lisp-.+ } +} + +hook -group lisp-highlight global WinSetOption filetype=lisp %{ + add-highlighter window/lisp ref lisp + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/lisp } } provide-module lisp %{ @@ -64,19 +77,4 @@ define-command -hidden lisp-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group lisp-highlight global WinSetOption filetype=lisp %{ - add-highlighter window/lisp ref lisp - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/lisp } -} - -hook global WinSetOption filetype=lisp %{ - hook window ModeChange insert:.* -group lisp-trim-indent lisp-trim-indent - hook window InsertChar \n -group lisp-indent lisp-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window lisp-.+ } -} - } diff --git a/rc/filetype/lua.kak b/rc/filetype/lua.kak index c3411c91..ed97cbb8 100644 --- a/rc/filetype/lua.kak +++ b/rc/filetype/lua.kak @@ -8,10 +8,30 @@ hook global BufCreate .*[.](lua) %{ set-option buffer filetype lua } -hook -once global BufSetOption filetype=lua %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=lua %{ require-module lua + + hook window InsertChar .* -group lua-indent lua-indent-on-char + hook window InsertChar \n -group lua-indent lua-indent-on-new-line + hook window InsertChar \n -group lua-insert lua-insert-on-new-line + + alias window alt lua-alternative-file + + hook -once -always window WinSetOption filetype=.* %{ + remove-hooks window lua-.+ + unalias window alt lua-alternative-file + } } +hook -group lua-highlight global WinSetOption filetype=lua %{ + add-highlighter window/lua ref lua + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/lua } +} + + provide-module lua %[ # Highlighters @@ -87,25 +107,4 @@ define-command -hidden lua-insert-on-new-line %[ ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group lua-highlight global WinSetOption filetype=lua %{ - add-highlighter window/lua ref lua - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/lua } -} - -hook global WinSetOption filetype=lua %{ - hook window InsertChar .* -group lua-indent lua-indent-on-char - hook window InsertChar \n -group lua-indent lua-indent-on-new-line - hook window InsertChar \n -group lua-insert lua-insert-on-new-line - - alias window alt lua-alternative-file - - hook -once -always window WinSetOption filetype=.* %{ - remove-hooks window lua-.+ - unalias window alt lua-alternative-file - } -} - ] diff --git a/rc/filetype/makefile.kak b/rc/filetype/makefile.kak index c6f13dfd..7f7ebbe5 100644 --- a/rc/filetype/makefile.kak +++ b/rc/filetype/makefile.kak @@ -5,8 +5,21 @@ hook global BufCreate .*(/?[mM]akefile|\.mk) %{ set-option buffer filetype makefile } -hook -once global BufSetOption filetype=makefile %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=makefile %{ require-module makefile + + set-option window static_words %opt{makefile_static_words} + + hook window InsertChar \n -group makefile-indent makefile-indent-on-new-line + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window makefile-.+ } +} + +hook -group makefile-highlight global WinSetOption filetype=makefile %{ + add-highlighter window/makefile ref makefile + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/makefile } } provide-module makefile %{ @@ -28,9 +41,7 @@ evaluate-commands %sh{ keywords="ifeq|ifneq|ifdef|ifndef|else|endif|define|endef" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=makefile %{ - set-option window static_words ${keywords} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list makefile_static_words ${keywords}" | tr '|' ' ' # Highlight keywords printf %s "add-highlighter shared/makefile/content/ regex \b(${keywords})\b 0:keyword" @@ -52,17 +63,4 @@ define-command -hidden makefile-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group makefile-highlight global WinSetOption filetype=makefile %{ - add-highlighter window/makefile ref makefile - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/makefile } -} - -hook global WinSetOption filetype=makefile %{ - hook window InsertChar \n -group makefile-indent makefile-indent-on-new-line - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window makefile-.+ } -} - } diff --git a/rc/filetype/nim.kak b/rc/filetype/nim.kak index 0bdd8ef6..1b9283cb 100644 --- a/rc/filetype/nim.kak +++ b/rc/filetype/nim.kak @@ -8,8 +8,24 @@ hook global BufCreate .*\.nim(s|ble)? %{ set-option buffer filetype nim } -hook -once global BufSetOption filetype=nim %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=nim %{ require-module nim + + set-option window static_words %opt{nim_static_words} + + hook window InsertChar \n -group nim-indent nim-indent-on-new-line + # cleanup trailing whitespaces on current line insert end + hook window ModeChange insert:.* -group nim-trim-indent %{ try %{ exec -draft \; s ^\h+$ d } } + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window nim-.+ } +} + +hook -group nim-highlight global WinSetOption filetype=nim %{ + add-highlighter window/nim ref nim + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/nim } } provide-module nim %{ @@ -57,9 +73,7 @@ evaluate-commands %sh{ static_words="$(join "${keywords} ${types} ${operator} ${values}" ' ')" # Add the language's grammar to the static completion list - printf %s "hook global WinSetOption filetype=nim %{ - set-option window static_words ${static_words} - }" + printf %s\\n "declare-option str-list nim_static_words ${static_words}" keywords="$(join "${keywords}" '|')" operators="$(join "${operators}" '|')" @@ -101,20 +115,4 @@ def -hidden nim-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group nim-highlight global WinSetOption filetype=nim %{ - add-highlighter window/nim ref nim - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/nim } -} - -hook global WinSetOption filetype=nim %{ - hook window InsertChar \n -group nim-indent nim-indent-on-new-line - # cleanup trailing whitespaces on current line insert end - hook window ModeChange insert:.* -group nim-trim-indent %{ try %{ exec -draft \; s ^\h+$ d } } - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window nim-.+ } -} - } diff --git a/rc/filetype/ocaml.kak b/rc/filetype/ocaml.kak index 8b8c771c..33a4dbd4 100644 --- a/rc/filetype/ocaml.kak +++ b/rc/filetype/ocaml.kak @@ -8,8 +8,17 @@ hook global BufCreate .*\.mli? %{ set-option buffer filetype ocaml } -hook -once global BufSetOption filetype=ocaml %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=ocaml %{ require-module ocaml + set-option window static_words %opt{ocaml_static_words} +} + +hook -group ocaml-highlight global WinSetOption filetype=ocaml %{ + add-highlighter window/ocaml ref ocaml + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/ocaml } } provide-module ocaml %{ @@ -22,24 +31,19 @@ add-highlighter shared/ocaml/code default-region group add-highlighter shared/ocaml/string region '"' (?s^\h+$d } } + hook window InsertChar \n -group perl-indent perl-indent-on-new-line + hook window InsertChar \{ -group perl-indent perl-indent-on-opening-curly-brace + hook window InsertChar \} -group perl-indent perl-indent-on-closing-curly-brace + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window perl-.+ } +} + +hook -group perl-highlight global WinSetOption filetype=perl %{ + add-highlighter window/perl ref perl + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/perl } } provide-module perl %🦀 @@ -26,31 +44,31 @@ add-highlighter shared/perl/comment region (?^\h+\}$hms\A|.\z1 ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group perl-highlight global WinSetOption filetype=perl %{ - add-highlighter window/perl ref perl - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/perl } -} - -hook global WinSetOption filetype=perl %{ - # cleanup trailing whitespaces when exiting insert mode - hook window ModeChange insert:.* -group perl-trim-indent %{ try %{ execute-keys -draft s^\h+$d } } - hook window InsertChar \n -group perl-indent perl-indent-on-new-line - hook window InsertChar \{ -group perl-indent perl-indent-on-opening-curly-brace - hook window InsertChar \} -group perl-indent perl-indent-on-closing-curly-brace - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window perl-.+ } -} - 🦀 diff --git a/rc/filetype/php.kak b/rc/filetype/php.kak index e2759129..8ee1d8ce 100644 --- a/rc/filetype/php.kak +++ b/rc/filetype/php.kak @@ -5,8 +5,22 @@ hook global BufCreate .*[.](php) %{ set-option buffer filetype php } -hook -once global BufSetOption filetype=php %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=php %{ require-module php + + hook window ModeChange insert:.* -group php-trim-indent php-trim-indent + hook window InsertChar .* -group php-indent php-indent-on-char + hook window InsertChar \n -group php-indent php-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window php-.+ } +} + +hook -group php-highlight global WinSetOption filetype=php %{ + add-highlighter window/php-file ref php-file + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/php-file } } provide-module php %( @@ -80,20 +94,4 @@ define-command -hidden php-indent-on-new-line %< > > -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group php-highlight global WinSetOption filetype=php %{ - add-highlighter window/php-file ref php-file - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/php-file } -} - -hook global WinSetOption filetype=php %{ - hook window ModeChange insert:.* -group php-trim-indent php-trim-indent - hook window InsertChar .* -group php-indent php-indent-on-char - hook window InsertChar \n -group php-indent php-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window php-.+ } -} - ) diff --git a/rc/filetype/pony.kak b/rc/filetype/pony.kak index 8aaa0233..762f7c1a 100644 --- a/rc/filetype/pony.kak +++ b/rc/filetype/pony.kak @@ -8,8 +8,24 @@ hook global BufCreate .*[.](pony) %{ set-option buffer filetype pony } -hook -once global BufSetOption filetype=pony %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=pony %{ require-module pony + + set-option window static_words %opt{pony_static_words} + + hook window InsertChar \n -group pony-indent pony-indent-on-new-line + # cleanup trailing whitespaces on current line insert end + hook window ModeChange insert:.* -group pony-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window pony-.+ } +} + +hook -group pony-highlight global WinSetOption filetype=pony %{ + add-highlighter window/pony ref pony + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter pony } } provide-module pony %{ @@ -39,9 +55,7 @@ evaluate-commands %sh{ # Add the language's grammar to the static completion list static_words="${values} ${meta} ${keywords} ${types_decl} ${capabilities}" static_words="${static_words} ${struct}" - printf %s\\n "hook global WinSetOption filetype=pony %{ - set-option window static_words ${static_words} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list pony_static_words ${static_words}" | tr '|' ' ' # Highlight keywords printf %s " @@ -81,20 +95,4 @@ define-command -hidden pony-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group pony-highlight global WinSetOption filetype=pony %{ - add-highlighter window/pony ref pony - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter pony } -} - -hook global WinSetOption filetype=pony %{ - hook window InsertChar \n -group pony-indent pony-indent-on-new-line - # cleanup trailing whitespaces on current line insert end - hook window ModeChange insert:.* -group pony-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window pony-.+ } -} - } diff --git a/rc/filetype/protobuf.kak b/rc/filetype/protobuf.kak index 4924cb05..4e568704 100644 --- a/rc/filetype/protobuf.kak +++ b/rc/filetype/protobuf.kak @@ -7,8 +7,24 @@ hook global BufCreate .*\.proto$ %{ set-option buffer filetype protobuf } -hook -once global BufSetOption filetype=protobuf %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=protobuf %[ require-module protobuf + + set-option window static_words %opt{protobuf_static_words} + + hook -group protobuf-indent window InsertChar \n protobuf-indent-on-newline + hook -group protobuf-indent window InsertChar \{ protobuf-indent-on-opening-curly-brace + hook -group protobuf-indent window InsertChar \} protobuf-indent-on-closing-curly-brace + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window protobuf-.+ } +] + +hook -group protobuf-highlight global WinSetOption filetype=protobuf %{ + add-highlighter window/protobuf ref protobuf + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/protobuf } } provide-module protobuf %[ @@ -26,31 +42,30 @@ add-highlighter shared/protobuf/code/ regex %{(0x)?[0-9]+\b} 0:value evaluate-commands %sh{ # Grammer - keywords="default|deprecated|enum|extend|import|message|oneof|option" - keywords="${keywords}|package|service|syntax" - attributes="optional|repeated|required" - types="double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64" - types="${types}|sfixed32|sfixed64|bool|string|bytes|rpc" - values="false|true" + keywords='default deprecated enum extend import message oneof option + package service syntax' + attributes='optional repeated required' + types='double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 + sfixed32 sfixed64 bool string bytes rpc' + values='false true' + + join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammer to the static completion list - printf '%s\n' "hook global WinSetOption filetype=protobuf %{ - set-option window static_words ${keywords} ${attributes} ${types} ${values} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list protobuf_static_words $(join "${keywords} ${attributes} ${types} ${values}" ' ')" # Highlight keywords printf %s " - add-highlighter shared/protobuf/code/keywords regex \b(${keywords})\b 0:keyword - add-highlighter shared/protobuf/code/attributes regex \b(${attributes})\b 0:attribute - add-highlighter shared/protobuf/code/types regex \b(${types})\b 0:type - add-highlighter shared/protobuf/code/values regex \b(${values})\b 0:value + add-highlighter shared/protobuf/code/keywords regex \b($(join "${keywords}" '|'))\b 0:keyword + add-highlighter shared/protobuf/code/attributes regex \b($(join "${attributes}" '|'))\b 0:attribute + add-highlighter shared/protobuf/code/types regex \b($(join "${types}" '|'))\b 0:type + add-highlighter shared/protobuf/code/values regex \b($(join "${values}" '|'))\b 0:value " } # Commands # ‾‾‾‾‾‾‾‾ - define-command -hidden protobuf-indent-on-newline %~ evaluate-commands -draft -itersel %[ # preserve previous line indent @@ -74,20 +89,4 @@ define-command -hidden protobuf-indent-on-closing-curly-brace %[ try %[ execute-keys -itersel -draft ^\h+\}$hms\A|.\z1 ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group protobuf-highlight global WinSetOption filetype=protobuf %{ - add-highlighter window/protobuf ref protobuf - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/protobuf } -} - -hook global WinSetOption filetype=protobuf %[ - hook -group protobuf-indent window InsertChar \n protobuf-indent-on-newline - hook -group protobuf-indent window InsertChar \{ protobuf-indent-on-opening-curly-brace - hook -group protobuf-indent window InsertChar \} protobuf-indent-on-closing-curly-brace - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window protobuf-.+ } -] - ] diff --git a/rc/filetype/pug.kak b/rc/filetype/pug.kak index 121b0b37..c4a30511 100644 --- a/rc/filetype/pug.kak +++ b/rc/filetype/pug.kak @@ -12,10 +12,24 @@ hook global BufCreate .*[.](pug|jade) %{ set-option buffer filetype pug } -hook -once global BufSetOption filetype=pug %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=pug %{ require-module pug + + hook window ModeChange insert:.* -group pug-trim-indent pug-trim-indent + hook window InsertChar \n -group pug-indent pug-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window pug-.+ } } +hook -group pug-highlight global WinSetOption filetype=pug %{ + add-highlighter window/pug ref pug + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/pug } +} + + provide-module pug %{ # Highlighters @@ -64,19 +78,4 @@ define-command -hidden pug-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group pug-highlight global WinSetOption filetype=pug %{ - add-highlighter window/pug ref pug - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/pug } -} - -hook global WinSetOption filetype=pug %{ - hook window ModeChange insert:.* -group pug-trim-indent pug-trim-indent - hook window InsertChar \n -group pug-indent pug-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window pug-.+ } -} - } diff --git a/rc/filetype/python.kak b/rc/filetype/python.kak index 82fe9971..7c4472a3 100644 --- a/rc/filetype/python.kak +++ b/rc/filetype/python.kak @@ -8,8 +8,23 @@ hook global BufCreate .*[.](py) %{ set-option buffer filetype python } -hook -once global BufSetOption filetype=python %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=python %{ require-module python + + set-option window static_words %opt{python_static_words} + + hook window InsertChar \n -group python-indent python-indent-on-new-line + # cleanup trailing whitespaces on current line insert end + hook window ModeChange insert:.* -group python-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window python-.+ } +} + +hook -group python-highlight global WinSetOption filetype=python %{ + add-highlighter window/python ref python + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/python } } provide-module python %{ @@ -42,79 +57,79 @@ add-highlighter shared/python/docstring/ region '\.\.\. \K' '\z' ref python evaluate-commands %sh{ # Grammar - values="True|False|None|self|inf" - meta="import|from" + values="True False None self inf" + meta="import from" # attributes and methods list based on https://docs.python.org/3/reference/datamodel.html - attributes="__annotations__|__closure__|__code__|__defaults__|__dict__|__doc__" - attributes="${attributes}|__globals__|__kwdefaults__|__module__|__name__|__qualname__" - methods="__abs__|__add__|__aenter__|__aexit__|__aiter__|__and__|__anext__" - methods="${methods}|__await__|__bool__|__bytes__|__call__|__complex__|__contains__" - methods="${methods}|__del__|__delattr__|__delete__|__delitem__|__dir__|__divmod__" - methods="${methods}|__enter__|__eq__|__exit__|__float__|__floordiv__|__format__" - methods="${methods}|__ge__|__get__|__getattr__|__getattribute__|__getitem__" - methods="${methods}|__gt__|__hash__|__iadd__|__iand__|__ifloordiv__|__ilshift__" - methods="${methods}|__imatmul__|__imod__|__imul__|__index__|__init__" - methods="${methods}|__init_subclass__|__int__|__invert__|__ior__|__ipow__" - methods="${methods}|__irshift__|__isub__|__iter__|__itruediv__|__ixor__|__le__" - methods="${methods}|__len__|__length_hint__|__lshift__|__lt__|__matmul__" - methods="${methods}|__missing__|__mod__|__mul__|__ne__|__neg__|__new__|__or__" - methods="${methods}|__pos__|__pow__|__radd__|__rand__|__rdivmod__|__repr__" - methods="${methods}|__reversed__|__rfloordiv__|__rlshift__|__rmatmul__|__rmod__" - methods="${methods}|__rmul__|__ror__|__round__|__rpow__|__rrshift__|__rshift__" - methods="${methods}|__rsub__|__rtruediv__|__rxor__|__set__|__setattr__" - methods="${methods}|__setitem__|__set_name__|__slots__|__str__|__sub__" - methods="${methods}|__truediv__|__xor__" + attributes="__annotations__ __closure__ __code__ __defaults__ __dict__ __doc__ + __globals__ __kwdefaults__ __module__ __name__ __qualname__" + methods="__abs__ __add__ __aenter__ __aexit__ __aiter__ __and__ __anext__ + __await__ __bool__ __bytes__ __call__ __complex__ __contains__ + __del__ __delattr__ __delete__ __delitem__ __dir__ __divmod__ + __enter__ __eq__ __exit__ __float__ __floordiv__ __format__ + __ge__ __get__ __getattr__ __getattribute__ __getitem__ + __gt__ __hash__ __iadd__ __iand__ __ifloordiv__ __ilshift__ + __imatmul__ __imod__ __imul__ __index__ __init__ + __init_subclass__ __int__ __invert__ __ior__ __ipow__ + __irshift__ __isub__ __iter__ __itruediv__ __ixor__ __le__ + __len__ __length_hint__ __lshift__ __lt__ __matmul__ + __missing__ __mod__ __mul__ __ne__ __neg__ __new__ __or__ + __pos__ __pow__ __radd__ __rand__ __rdivmod__ __repr__ + __reversed__ __rfloordiv__ __rlshift__ __rmatmul__ __rmod__ + __rmul__ __ror__ __round__ __rpow__ __rrshift__ __rshift__ + __rsub__ __rtruediv__ __rxor__ __set__ __setattr__ + __setitem__ __set_name__ __slots__ __str__ __sub__ + __truediv__ __xor__" # built-in exceptions https://docs.python.org/3/library/exceptions.html - exceptions="ArithmeticError|AssertionError|AttributeError|BaseException|BlockingIOError" - exceptions="${exceptions}|BrokenPipeError|BufferError|BytesWarning|ChildProcessError" - exceptions="${exceptions}|ConnectionAbortedError|ConnectionError|ConnectionRefusedError" - exceptions="${exceptions}|ConnectionResetError|DeprecationWarning|EOFError|Exception" - exceptions="${exceptions}|FileExistsError|FileNotFoundError|FloatingPointError|FutureWarning" - exceptions="${exceptions}|GeneratorExit|ImportError|ImportWarning|IndentationError" - exceptions="${exceptions}|IndexError|InterruptedError|IsADirectoryError|KeyboardInterrupt" - exceptions="${exceptions}|KeyError|LookupError|MemoryError|ModuleNotFoundError|NameError" - exceptions="${exceptions}|NotADirectoryError|NotImplementedError|OSError|OverflowError" - exceptions="${exceptions}|PendingDeprecationWarning|PermissionError|ProcessLookupError" - exceptions="${exceptions}|RecursionError|ReferenceError|ResourceWarning|RuntimeError" - exceptions="${exceptions}|RuntimeWarning|StopAsyncIteration|StopIteration|SyntaxError" - exceptions="${exceptions}|SyntaxWarning|SystemError|SystemExit|TabError|TimeoutError|TypeError" - exceptions="${exceptions}|UnboundLocalError|UnicodeDecodeError|UnicodeEncodeError|UnicodeError" - exceptions="${exceptions}|UnicodeTranslateError|UnicodeWarning|UserWarning|ValueError|Warning" - exceptions="${exceptions}|ZeroDivisionError" + exceptions="ArithmeticError AssertionError AttributeError BaseException BlockingIOError + BrokenPipeError BufferError BytesWarning ChildProcessError + ConnectionAbortedError ConnectionError ConnectionRefusedError + ConnectionResetError DeprecationWarning EOFError Exception + FileExistsError FileNotFoundError FloatingPointError FutureWarning + GeneratorExit ImportError ImportWarning IndentationError + IndexError InterruptedError IsADirectoryError KeyboardInterrupt + KeyError LookupError MemoryError ModuleNotFoundError NameError + NotADirectoryError NotImplementedError OSError OverflowError + PendingDeprecationWarning PermissionError ProcessLookupError + RecursionError ReferenceError ResourceWarning RuntimeError + RuntimeWarning StopAsyncIteration StopIteration SyntaxError + SyntaxWarning SystemError SystemExit TabError TimeoutError TypeError + UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError + UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning + ZeroDivisionError" # Keyword list is collected using `keyword.kwlist` from `keyword` - keywords="and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec" - keywords="${keywords}|finally|for|global|if|in|is|lambda|nonlocal|not|or|pass|print" - keywords="${keywords}|raise|return|try|while|with|yield" + keywords="and as assert async await break class continue def del elif else except exec + finally for global if in is lambda nonlocal not or pass print + raise return try while with yield" - types="bool|buffer|bytearray|bytes|complex|dict|file|float|frozenset|int" - types="${types}|list|long|memoryview|object|set|str|tuple|unicode|xrange" + types="bool buffer bytearray bytes complex dict file float frozenset int + list long memoryview object set str tuple unicode xrange" - functions="abs|all|any|ascii|bin|breakpoint|callable|chr|classmethod|compile|complex" - functions="${functions}|delattr|dict|dir|divmod|enumerate|eval|exec|filter" - functions="${functions}|format|frozenset|getattr|globals|hasattr|hash|help" - functions="${functions}|hex|id|__import__|input|isinstance|issubclass|iter" - functions="${functions}|len|locals|map|max|memoryview|min|next|oct|open|ord" - functions="${functions}|pow|print|property|range|repr|reversed|round" - functions="${functions}|setattr|slice|sorted|staticmethod|sum|super|type|vars|zip" + functions="abs all any ascii bin breakpoint callable chr classmethod compile complex + delattr dict dir divmod enumerate eval exec filter + format frozenset getattr globals hasattr hash help + hex id __import__ input isinstance issubclass iter + len locals map max memoryview min next oct open ord + pow print property range repr reversed round + setattr slice sorted staticmethod sum super type vars zip" + + join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=python %{ - set-option window static_words ${values} ${meta} ${attributes} ${methods} ${exceptions} ${keywords} ${types} ${functions} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list python_static_words $(join "${values} ${meta} ${attributes} ${methods} ${exceptions} ${keywords} ${types} ${functions}" ' ')" # Highlight keywords printf %s " - add-highlighter shared/python/code/ regex '\b(${values})\b' 0:value - add-highlighter shared/python/code/ regex '\b(${meta})\b' 0:meta - add-highlighter shared/python/code/ regex '\b(${attribute})\b' 0:attribute - add-highlighter shared/python/code/ regex '\bdef\s+(${methods})\b' 1:function - add-highlighter shared/python/code/ regex '\b(${exceptions})\b' 0:function - add-highlighter shared/python/code/ regex '\b(${keywords})\b' 0:keyword - add-highlighter shared/python/code/ regex '\b(${functions})\b\(' 1:builtin - add-highlighter shared/python/code/ regex '\b(${types})\b' 0:type + add-highlighter shared/python/code/ regex '\b($(join "${values}" '|'))\b' 0:value + add-highlighter shared/python/code/ regex '\b($(join "${meta}" '|'))\b' 0:meta + add-highlighter shared/python/code/ regex '\b($(join "${attribute}" '|'))\b' 0:attribute + add-highlighter shared/python/code/ regex '\bdef\s+($(join "${methods}" '|'))\b' 1:function + add-highlighter shared/python/code/ regex '\b($(join "${exceptions}" '|'))\b' 0:function + add-highlighter shared/python/code/ regex '\b($(join "${keywords}" '|'))\b' 0:keyword + add-highlighter shared/python/code/ regex '\b($(join "${functions}" '|'))\b\(' 1:builtin + add-highlighter shared/python/code/ regex '\b($(join "${types}" '|'))\b' 0:type add-highlighter shared/python/code/ regex '@[\w_]+\b' 0:attribute " } @@ -138,19 +153,4 @@ define-command -hidden python-indent-on-new-line %{ } } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group python-highlight global WinSetOption filetype=python %{ - add-highlighter window/python ref python - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/python } -} - -hook global WinSetOption filetype=python %{ - hook window InsertChar \n -group python-indent python-indent-on-new-line - # cleanup trailing whitespaces on current line insert end - hook window ModeChange insert:.* -group python-trim-indent %{ try %{ execute-keys -draft \; s ^\h+$ d } } - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window python-.+ } -} - } diff --git a/rc/filetype/ragel.kak b/rc/filetype/ragel.kak index 0aa6ad03..696bc85d 100644 --- a/rc/filetype/ragel.kak +++ b/rc/filetype/ragel.kak @@ -10,8 +10,22 @@ hook global BufCreate .*[.](ragel|rl) %{ set-option buffer filetype ragel } -hook -once global BufSetOption filetype=ragel %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=ragel %{ require-module ragel + + hook window ModeChange insert:.* -group ragel-trim-indent ragel-trim-indent + hook window InsertChar .* -group ragel-indent ragel-indent-on-char + hook window InsertChar \n -group ragel-indent ragel-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window ragel-.+ } +} + +hook -group ragel-highlight global WinSetOption filetype=ragel %{ + add-highlighter window/ragel ref ragel + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/ragel } } provide-module ragel %🦀 @@ -59,20 +73,4 @@ define-command -hidden ragel-indent-on-new-line %< > > -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group ragel-highlight global WinSetOption filetype=ragel %{ - add-highlighter window/ragel ref ragel - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/ragel } -} - -hook global WinSetOption filetype=ragel %{ - hook window ModeChange insert:.* -group ragel-trim-indent ragel-trim-indent - hook window InsertChar .* -group ragel-indent ragel-indent-on-char - hook window InsertChar \n -group ragel-indent ragel-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window ragel-.+ } -} - 🦀 diff --git a/rc/filetype/ruby.kak b/rc/filetype/ruby.kak index d9bdcfe6..7996b089 100644 --- a/rc/filetype/ruby.kak +++ b/rc/filetype/ruby.kak @@ -8,8 +8,29 @@ hook global BufCreate .*(([.](rb))|(irbrc)|(pryrc)|(Brewfile)|(Capfile|[.]cap)|( set-option buffer filetype ruby } -hook -once global BufSetOption filetype=ruby %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=ruby %{ require-module ruby + + set-option window static_words %opt{ruby_static_words} + + hook window InsertChar .* -group ruby-indent ruby-indent-on-char + hook window InsertChar \n -group ruby-insert ruby-insert-on-new-line + hook window InsertChar \n -group ruby-indent ruby-indent-on-new-line + + alias window alt ruby-alternative-file + + hook -once -always window WinSetOption filetype=.* %{ + remove-hooks window ruby-.+ + unalias window alt ruby-alternative-file + } +} + +hook -group ruby-highlight global WinSetOption filetype=ruby %{ + add-highlighter window/ruby ref ruby + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/ruby } } provide-module ruby %[ @@ -61,9 +82,7 @@ evaluate-commands %sh{ meta="require|include|extend" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=ruby %{ - set-option window static_words ${keywords} ${attributes} ${values} ${meta} - }" | tr '|' ' ' + printf %s\\n "declare-option str-list ruby_static_words ${keywords} ${attributes} ${values} ${meta}" | tr '|' ' ' # Highlight keywords printf %s " @@ -152,25 +171,4 @@ define-command -hidden ruby-insert-on-new-line %[ ] ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group ruby-highlight global WinSetOption filetype=ruby %{ - add-highlighter window/ruby ref ruby - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/ruby } -} - -hook global WinSetOption filetype=ruby %{ - hook window InsertChar .* -group ruby-indent ruby-indent-on-char - hook window InsertChar \n -group ruby-insert ruby-insert-on-new-line - hook window InsertChar \n -group ruby-indent ruby-indent-on-new-line - - alias window alt ruby-alternative-file - - hook -once -always window WinSetOption filetype=.* %{ - remove-hooks window ruby-.+ - unalias window alt ruby-alternative-file - } -} - ] diff --git a/rc/filetype/rust.kak b/rc/filetype/rust.kak index 7018ff31..0a3a6dbd 100644 --- a/rc/filetype/rust.kak +++ b/rc/filetype/rust.kak @@ -8,10 +8,32 @@ hook global BufCreate .*[.](rust|rs) %{ set-option buffer filetype rust } -hook -once global BufSetOption filetype=rust %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=rust %[ require-module rust + + hook window ModeChange insert:.* -group rust-trim-indent rust-trim-indent + hook window InsertChar \n -group rust-indent rust-indent-on-new-line + hook window InsertChar \{ -group rust-indent rust-indent-on-opening-curly-brace + hook window InsertChar [)}] -group rust-indent rust-indent-on-closing + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window rust-.+ } +] + +hook -group rust-highlight global WinSetOption filetype=rust %{ + add-highlighter window/rust ref rust + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/rust } } +# Configuration +# ‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=rust %[ + set window formatcmd 'rustfmt' +] + + provide-module rust %🦀 # Highlighters @@ -77,27 +99,4 @@ define-command -hidden rust-indent-on-closing %[ _ ] -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group rust-highlight global WinSetOption filetype=rust %{ - add-highlighter window/rust ref rust - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/rust } -} - -hook global WinSetOption filetype=rust %[ - hook window ModeChange insert:.* -group rust-trim-indent rust-trim-indent - hook window InsertChar \n -group rust-indent rust-indent-on-new-line - hook window InsertChar \{ -group rust-indent rust-indent-on-opening-curly-brace - hook window InsertChar [)}] -group rust-indent rust-indent-on-closing - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window rust-.+ } -] - -# Configuration -# ‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook global WinSetOption filetype=rust %[ - set window formatcmd 'rustfmt' -] - 🦀 diff --git a/rc/filetype/scheme.kak b/rc/filetype/scheme.kak index 20d2f35f..b130127b 100644 --- a/rc/filetype/scheme.kak +++ b/rc/filetype/scheme.kak @@ -8,8 +8,24 @@ hook global BufCreate (.*/)?(.*\.(scm|ss|sld)) %{ set-option buffer filetype scheme } -hook -once global BufSetOption filetype=scheme %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=scheme %{ require-module scheme + + set-option window static_words %opt{scheme_static_words} + + set-option buffer extra_word_chars '_' '-' '!' '%' '?' '<' '>' '=' + hook window InsertEnd .* -group scheme-trim-indent lisp-trim-indent + hook window InsertChar \n -group scheme-indent lisp-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window scheme-.+ } +} + +hook -group scheme-highlight global WinSetOption filetype=scheme %{ + add-highlighter window/scheme ref scheme + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/scheme } } provide-module scheme %{ @@ -105,9 +121,9 @@ evaluate-commands %sh{ exec awk -f - <<'EOF' } BEGIN { - printf("hook global WinSetOption filetype=scheme %%{ set-option window static_words "); + printf("declare-option str-list scheme_static_words "); print_words(keywords); print_words(meta); print_words(operators); print_words(builtins); - printf(" }\n") + printf("\n"); add_word_highlighter(keywords, "keyword"); add_word_highlighter(meta, "meta"); @@ -121,21 +137,4 @@ evaluate-commands %sh{ exec awk -f - <<'EOF' EOF } -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group scheme-highlight global WinSetOption filetype=scheme %{ - add-highlighter window/scheme ref scheme - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/scheme } -} - - -hook global WinSetOption filetype=scheme %{ - set-option buffer extra_word_chars '_' '-' '!' '%' '?' '<' '>' '=' - hook window InsertEnd .* -group scheme-trim-indent lisp-trim-indent - hook window InsertChar \n -group scheme-indent lisp-indent-on-new-line - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window scheme-.+ } -} - } diff --git a/rc/filetype/scss.kak b/rc/filetype/scss.kak index de5e4acc..7cb15e52 100644 --- a/rc/filetype/scss.kak +++ b/rc/filetype/scss.kak @@ -8,10 +8,26 @@ hook global BufCreate .*[.](scss) %{ set-option buffer filetype scss } -hook -once global BufSetOption filetype=scss %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=scss %[ require-module scss + + hook window ModeChange insert:.* -group scss-trim-indent scss-trim-indent + hook window InsertChar \n -group scss-indent scss-indent-on-new-line + hook window InsertChar \} -group scss-indent scss-indent-on-closing-curly-brace + set-option buffer extra_word_chars '_' '-' + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window scss-.+ } +] + +hook -group scss-highlight global WinSetOption filetype=scss %{ + add-highlighter window/scss ref scss + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/scss } } + provide-module scss %[ require-module css @@ -33,21 +49,4 @@ define-command -hidden scss-trim-indent css-trim-indent define-command -hidden scss-indent-on-new-line css-indent-on-new-line define-command -hidden scss-indent-on-closing-curly-brace css-indent-on-closing-curly-brace -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group scss-highlight global WinSetOption filetype=scss %{ - add-highlighter window/scss ref scss - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/scss } -} - -hook global WinSetOption filetype=scss %[ - hook window ModeChange insert:.* -group scss-trim-indent scss-trim-indent - hook window InsertChar \n -group scss-indent scss-indent-on-new-line - hook window InsertChar \} -group scss-indent scss-indent-on-closing-curly-brace - set-option buffer extra_word_chars '_' '-' - - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window scss-.+ } -] - ] diff --git a/rc/filetype/sh.kak b/rc/filetype/sh.kak index b7468520..ae09183f 100644 --- a/rc/filetype/sh.kak +++ b/rc/filetype/sh.kak @@ -2,8 +2,14 @@ hook global BufCreate .*\.(z|ba|c|k|mk)?sh(rc|_profile)? %{ set-option buffer filetype sh } -hook -once global BufSetOption filetype=sh %{ +hook global WinSetOption filetype=sh %{ require-module sh + set-option window static_words %opt{sh_static_words} +} + +hook -group sh-highlight global WinSetOption filetype=sh %{ + add-highlighter window/sh ref sh + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/sh } } provide-module sh %[ @@ -29,9 +35,7 @@ evaluate-commands %sh{ join() { sep=$2; eval set -- $1; IFS="$sep"; echo "$*"; } # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=sh %{ - set-option window static_words $(join "${keywords}" ' ') - }" + printf %s\\n "declare-option str-list sh_static_words $(join "${keywords}" ' ')" # Highlight keywords printf %s "add-highlighter shared/sh/code/ regex \b($(join "${keywords}" '|'))\b 0:keyword" @@ -44,9 +48,4 @@ add-highlighter shared/sh/code/function regex ^\h*(\w+)\h*\(\) 1:function add-highlighter shared/sh/code/unscoped_expansion regex \$(\w+|#|@|\?|\$|!|-|\*) 0:value add-highlighter shared/sh/double_string/expansion regex \$(\w+|\{.+?\}) 0:value -hook -group sh-highlight global WinSetOption filetype=sh %{ - add-highlighter window/sh ref sh - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/sh } -} - ] diff --git a/rc/filetype/sql.kak b/rc/filetype/sql.kak index 44ea7729..9ce82e67 100644 --- a/rc/filetype/sql.kak +++ b/rc/filetype/sql.kak @@ -8,10 +8,20 @@ hook global BufCreate .*/?(?i)sql %{ set-option buffer filetype sql } -hook -once global BufSetOption filetype=sql %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=sql %{ require-module sql + set-option window static_words %opt{sql_static_words} } +hook -group sql-highlight global WinSetOption filetype=sql %{ + add-highlighter window/sql ref sql + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/sql } +} + + provide-module sql %{ # Highlighters @@ -86,9 +96,7 @@ evaluate-commands %sh{ data_types="${data_types}|Time|Ole Object|Hyperlink|Lookup Wizard" # Add the language's grammar to the static completion list - printf %s\\n "hook global WinSetOption filetype=sql %{ - set-option window static_words ${keywords} ${operators} ${functions} ${data_types} ${data_types_fn} NULL - }" | tr '|' ' ' + printf %s\\n "declare-option str-list sql_static_words ${keywords} ${operators} ${functions} ${data_types} ${data_types_fn} NULL" | tr '|' ' ' # Highlight keywords printf %s " @@ -104,12 +112,4 @@ add-highlighter shared/sql/code/ regex '\+|-|\*|/|%|&|\||^|=|>|<|>=|<=|<>|\+=|-= add-highlighter shared/sql/code/ regex \bNULL\b 0:value add-highlighter shared/sql/code/ regex \b\d+(?:\.\d+)?\b 0:value -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group sql-highlight global WinSetOption filetype=sql %{ - add-highlighter window/sql ref sql - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/sql } -} - } diff --git a/rc/filetype/swift.kak b/rc/filetype/swift.kak index 4cf71613..e1f6d9af 100644 --- a/rc/filetype/swift.kak +++ b/rc/filetype/swift.kak @@ -2,10 +2,16 @@ hook global BufCreate .*\.(swift) %{ set-option buffer filetype swift } -hook -once global BufSetOption filetype=swift %{ +hook global WinSetOption filetype=swift %{ require-module swift } +hook -group swift-highlight global WinSetOption filetype=swift %{ + add-highlighter window/swift ref swift + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/swift } +} + + provide-module swift %{ add-highlighter shared/swift regions @@ -28,9 +34,4 @@ add-highlighter shared/swift/code/ regex "\b(Bool|String|UInt|UInt16|UInt32|UInt add-highlighter shared/swift/code/ regex "\b(IBAction|IBOutlet)\b" 0:attribute add-highlighter shared/swift/code/ regex "@\w+\b" 0:attribute -hook -group swift-highlight global WinSetOption filetype=swift %{ - add-highlighter window/swift ref swift - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/swift } -} - } diff --git a/rc/filetype/troff.kak b/rc/filetype/troff.kak index 73170675..44645010 100644 --- a/rc/filetype/troff.kak +++ b/rc/filetype/troff.kak @@ -5,10 +5,18 @@ hook global BufCreate .*\.\d+ %{ set-option buffer filetype troff } -hook -once global BufSetOption filetype=troff %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=troff %{ require-module troff } +hook -group troff-highlight global WinSetOption filetype=troff %{ + add-highlighter window/troff ref troff + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/troff } +} + provide-module troff %{ # Highlighters @@ -27,12 +35,4 @@ add-highlighter shared/troff/ regex '^\.BR\s+(\S+)' 1:+b add-highlighter shared/troff/ regex '^\.I\s+([^\n]+)' 1:+i add-highlighter shared/troff/ regex '^\.B\s+([^\n]+)' 1:+b -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group troff-highlight global WinSetOption filetype=troff %{ - add-highlighter window/troff ref troff - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/troff } -} - } diff --git a/rc/filetype/tupfile.kak b/rc/filetype/tupfile.kak index a21b6408..33e570d6 100644 --- a/rc/filetype/tupfile.kak +++ b/rc/filetype/tupfile.kak @@ -8,10 +8,17 @@ hook global BufCreate .*/?Tup(file|rules)(\.\w+)?$ %{ set-option buffer filetype tupfile } -hook -once global BufSetOption filetype=tupfile %{ +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook -group tupfile-highlight global WinSetOption filetype=tupfile %{ require-module tupfile + + add-highlighter window/tupfile ref tupfile + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/tupfile } } + provide-module tupfile %{ # Highlighters @@ -30,12 +37,4 @@ add-highlighter shared/tupfile/code/ regex '^\h*\b(ifn?eq|ifn?def|else|endif|err add-highlighter shared/tupfile/code/ regex '^\h*\b(&?[\w_]+)\s*[:+]?=' 1:keyword add-highlighter shared/tupfile/code/ regex '`[^`\n]+`' 0:meta -# Initialization -# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -hook -group tupfile-highlight global WinSetOption filetype=tupfile %{ - add-highlighter window/tupfile ref tupfile - hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/tupfile } -} - }