summaryrefslogtreecommitdiff
path: root/rc/python.kak
diff options
context:
space:
mode:
authorAlex Leferry 2 <alexherbo2@gmail.com>2014-07-07 14:48:09 +0100
committerAlex Leferry 2 <alexherbo2@gmail.com>2014-07-07 22:51:09 +0200
commitea29a4c2d4df01b03ae800ccc0bc32c15100b7e1 (patch)
tree964c9b99b9d29782b303d06c7d53ed4418c43224 /rc/python.kak
parentf69df6560dfeea4c3671910851c72146f6f68e0d (diff)
add rc/python.kak
Diffstat (limited to 'rc/python.kak')
-rw-r--r--rc/python.kak73
1 files changed, 73 insertions, 0 deletions
diff --git a/rc/python.kak b/rc/python.kak
new file mode 100644
index 00000000..a78e3b1e
--- /dev/null
+++ b/rc/python.kak
@@ -0,0 +1,73 @@
+# http://python.org
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+
+# Detection
+# ‾‾‾‾‾‾‾‾‾
+
+hook global BufSetOption mimetype=text/x-python %{
+ set buffer filetype python
+}
+
+hook global BufCreate .*[.](py) %{
+ set buffer filetype python
+}
+
+# Highlighters
+# ‾‾‾‾‾‾‾‾‾‾‾‾
+
+addhl -group / multi_region -default code python \
+ double_string '"""' '"""' '' \
+ single_string "'''" "'''" '' \
+ double_string '"' (?<!\\)(\\\\)*" '' \
+ single_string "'" "'" '' \
+ comment '#' '$' ''
+
+addhl -group /python/double_string fill string
+addhl -group /python/single_string fill string
+addhl -group /python/comment fill comment
+
+addhl -group /python/code regex \<(True|False|None)\> 0:value
+addhl -group /python/code regex \<(import|from)\> 0:macro
+
+# Keyword list is collected using `keyword.kwlist` from `keyword`
+addhl -group /python/code regex \<(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|global|if|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)\> 0:keyword
+
+# Commands
+# ‾‾‾‾‾‾‾‾
+
+def -hidden _python_filter_around_selections %{
+ eval -draft -itersel %{
+ exec <a-x>
+ # remove trailing white spaces
+ try %{ exec -draft s \h+$ <ret> d }
+ }
+}
+
+def -hidden _python_indent_on_new_line %{
+ eval -draft -itersel %{
+ # preserve previous line indent
+ try %{ exec -draft <space> K <a-&> }
+ # filter previous line
+ try %{ exec -draft k : _python_filter_around_selections <ret> }
+ # copy '#' comment prefix and following white spaces
+ try %{ exec -draft k x s ^\h*\K#\h* <ret> y j p }
+ # indent after :
+ try %{ exec -draft <space> k x <a-k> :$ <ret> j <a-gt> }
+ }
+}
+
+# Initialization
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+
+hook global WinSetOption filetype=python %{
+ addhl ref python
+
+ hook window InsertEnd .* -group python-hooks _python_filter_around_selections
+ hook window InsertChar \n -group python-indent _python_indent_on_new_line
+}
+
+hook global WinSetOption filetype=(?!python).* %{
+ rmhl python
+ rmhooks window python-indent
+ rmhooks window python-hooks
+}