Merge remote-tracking branch 'QiBaobin/master'

This commit is contained in:
Maxime Coste 2023-03-01 19:49:14 +11:00
commit f25fabdf2e
2 changed files with 69 additions and 1 deletions

View File

@ -23,7 +23,7 @@ declare-option -docstring \
"Ordered list of windowing modules to try and load. An empty list disables "Ordered list of windowing modules to try and load. An empty list disables
both automatic module loading and environment detection, enabling complete both automatic module loading and environment detection, enabling complete
manual control of the module loading." \ manual control of the module loading." \
str-list windowing_modules 'tmux' 'screen' 'kitty' 'iterm' 'sway' 'wayland' 'x11' str-list windowing_modules 'tmux' 'screen' 'zellij' 'kitty' 'iterm' 'sway' 'wayland' 'x11'
hook -group windowing global KakBegin .* %{ hook -group windowing global KakBegin .* %{

68
rc/windowing/zellij.kak Normal file
View File

@ -0,0 +1,68 @@
# https://zellij.dev/
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
provide-module zellij %{
# ensure we're running under zellij
evaluate-commands %sh{
[ -z "${kak_opt_windowing_modules}" ] || [ -n "$ZELLIJ" -a -n "$ZELLIJ_SESSION_NAME" ] || echo 'fail zellij not detected'
}
define-command -params 1.. zellij-action %{ nop %sh{
zellij --session "$kak_client_env_ZELLIJ_SESSION_NAME" action "$@"
}}
define-command -hidden -params 2.. zellij-run %{ nop %sh{
zellij_run_options=$1
shift
zellij --session "$kak_client_env_ZELLIJ_SESSION_NAME" run $zellij_run_options -- "$@"
}}
define-command -hidden -params 1.. zellij-terminal-impl %{
zellij-run "--close-on-exit" %arg{@}
}
complete-command zellij-terminal-impl shell
define-command zellij-terminal-vertical -params 1.. -docstring '
zellij-terminal-vertical <program> [<arguments>]: create a new terminal as a zellij pane
The current pane is split into two, top and bottom
The program passed as argument will be executed in the new terminal' \
%{
zellij-run "--direction down" %arg{@}
}
complete-command zellij-terminal-vertical shell
define-command zellij-terminal-horizontal -params 1.. -docstring '
zellij-terminal-horizontal <program> [<arguments>]: create a new terminal as a zellij pane
The current pane is split into two, left and right
The program passed as argument will be executed in the new terminal' \
%{
zellij-run "--direction right" %arg{@}
}
complete-command zellij-terminal-horizontal shell
define-command zellij-focus -params ..1 -docstring '
zellij-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_ZELLIJ}" ]; then
output=$(mktemp -d "${TMPDIR:-/tmp}"/kak-zellij.XXXXXXXX)/dump-screen
pane_count=0
while [ $((pane_count+=1)) -lt 10 ]; do
if zellij action dump-screen "$output" && grep "${kak_client}@\[$kak_session\]" "$output" > /dev/null ; then
break;
fi
zellij action focus-next-pane
done
rm -r $(dirname $output)
fi
}}
complete-command -menu zellij-focus client
## The default behaviour for the `new` command is to open an horizontal pane in a zellij session
alias global focus zellij-focus
alias global terminal zellij-terminal-impl
}