Introduce rc/tmux.kak

This commit adds a kak script dedicated to tmux support, and declares
new command to interact with the current tmux session. Users are now
able to create vertical panes or horizontal panes arbitrarily (as
opposed to setting the `termcmd` variable to the proper command). The
script also has its own `focus` function, used to jump from a  pane to
another.
This commit is contained in:
Frank LENORMAND 2015-11-06 10:13:19 +03:00
parent 33253a8fd5
commit 678acd32bc

71
rc/tmux.kak Normal file
View File

@ -0,0 +1,71 @@
# http://tmux.github.io/
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
## Can be one of "horizontal", "vertical" or "window"
## When a new client is created, an horizontal pane, a vertical pane or a window will respectively be made
decl str tmux_default_direction "horizontal"
## The default behaviour for the `new` command is to open an horizontal pane in a tmux session
hook global KakBegin .* %{
%sh{
if [ -n "$TMUX" ]; then
tmuxcmd=""
case "${kak_opt_tmux_default_direction}" in
vertical) tmuxcmd="tmux split-window -v";;
window) tmuxcmd="tmux new-window";;
horizontal) tmuxcmd="tmux split-window -h";;
*) echo "invalid value: ${kak_opt_tmux_default_direction}" >&2;;
esac
if [ -n "${tmuxcmd}" ]; then
echo "set global termcmd '${tmuxcmd}'"
fi
echo "alias global focus focus-tmux"
fi
}
}
## Temporarily override the default client creation command
def -hidden -shell-params tmux_override_termcmd %{
%sh{
if [ -z "$TMUX" ]; then
echo "echo -color Error This command is only available in a tmux session"
else
readonly cmd_override="$1"
readonly termcmd="${kak_opt_termcmd}"
shift
echo "
set current termcmd '${cmd_override}'
eval new $@
set current termcmd '${termcmd}'
"
fi
}
}
def tmux-new-vertical -shell-params -command-completion -docstring "Create a new vertical pane in tmux" %{
%sh{
echo "eval %{tmux_override_termcmd 'tmux split-window -v' $@}"
}
}
def tmux-new-horizontal -shell-params -command-completion -docstring "Create a new horizontal pane in tmux" %{
%sh{
echo "eval %{tmux_override_termcmd 'tmux split-window -h' $@}"
}
}
def -docstring "focus given client" \
-shell-params -client-completion \
focus-tmux %{ %sh{
if [ $# -gt 1 ]; then
echo "echo -color Error 'too many arguments, use focus [client]'"
elif [ $# -eq 1 ]; then
echo "eval -client '$1' focus"
elif [ -n "${kak_client_env_TMUX}" ]; then
TMUX="${kak_client_env_TMUX}" tmux select-pane -t "${kak_client_env_TMUX_PANE}" > /dev/null
fi
} }