diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-10-13 20:37:17 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-10-21 13:39:45 +0530 |
| commit | 5d9a6f0f97d5e0d451a56a94e6e6616b4c8c3a40 (patch) | |
| tree | 68ef1257490c8e1b4512747fe46a68b5fd0b000a /autoload/repl.kak | |
| parent | 351d55648ea26335b713140bfc0c4f69e2d70489 (diff) | |
| download | kakoune-config-5d9a6f0f97d5e0d451a56a94e6e6616b4c8c3a40.tar.gz kakoune-config-5d9a6f0f97d5e0d451a56a94e6e6616b4c8c3a40.zip | |
Add repl integration
Diffstat (limited to 'autoload/repl.kak')
| -rw-r--r-- | autoload/repl.kak | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/autoload/repl.kak b/autoload/repl.kak new file mode 100644 index 0000000..31922f0 --- /dev/null +++ b/autoload/repl.kak @@ -0,0 +1,64 @@ +declare-option str xrepl_init_cmd "$SHELL"; +declare-option str xrepl_input_transform; +declare-option bool xrepl_running false; + +declare-option str-list xrepl_modes; + +set-option -add global xrepl_modes "node" +declare-option str xrepl_init_cmd_node "node" + +define-command xrepl-set-mode -params 1 %{ + xrepl-quit + evaluate-commands %sh{ + cmd="$(eval echo "\$kak_opt_xrepl_init_cmd_$1")" + input_transform="$(eval echo "\$kak_opt_xrepl_input_transform_$1")" + echo "info %{$kak_opt_xrepl_init_cmd_node; $cmd:$input_transform}" + if [ -z "$cmd" ]; then cmd="$SHELL"; fi + if [ -z "$input_transform" ]; then input_transform=""; fi + echo "set global xrepl_init_cmd '$(printf '%q' $cmd)'" + echo "set global xrepl_input_transform '$(printf '%q' $input_transform)'" + } +} + +define-command xrepl-send-command %{ + evaluate-commands %sh{ + value="$kak_selection" + if ! [ -z "$kak_xrepl_input_transform" ]; then + value=$(echo "$value" | "$kak_xrepl_input_transform") + fi + echo "repl-send-text %{$value}" + } +} + +define-command xrepl-send-keys -params 1.. %{ + nop %sh{ tmux send-keys -t "$kak_opt_tmux_repl_id" "$@" } +} + +define-command xrepl-quit %{ + set-option global xrepl_running false + try %{ nop %sh{ + [ -z "$kak_opt_tmux_repl_id" ] && exit 0; + tmux kill-pane -t "$kak_opt_tmux_repl_id"; + } } +} + +define-command xrepl-begin %{ + # TODO: Open if not running + evaluate-commands %sh{ + if [ "$kak_opt_xrepl_running" = "false" ]; then + echo "repl-new %opt{xrepl_init_cmd}" + echo "nop %sh{ tmux last-pane }" + echo "set-option global xrepl_running true" + fi + } +} + +declare-user-mode repl +map global normal <c-t> ': enter-user-mode repl<ret>' +map global repl <c-t> ': xrepl-begin<ret>' +map global repl t ': xrepl-begin<ret>' +map global repl <ret> '<a-i>p: xrepl-send-command<ret>' +map global repl l ': xrepl-send-command<ret>' +map global repl r ': xrepl-send-keys Enter<ret>' +map global repl c ': xrepl-send-keys C-c<ret>' +map global repl q ': xrepl-quit<ret>' |
