aboutsummaryrefslogtreecommitdiff
path: root/autoload/repl.kak
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-10-14 14:32:01 +0530
committerAkshay Nair <phenax5@gmail.com>2025-10-21 13:39:45 +0530
commit92fd8c7abbce0124b3c37f147c132365c74ae496 (patch)
tree2f775911dff3df12f586d5126545cf23fa2d66dc /autoload/repl.kak
parent2098f0001d584d1846b43c4a2003a175aeed62b0 (diff)
downloadkakoune-config-92fd8c7abbce0124b3c37f147c132365c74ae496.tar.gz
kakoune-config-92fd8c7abbce0124b3c37f147c132365c74ae496.zip
Add formatter config
Diffstat (limited to '')
-rw-r--r--autoload/repl.kak73
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>'