From 830c9b237a1a8d05b9d415600d08dd3e2f1a083e Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Sun, 24 Jan 2016 02:40:23 +0200 Subject: [PATCH] add basic support for repl interaction in tmux Define tmux-repl-vertical/horizontal/window commands that optionally takes the name of an interpreter to start it on a new pane/window. Users then can select some text in the editor and use [tmux-]send-text command to send it to the interpreter. Ideally the latter command should be bound to a key for easier interaction. --- rc/tmux.kak | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/rc/tmux.kak b/rc/tmux.kak index 48525db6..e514cf9a 100644 --- a/rc/tmux.kak +++ b/rc/tmux.kak @@ -7,6 +7,8 @@ hook global KakBegin .* %{ if [ -n "$TMUX" ]; then echo "alias global focus tmux-focus" echo "alias global new tmux-new-horizontal" + echo "alias global repl tmux-repl-horizontal" + echo "alias global send-text tmux-send-text" fi } } @@ -37,6 +39,46 @@ def tmux-new-window -params .. -command-completion -docstring "Create a new wind tmux-new-impl 'new-window' %arg{@} } +def -hidden -params 1..2 tmux-repl-impl %{ + %sh{ + if [ -z "$TMUX" ]; then + echo "echo -color Error This command is only available in a tmux session" + exit + fi + tmux_args="$1" + shift + tmux_cmd="$@" + tmux $tmux_args $tmux_cmd + tmux set-buffer -b kak_repl_window $(tmux display-message -p '#I') + tmux set-buffer -b kak_repl_pane $(tmux display-message -p '#P') + } +} + +def tmux-repl-vertical -params 0..1 -command-completion -docstring "Create a new vertical pane in tmux for repl interaction" %{ + tmux-repl-impl 'split-window -v' %arg{@} +} + +def tmux-repl-horizontal -params 0..1 -command-completion -docstring "Create a new horizontal pane in tmux for repl interaction" %{ + tmux-repl-impl 'split-window -h' %arg{@} +} + +def tmux-repl-window -params 0..1 -command-completion -docstring "Create a new window in tmux for repl interaction" %{ + tmux-repl-impl 'new-window' %arg{@} +} + +def tmux-send-text -docstring "Send selected text to the repl pane in tmux" %{ + %sh{ + tmux set-buffer -b kak_selection "${kak_selection}" + kak_orig_window=$(tmux display-message -p '#I') + kak_orig_pane=$(tmux display-message -p '#P') + tmux select-window -t:$(tmux show-buffer -b kak_repl_window) + tmux select-pane -t:.$(tmux show-buffer -b kak_repl_pane) + tmux paste-buffer -b kak_selection + tmux select-window -t:${kak_orig_window} + tmux select-pane -t:.${kak_orig_pane} + } +} + def -docstring "focus given client" \ -params 0..1 -client-completion \ tmux-focus %{ %sh{