From 4fdaba5a42f4ba317d6be4302a95dc25129a2de9 Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Sat, 23 Jan 2016 19:46:36 +0200 Subject: [PATCH 1/5] fix tmux-new-window command docstring --- rc/tmux.kak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rc/tmux.kak b/rc/tmux.kak index 686fd2d9d..48525db6e 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{@} } From 830c9b237a1a8d05b9d415600d08dd3e2f1a083e Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Sun, 24 Jan 2016 02:40:23 +0200 Subject: [PATCH 2/5] 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 48525db6e..e514cf9a0 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{ From 0df6be4992b4d8e38990ea3c63286fef9532410b Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Sun, 24 Jan 2016 15:18:14 +0200 Subject: [PATCH 3/5] add basic support for repl interaction in x11 Define x11-repl command that optionally takes the name of an interpreter to start it on a new window. Users then can select some text in the editor and use [x11-]send-text command to send it to the interpreter. Ideally the latter command should be bound to a key for easier interaction. Requires xsel and xdotool to work. --- rc/x11.kak | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/rc/x11.kak b/rc/x11.kak index f485a4162..63c052c1c 100644 --- a/rc/x11.kak +++ b/rc/x11.kak @@ -30,6 +30,28 @@ def -docstring 'create a new kak client for current session' \ setsid ${kak_opt_termcmd} "kak -c ${kak_session} ${kakoune_params}" < /dev/null > /dev/null 2>&1 & }} +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 + } +} + def -docstring 'focus given client\'s window' \ -params 0..1 -client-completion \ x11-focus %{ %sh{ @@ -44,3 +66,5 @@ def -docstring 'focus given client\'s window' \ alias global focus x11-focus alias global new x11-new +alias global repl x11-repl +alias global send-text x11-send-text From e25490dc7f25b3492313c998472a2a95d892fe15 Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Tue, 26 Jan 2016 15:04:48 +0200 Subject: [PATCH 4/5] split tmux repl functionality to tmux-repl.kak --- rc/tmux-repl.kak | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ rc/tmux.kak | 42 --------------------------------------- 2 files changed, 51 insertions(+), 42 deletions(-) create mode 100644 rc/tmux-repl.kak diff --git a/rc/tmux-repl.kak b/rc/tmux-repl.kak new file mode 100644 index 000000000..f9a1163a4 --- /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 e514cf9a0..48525db6e 100644 --- a/rc/tmux.kak +++ b/rc/tmux.kak @@ -7,8 +7,6 @@ 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 } } @@ -39,46 +37,6 @@ 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{ From 31b4c5c4c885c7317cca48d30c9c68a254dceaee Mon Sep 17 00:00:00 2001 From: Gokcehan Kara Date: Tue, 26 Jan 2016 15:05:35 +0200 Subject: [PATCH 5/5] split x11 repl functionality to x11-repl.kak --- rc/x11-repl.kak | 25 +++++++++++++++++++++++++ rc/x11.kak | 24 ------------------------ 2 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 rc/x11-repl.kak diff --git a/rc/x11-repl.kak b/rc/x11-repl.kak new file mode 100644 index 000000000..3768b215e --- /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 diff --git a/rc/x11.kak b/rc/x11.kak index 63c052c1c..f485a4162 100644 --- a/rc/x11.kak +++ b/rc/x11.kak @@ -30,28 +30,6 @@ def -docstring 'create a new kak client for current session' \ setsid ${kak_opt_termcmd} "kak -c ${kak_session} ${kakoune_params}" < /dev/null > /dev/null 2>&1 & }} -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 - } -} - def -docstring 'focus given client\'s window' \ -params 0..1 -client-completion \ x11-focus %{ %sh{ @@ -66,5 +44,3 @@ def -docstring 'focus given client\'s window' \ alias global focus x11-focus alias global new x11-new -alias global repl x11-repl -alias global send-text x11-send-text