f26d4ea4bf
The tmux-terminal commands typically run
tmux split-window kak -c ${kak_session} </dev/null >/dev/null 2>&1 &
The tmux process runs in the background with output silenced. This is
not necessary because "tmux split-window" is a thin client that
merely forwards its arguments to the tmux server. All our wrappers
for other terminal-servers (kitty, iterm, screen, wezterm, zellij)
simply run in the foreground, not silencing any errors.
The tmux backgrounding was added in 208b91627
(Move client.kak as
x11.kak and change tmux.kak to be its peer, 2015-11-17), probably for
consistency with x11.kak. That one is different however because it
potentially spawns a full terminal, not just a client that briefly
talks to a terminal server - that's why x11-terminal needs to use
"setsid," to avoid killing said terminal when we signal our process
group.
Remove the backgrounding from tmux.kak for consistency and to reduce
surprise.
83 lines
3.1 KiB
Plaintext
83 lines
3.1 KiB
Plaintext
# http://tmux.github.io/
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
provide-module tmux %{
|
|
|
|
# ensure we're running under tmux
|
|
evaluate-commands %sh{
|
|
[ -z "${kak_opt_windowing_modules}" ] || [ -n "$TMUX" ] || echo 'fail tmux not detected'
|
|
}
|
|
|
|
define-command -hidden -params 2.. tmux-terminal-impl %{
|
|
evaluate-commands %sh{
|
|
tmux=${kak_client_env_TMUX:-$TMUX}
|
|
if [ -z "$tmux" ]; then
|
|
echo "fail 'This command is only available in a tmux session'"
|
|
exit
|
|
fi
|
|
tmux_args="$1"
|
|
if [ "${1%%-*}" = split ]; then
|
|
tmux_args="$tmux_args -t ${kak_client_env_TMUX_PANE}"
|
|
elif [ "${1%% *}" = new-window ]; then
|
|
session_id=$(tmux display-message -p -t ${kak_client_env_TMUX_PANE} '#{session_id}')
|
|
tmux_args="$tmux_args -t $session_id"
|
|
fi
|
|
shift
|
|
# ideally we should escape single ';' to stop tmux from interpreting it as a new command
|
|
# but that's probably too rare to care
|
|
if [ -n "$TMPDIR" ]; then
|
|
TMUX=$tmux tmux $tmux_args env TMPDIR="$TMPDIR" "$@"
|
|
else
|
|
TMUX=$tmux tmux $tmux_args "$@"
|
|
fi
|
|
}
|
|
}
|
|
|
|
define-command tmux-terminal-vertical -params 1.. -docstring '
|
|
tmux-terminal-vertical <program> [<arguments>]: create a new terminal as a tmux pane
|
|
The current pane is split into two, top and bottom
|
|
The program passed as argument will be executed in the new terminal' \
|
|
%{
|
|
tmux-terminal-impl 'split-window -v' %arg{@}
|
|
}
|
|
complete-command tmux-terminal-vertical shell
|
|
|
|
define-command tmux-terminal-horizontal -params 1.. -docstring '
|
|
tmux-terminal-horizontal <program> [<arguments>]: create a new terminal as a tmux pane
|
|
The current pane is split into two, left and right
|
|
The program passed as argument will be executed in the new terminal' \
|
|
%{
|
|
tmux-terminal-impl 'split-window -h' %arg{@}
|
|
}
|
|
complete-command tmux-terminal-horizontal shell
|
|
|
|
define-command tmux-terminal-window -params 1.. -docstring '
|
|
tmux-terminal-window <program> [<arguments>]: create a new terminal as a tmux window
|
|
The program passed as argument will be executed in the new terminal' \
|
|
%{
|
|
tmux-terminal-impl 'new-window' %arg{@}
|
|
}
|
|
complete-command tmux-terminal-window shell
|
|
|
|
define-command tmux-focus -params ..1 -docstring '
|
|
tmux-focus [<client>]: focus the given client
|
|
If no client is passed then the current one is used' \
|
|
%{
|
|
evaluate-commands %sh{
|
|
if [ $# -eq 1 ]; then
|
|
printf "evaluate-commands -client '%s' focus" "$1"
|
|
elif [ -n "${kak_client_env_TMUX}" ]; then
|
|
# select-pane makes the pane active in the window, but does not select the window. Both select-pane
|
|
# and select-window should be invoked in order to select a pane on a currently not focused window.
|
|
TMUX="${kak_client_env_TMUX}" tmux select-window -t "${kak_client_env_TMUX_PANE}" \; \
|
|
select-pane -t "${kak_client_env_TMUX_PANE}" > /dev/null
|
|
fi
|
|
}
|
|
}
|
|
complete-command -menu tmux-focus client
|
|
|
|
## The default behaviour for the `new` command is to open an horizontal pane in a tmux session
|
|
alias global focus tmux-focus
|
|
|
|
}
|