blob: 370ea14853bf802da0c46d6524505283c0d7ca30 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
hook global BufCreate .*[.]org %{
set-option buffer filetype org
}
declare-user-mode org
hook global WinSetOption filetype=org %{
add-highlighter window/org ref org
require-module orgmode-highlight
map window normal <ret> ': orgmode-jump-link<ret>'
map window user o ': enter-user-mode org<ret>' -docstring 'Org mode'
map window org <tab> ': orgmode-toggle<ret>' -docstring 'Toggle checkbox/task'
}
define-command orgmode-toggle %{
evaluate-commands -save-regs '#/' %{
try %{ orgmode-toggle-checkbox } catch %{ orgmode-toggle-task-state } catch %{ }
}
}
define-command orgmode-jump-link %{
# TODO: support multiple links in single line
evaluate-commands %{ try %{
execute-keys ',xs\[\[([^\n\]]+)\]<ret>'
evaluate-commands %sh{
[ -z "$kak_reg_1" ] && exit 0
case "$kak_reg_1" in
https://*|http://*) xdg-open "$kak_reg_1" >/dev/null 2>&1 ;;
/*|~/*) echo "edit %{$kak_reg_1}" ;;
*)
current_path="${kak_buffile:-"$kak_bufname"}"
path="$(realpath -s "$(dirname "$kak_buffile")/$kak_reg_1")"
echo "edit %{$path}"
;;
esac
}
} }
}
define-command orgmode-toggle-checkbox %{
evaluate-commands %{
execute-keys ',xs^(\h*-\h+)\[([Xx\- ])\]<ret>'
evaluate-commands %sh{
next="$kak_reg_2"
case "$kak_reg_2" in
X|x) next=" " ;;
-) next="X" ;;
*) next="-" ;;
esac
echo "execute-keys 'c<c-r>1[$next]<esc>'"
}
}
}
define-command orgmode-toggle-task-state %{
evaluate-commands %{
execute-keys ',xs^(\*+\h+)(TODO|ACTIVE|DONE)?<ret>'
evaluate-commands %sh{
next="TODO " # Add space at end when no state
case "$kak_reg_2" in
TODO) next="ACTIVE" ;;
ACTIVE) next="DONE" ;;
DONE) next="TODO" ;;
esac
echo "execute-keys 'c<c-r>1$next<esc>'"
}
}
}
provide-module orgmode-highlight %{
add-highlighter shared/org regions
add-highlighter shared/org/inline default-region regions
add-highlighter shared/org/inline/text default-region group
add-highlighter shared/org/inline/text/ regex \*[^\n*]+\* 0:inlineBold
add-highlighter shared/org/inline/text/ regex /[^\n/]+/ 0:inlineItalic
add-highlighter shared/org/inline/text/ regex _[^\n_]+_ 0:inlineUnderline
add-highlighter shared/org/inline/text/ regex \+[^\n+]+\+ 0:inlineStrikethrough
add-highlighter shared/org/inline/text/ regex ~[^\n~]+~ 0:inlineCode
add-highlighter shared/org/inline/text/ regex \[\[[^\n]+\]\] 0:inlineLink
add-highlighter shared/org/codeblock region -match-capture \
^\h*#\+(?:begin|BEGIN)_([a-zA-Z]*)[^\n]*$ \
^\h*#\+(?:end|END)_([a-zA-Z]*)[^\n]*$ \
regions
add-highlighter shared/org/codeblock/ default-region fill orgCodeBlock
add-highlighter shared/org/inline/text/ regex ^[*]{1}[^\n]* 0:header1
add-highlighter shared/org/inline/text/ regex ^[*]{2}[^\n]* 0:header2
add-highlighter shared/org/inline/text/ regex ^[*]{3}[^\n]* 0:header3
add-highlighter shared/org/inline/text/ regex ^[*]{4}[^\n]* 0:header4
add-highlighter shared/org/inline/text/ regex ^[*]{5}[^\n]* 0:header5
add-highlighter shared/org/inline/text/ regex ^[*]{6}[^\n]* 0:header6
add-highlighter shared/org/inline/text/ regex ^[*]*\s+(TODO) 1:orgTaskStateTodo
add-highlighter shared/org/inline/text/ regex ^[*]*\s+(DONE) 1:orgTaskStateDone
add-highlighter shared/org/inline/text/ regex ^[*]*\s+(ACTIVE) 1:orgTaskStateActive
add-highlighter shared/org/inline/text/ regex ^\s*-\s*(\[[xX]\])\h([^\n]+)$ 1:checkboxChecked 2:checkboxCheckedText
add-highlighter shared/org/inline/text/ regex ^\s*-\s*(\[[\s]\]) 1:checkboxTodo
add-highlighter shared/org/inline/text/ regex ^\s*-\s*(\[[-]\]) 1:checkboxPending
}
|