aboutsummaryrefslogtreecommitdiff
path: root/autoload/orgmode.kak
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-10-25 14:17:48 +0530
committerAkshay Nair <phenax5@gmail.com>2025-10-25 14:17:48 +0530
commitaded6f2aebaacfd2face07831a76b7a91f76127a (patch)
treed8e97e99d56f8918f3dae54da2e4a3ce558d7260 /autoload/orgmode.kak
parentd8acf7b147b180c2333eb4122f28a4dd972cd402 (diff)
downloadkakoune-config-aded6f2aebaacfd2face07831a76b7a91f76127a.tar.gz
kakoune-config-aded6f2aebaacfd2face07831a76b7a91f76127a.zip
Move orgmode out + faces changes
Diffstat (limited to 'autoload/orgmode.kak')
-rw-r--r--autoload/orgmode.kak61
1 files changed, 61 insertions, 0 deletions
diff --git a/autoload/orgmode.kak b/autoload/orgmode.kak
new file mode 100644
index 0000000..7c44039
--- /dev/null
+++ b/autoload/orgmode.kak
@@ -0,0 +1,61 @@
+declare-user-mode org
+hook global BufSetOption filetype=org %{
+ map buffer normal <ret> ': orgmode-jump-link<ret>' -docstring 'Jump to link'
+ map buffer user o ': enter-user-mode org<ret>' -docstring 'Org mode'
+ map buffer 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>'"
+ }
+ }
+}