diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-10-14 14:32:01 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-10-21 13:39:45 +0530 |
| commit | 92fd8c7abbce0124b3c37f147c132365c74ae496 (patch) | |
| tree | 2f775911dff3df12f586d5126545cf23fa2d66dc /autoload/repl.kak | |
| parent | 2098f0001d584d1846b43c4a2003a175aeed62b0 (diff) | |
| download | kakoune-config-92fd8c7abbce0124b3c37f147c132365c74ae496.tar.gz kakoune-config-92fd8c7abbce0124b3c37f147c132365c74ae496.zip | |
Add formatter config
Diffstat (limited to 'autoload/repl.kak')
| -rw-r--r-- | autoload/repl.kak | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/autoload/repl.kak b/autoload/repl.kak index 31922f0..f5dacef 100644 --- a/autoload/repl.kak +++ b/autoload/repl.kak @@ -1,54 +1,80 @@ -declare-option str xrepl_init_cmd "$SHELL"; -declare-option str xrepl_input_transform; +declare-option str xrepl_mode_config; declare-option bool xrepl_running false; +declare-option str-to-str-map xrepl_modes; -declare-option str-list xrepl_modes; - -set-option -add global xrepl_modes "node" -declare-option str xrepl_init_cmd_node "node" +set-option -add global xrepl_modes %{node={ + "cmd": "node" +}} +set-option -add global xrepl_modes %{shell={ + "cmd": "$SHELL", + "transform": "echo 'echo 123 $foooo :: \\$kak_buffile :: \\$kak_selection :: \\$kak_seletion_desc'" +}} 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)'" + # TODO: This preevaluates the params in transform. + fennel %arg{1} %opt{xrepl_modes} %{ + (local [mode & modestxt] [(args)]) + (each [_ val (ipairs modestxt)] + (local (key config) (string.match val "^%s*([^=]*)=(.*)$")) + (kak.info config) + (when (= key mode) + (kak.set "global" "xrepl_mode_config" config))) + } + xrepl-begin +} + +define-command xrepl-select %{ + fennel %opt{xrepl_modes} %{ + (local modes [(args)]) + (local modenames []) + (each [_ val (ipairs modes)] + (local (key _config) (string.match val "^%s*([^=]*)=(.*)$")) + (when key (table.insert modenames key))) + (local compl (.. "echo -e \"" (table.concat modenames "\n") "\"")) + (kak.prompt :-menu + :-shell-script-candidates compl + "repl mode: " + "xrepl-set-mode %val{text}") } } define-command xrepl-send-command %{ evaluate-commands %sh{ + transform="$(echo "$kak_opt_xrepl_mode_config" | jq -rj '.transform? // ""')" value="$kak_selection" - if ! [ -z "$kak_xrepl_input_transform" ]; then - value=$(echo "$value" | "$kak_xrepl_input_transform") + if ! [ -z "$transform" ]; then + export kak_buffile="$kak_buffile" + export kak_selection="$kak_selection" + export kak_selection_desc="$kak_selection_desc" + value=$(echo "$value" | foooo=qwe sh -c "$transform") fi + echo "info %{$value//$transform\n$kak_opt_xrepl_mode_config}" echo "repl-send-text %{$value}" } } define-command xrepl-send-keys -params 1.. %{ - nop %sh{ tmux send-keys -t "$kak_opt_tmux_repl_id" "$@" } + 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"; + if ! [ -z "$kak_opt_tmux_repl_id" ]; then + tmux kill-pane -t "$kak_opt_tmux_repl_id"; + fi } } } 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 }" + init_cmd="$(echo "$kak_opt_xrepl_mode_config" | jq -rj '.cmd? // ""')" + if [ -z "$init_cmd" ]; then init_cmd="$SHELL"; fi echo "set-option global xrepl_running true" + echo "repl-new $init_cmd" + echo "nop %sh{ tmux last-pane }" fi } } @@ -57,8 +83,9 @@ 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 <ret> '<c-s><a-i>p: xrepl-send-command<ret><c-o>' 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>' +map global repl <tab> ': xrepl-select<ret>' |
