Merge remote-tracking branch 'krobelus/generalize-windowing'

This commit is contained in:
Maxime Coste 2023-12-12 21:29:31 +11:00
commit 83fb65aef5
12 changed files with 112 additions and 28 deletions

View File

@ -25,14 +25,62 @@ both automatic module loading and environment detection, enabling complete
manual control of the module loading." \
str-list windowing_modules 'tmux' 'screen' 'zellij' 'kitty' 'iterm' 'sway' 'wayland' 'x11' 'wezterm'
hook -group windowing global KakBegin .* %{
declare-option -docstring %{
windowing module to use in the 'terminal' command
} str windowing_module
declare-option -docstring %{
where to create new windows in the 'terminal' command.
Possible values:
- "window" (default) - new window
- "horizontal" - horizontal split (left/right)
- "vertical" - vertical split (top/bottom)
- "tab" - new tab besides current window
} str windowing_placement window
define-command terminal -params 1.. -docstring %{
terminal <program> [<arguments>]: create a new terminal using the preferred windowing environment and placement
This executes "%opt{windowing_module}-terminal-%opt{windowing_placement}" with the given arguments.
If the windowing module is 'wayland', 'sway' or 'x11', then the 'termcmd' option is used as terminal program.
Example usage:
terminal sh
with-option windowing_placement horizontal terminal sh
See also the 'new' command.
} %{
"%opt{windowing_module}-terminal-%opt{windowing_placement}" %arg{@}
}
complete-command terminal shell
# TODO Move this?
define-command with-option -params 3.. -docstring %{
with-option <option_name> <new_value> <command> [<arguments>]: evaluate a command with a modified option
} %{
evaluate-commands -save-regs s %{
evaluate-commands set-register s %exp{%%opt{%arg{1}}}
set-option current %arg{1} %arg{2}
evaluate-commands %sh{
shift 2
for arg
do
printf "'%s' " "$(printf %s "$arg" | sed "s/'/''/g")"
done
}
set-option current %arg{1} %reg{s}
}
}
hook -group windowing global KakBegin .* %{
evaluate-commands %sh{
set -- ${kak_opt_windowing_modules}
if [ $# -gt 0 ]; then
echo 'try %{ '
while [ $# -ge 1 ]; do
echo "require-module ${1} } catch %{ "
echo "require-module ${1}; set-option global windowing_module ${1} } catch %{ "
shift
done
echo "echo -debug 'no windowing module detected' }"

View File

@ -120,6 +120,5 @@ If no client is passed then the current one is used' \
complete-command -menu iterm-focus client
alias global focus iterm-focus
alias global terminal iterm-terminal-vertical
}

View File

@ -10,8 +10,8 @@ evaluate-commands %sh{
declare-option -docstring %{window type that kitty creates on new and repl calls (window|os-window)} str kitty_window_type window
define-command kitty-terminal -params 1.. -docstring '
kitty-terminal <program> [<arguments>]: create a new terminal as a kitty window
define-command kitty-terminal-window -params 1.. -docstring '
kitty-terminal-window <program> [<arguments>]: create a new terminal as a kitty window
The program passed as argument will be executed in the new terminal' \
%{
nop %sh{
@ -28,7 +28,7 @@ The program passed as argument will be executed in the new terminal' \
kitty @ $listen launch --no-response --type="$kak_opt_kitty_window_type" --cwd="$PWD" $match "$@"
}
}
complete-command kitty-terminal shell
complete-command kitty-terminal-window shell
define-command kitty-terminal-tab -params 1.. -docstring '
kitty-terminal-tab <program> [<arguments>]: create a new terminal as kitty tab
@ -74,8 +74,11 @@ If no client is passed then the current one is used' \
}
complete-command -menu kitty-focus client
alias global terminal kitty-terminal
alias global terminal-tab kitty-terminal-tab
alias global focus kitty-focus
# deprecated
define-command -hidden kitty-terminal -params 1.. %{
kitty-terminal-window %arg{@}
}
}

View File

@ -1,6 +1,6 @@
define-command new -params .. -docstring '
new [<commands>]: create a new Kakoune client
The ''terminal'' alias is being used to determine the user''s preferred terminal emulator
The ''terminal'' command is used to determine the user''s preferred terminal emulator
The optional arguments are passed as commands to the new client' \
%{
terminal kak -c %val{session} -e "%arg{@}"

View File

@ -11,7 +11,7 @@ define-command -docstring %{
All optional parameters are forwarded to the new window
} \
-params .. \
x11-repl %{ x11-terminal sh -c %{
x11-repl %{ x11-terminal-window sh -c %{
winid="${WINDOWID:-$(xdotool search --pid ${PPID} | tail -1)}"
printf "evaluate-commands -try-client $1 \
'set-option current x11_repl_id ${winid}'" | kak -p "$2"

View File

@ -25,7 +25,7 @@ define-command screen-terminal-impl -hidden -params 3.. %{
}
define-command screen-terminal-vertical -params 1.. -docstring '
screen-terminal-vertical <program> [<arguments>] [<arguments>]: create a new terminal as a screen pane
screen-terminal-vertical <program> [<arguments>]: create a new terminal as a screen pane
The current pane is split into two, left and right
The program passed as argument will be executed in the new terminal' \
%{
@ -71,6 +71,5 @@ If no client is passed then the current one is used' \
complete-command -menu screen-focus client
alias global focus screen-focus
alias global terminal screen-terminal-vertical
}

View File

@ -9,6 +9,37 @@ evaluate-commands %sh{
require-module 'wayland'
alias global sway-terminal-window wayland-terminal-window
define-command sway-terminal-vertical -params 1.. -docstring '
sway-terminal-vertical <program> [<arguments>]: create a new terminal as a Sway window
The current pane is split into two, top and bottom
The program passed as argument will be executed in the new terminal' \
%{
nop %sh{swaymsg split vertical}
wayland-terminal-window %arg{@}
}
complete-command sway-terminal-vertical shell
define-command sway-terminal-horizontal -params 1.. -docstring '
sway-terminal-horizontal <program> [<arguments>]: create a new terminal as a Sway window
The current pane is split into two, left and right
The program passed as argument will be executed in the new terminal' \
%{
nop %sh{swaymsg split horizontal}
wayland-terminal-window %arg{@}
}
complete-command sway-terminal-horizontal shell
define-command sway-terminal-tab -params 1.. -docstring '
sway-terminal-tab <program> [<arguments>]: create a new terminal as a Sway window
The program passed as argument will be executed in the new terminal' \
%{
nop %sh{swaymsg 'split horizontal; layout tabbed'}
wayland-terminal-window %arg{@}
}
complete-command sway-terminal-tab shell
define-command sway-focus-pid -hidden %{
evaluate-commands %sh{
pid=$kak_client_pid
@ -45,7 +76,6 @@ If no client is passed, then the current client is used' \
}
complete-command -menu sway-focus client
unalias global focus
alias global focus sway-focus
}

View File

@ -52,7 +52,7 @@ The program passed as argument will be executed in the new terminal' \
complete-command tmux-terminal-horizontal shell
define-command tmux-terminal-window -params 1.. -docstring '
tmux-terminal-window <program> [<arguments>] [<arguments>]: create a new terminal as a tmux window
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{@}
@ -78,6 +78,5 @@ 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
alias global terminal tmux-terminal-horizontal
}

View File

@ -28,8 +28,8 @@ A shell command is appended to the one set in this option at runtime} \
done
}
define-command wayland-terminal -params 1.. -docstring '
wayland-terminal <program> [<arguments>]: create a new terminal as a Wayland window
define-command wayland-terminal-window -params 1.. -docstring '
wayland-terminal-window <program> [<arguments>]: create a new terminal as a Wayland window
The program passed as argument will be executed in the new terminal' \
%{
evaluate-commands -save-regs 'a' %{
@ -46,7 +46,7 @@ The program passed as argument will be executed in the new terminal' \
}
}
}
complete-command wayland-terminal shell
complete-command wayland-terminal-window shell
define-command wayland-focus -params ..1 -docstring '
wayland-focus [<kakoune_client>]: focus a given client''s window
@ -57,6 +57,10 @@ If no client is passed, then the current client is used' \
complete-command -menu wayland-focus client
alias global focus wayland-focus
alias global terminal wayland-terminal
# deprecated
define-command -hidden wayland-terminal -params 1.. %{
wayland-terminal-window %arg{@}
}
}

View File

@ -16,7 +16,7 @@ define-command wezterm-terminal-impl -hidden -params 2.. %{
}
define-command wezterm-terminal-vertical -params 1.. -docstring '
wezterm-terminal-vertical <program> [<arguments>] [<arguments>]: create a new terminal as a wezterm pane
wezterm-terminal-vertical <program> [<arguments>]: create a new terminal as a wezterm pane
The current pane is split into two, top and bottom
The program passed as argument will be executed in the new terminal' \
%{
@ -66,6 +66,5 @@ If no client is passed then the current one is used' \
complete-command -menu wezterm-focus client
alias global focus wezterm-focus
alias global terminal wezterm-terminal-vertical
}

View File

@ -33,8 +33,8 @@ A shell command is appended to the one set in this option at runtime} \
done
}
define-command x11-terminal -params 1.. -docstring '
x11-terminal <program> [<arguments>]: create a new terminal as an X11 window
define-command x11-terminal-window -params 1.. -docstring '
x11-terminal-window <program> [<arguments>]: create a new terminal as an X11 window
The program passed as argument will be executed in the new terminal' \
%{
evaluate-commands -save-regs 'a' %{
@ -51,7 +51,7 @@ The program passed as argument will be executed in the new terminal' \
}
}
}
complete-command x11-terminal shell
complete-command x11-terminal-window shell
define-command x11-focus -params ..1 -docstring '
x11-focus [<kakoune_client>]: focus a given client''s window
@ -69,6 +69,10 @@ If no client is passed, then the current client is used' \
complete-command -menu x11-focus client
alias global focus x11-focus
alias global terminal x11-terminal
# deprecated
define-command -hidden x11-terminal -params 1.. %{
x11-terminal-window %arg{@}
}
}

View File

@ -17,10 +17,10 @@ define-command -hidden -params 2.. zellij-run %{ nop %sh{
zellij --session "$kak_client_env_ZELLIJ_SESSION_NAME" run $zellij_run_options -- "$@"
}}
define-command -hidden -params 1.. zellij-terminal-impl %{
define-command -hidden -params 1.. zellij-terminal-window %{
zellij-run "--close-on-exit" %arg{@}
}
complete-command zellij-terminal-impl shell
complete-command zellij-terminal-window shell
define-command zellij-terminal-vertical -params 1.. -docstring '
zellij-terminal-vertical <program> [<arguments>]: create a new terminal as a zellij pane
@ -62,7 +62,6 @@ 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
}