diff --git a/rc/extra/php.kak b/rc/extra/php.kak new file mode 100644 index 000000000..6f522698f --- /dev/null +++ b/rc/extra/php.kak @@ -0,0 +1,75 @@ +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufCreate .*[.](php) %{ + set buffer filetype php +} + +# Highlighters +# ‾‾‾‾‾‾‾‾‾‾‾‾ + +addhl -group / regions -default code php \ + double_string '"' (? s \h+$ d } +} + +def -hidden _php_indent_on_char %< + eval -draft -itersel %< + # align closer token to its opener when alone on a line + try %/ exec -draft ^\h+[]}]$ m s \`|.\' 1 / + > +> + +def -hidden _php_indent_on_new_line %< + eval -draft -itersel %< + # preserve previous line indent + try %{ exec -draft K } + # filter previous line + try %{ exec -draft k : _php_filter_around_selections } + # copy // comments prefix and following white spaces + try %{ exec -draft k x s ^\h*\K#\h* y j p } + # indent after lines beginning / ending with opener token + try %_ exec -draft k x ^\h*[[{]|[[{]$ j _ + > +> + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook -group php-highlight global WinSetOption filetype=php %{ addhl ref php } + +hook global WinSetOption filetype=php %{ + hook window InsertEnd .* -group php-hooks _php_filter_around_selections + hook window InsertChar .* -group php-indent _php_indent_on_char + hook window InsertChar \n -group php-indent _php_indent_on_new_line +} + +hook -group php-highlight global WinSetOption filetype=(?!php).* %{ rmhl php } + +hook global WinSetOption filetype=(?!php).* %{ + rmhooks window php-indent + rmhooks window php-hooks +}