From 5d9a6f0f97d5e0d451a56a94e6e6616b4c8c3a40 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Mon, 13 Oct 2025 20:37:17 +0530 Subject: Add repl integration --- autoload/repl.kak | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 autoload/repl.kak (limited to 'autoload/repl.kak') 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 ': enter-user-mode repl' +map global repl ': xrepl-begin' +map global repl t ': xrepl-begin' +map global repl 'p: xrepl-send-command' +map global repl l ': xrepl-send-command' +map global repl r ': xrepl-send-keys Enter' +map global repl c ': xrepl-send-keys C-c' +map global repl q ': xrepl-quit' -- cgit v1.3.1