diff --git a/rc/tmux-repl.kak b/rc/tmux-repl.kak new file mode 100644 index 00000000..f9a1163a --- /dev/null +++ b/rc/tmux-repl.kak @@ -0,0 +1,51 @@ +# http://tmux.github.io/ +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global KakBegin .* %{ + %sh{ + if [ -n "$TMUX" ]; then + echo "alias global repl tmux-repl-horizontal" + echo "alias global send-text tmux-send-text" + fi + } +} + +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} + } +} diff --git a/rc/tmux.kak b/rc/tmux.kak index 686fd2d9..48525db6 100644 --- a/rc/tmux.kak +++ b/rc/tmux.kak @@ -33,7 +33,7 @@ def tmux-new-horizontal -params .. -command-completion -docstring "Create a new tmux-new-impl 'split-window -h' %arg{@} } -def tmux-new-window -params .. -command-completion -docstring "Create a new horizontal pane in tmux" %{ +def tmux-new-window -params .. -command-completion -docstring "Create a new window in tmux" %{ tmux-new-impl 'new-window' %arg{@} } diff --git a/rc/x11-repl.kak b/rc/x11-repl.kak new file mode 100644 index 00000000..3768b215 --- /dev/null +++ b/rc/x11-repl.kak @@ -0,0 +1,25 @@ +# termcmd should already be set in x11.kak +def -docstring 'create a new window for repl interaction' \ + -params 0..1 \ + -command-completion \ + x11-repl %{ %sh{ + if [ -z "${kak_opt_termcmd}" ]; then + echo "echo -color Error 'termcmd option is not set'" + exit + fi + if [ $# -eq 0 ]; then cmd="bash"; else cmd="$1"; fi + setsid ${kak_opt_termcmd} ${cmd} -t kak_repl_window < /dev/null > /dev/null 2>&1 & +}} + +def x11-send-text -docstring "send selected text to the repl window" %{ + %sh{ + echo "${kak_selection}" | xsel -i + wid=$(xdotool getactivewindow) + xdotool search --name kak_repl_window windowactivate + xdotool key --clearmodifiers "Shift+Insert" + xdotool windowactivate $wid + } +} + +alias global repl x11-repl +alias global send-text x11-send-text