b875a1802c
This patch centralises the loading of windowing environments, in order to ensure that by default only a single module is loaded, rather than the current code which can load multiple potentially incompatible modules; and in order to provide the user with more control over the loading of windowing modules. The patch introduces a new str-list option `windowing_modules` which defines an ordered list of windowing modules to attempt to load. Modules are loaded in the order specified in the list until a module loads without error, at which point the process finishes. When loaded each windowing module tests the environment to determine whether it should load (e.g. the tmux module tests to see if it's being run within a tmux session), and if it determines that it should then it completes its loading without error. If it doesn't detect an appropriate environment then it returns an error, and the module loading logic tries the next module. The user can override the default `windowing_modules` list to specify their preferred modules (i.e. they can put kitty ahead of tmux if that's their preference, or they can leave out the x11 modules alltogether). In addition, if the `windowing_modules` option is an empty list this bypasses the environment detection logic completely, and allows the modules to be loaded manually - this allows a user to replace the windowing module loading logic with their own manual set up.
69 lines
2.2 KiB
Plaintext
69 lines
2.2 KiB
Plaintext
# x11
|
|
|
|
provide-module x11 %{
|
|
|
|
# ensure that we're running in the right environment
|
|
evaluate-commands %sh{
|
|
[-z "${kak_opt_windowing_modules}" ] || [ -n "$DISPLAY" ] || echo 'fail DISPLAY is not set'
|
|
}
|
|
|
|
# termcmd should be set such as the next argument is the whole
|
|
# command line to execute
|
|
declare-option -docstring %{shell command run to spawn a new terminal
|
|
A shell command is appended to the one set in this option at runtime} \
|
|
str termcmd %sh{
|
|
for termcmd in 'alacritty -e sh -c' \
|
|
'kitty sh -c' \
|
|
'termite -e ' \
|
|
'urxvt -e sh -c' \
|
|
'rxvt -e sh -c' \
|
|
'st -e sh -c' \
|
|
'xterm -e sh -c' \
|
|
'roxterm -e sh -c' \
|
|
'mintty -e sh -c' \
|
|
'sakura -x ' \
|
|
'gnome-terminal -e ' \
|
|
'xfce4-terminal -e ' \
|
|
'konsole -e '; do
|
|
terminal=${termcmd%% *}
|
|
if command -v $terminal >/dev/null 2>&1; then
|
|
printf %s\\n "$termcmd"
|
|
exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
define-command x11-terminal -params 1.. -shell-completion -docstring '
|
|
x11-terminal <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' %{
|
|
set-register a %arg{@}
|
|
evaluate-commands %sh{
|
|
if [ -z "${kak_opt_termcmd}" ]; then
|
|
echo "fail 'termcmd option is not set'"
|
|
exit
|
|
fi
|
|
setsid ${kak_opt_termcmd} "$kak_quoted_reg_a" < /dev/null > /dev/null 2>&1 &
|
|
}
|
|
}
|
|
}
|
|
|
|
define-command x11-focus -params ..1 -client-completion -docstring '
|
|
x11-focus [<kakoune_client>]: focus a given client''s window
|
|
If no client is passed, then the current client is used' \
|
|
%{
|
|
evaluate-commands %sh{
|
|
if [ $# -eq 1 ]; then
|
|
printf "evaluate-commands -client '%s' focus" "$1"
|
|
else
|
|
xdotool windowactivate $kak_client_env_WINDOWID > /dev/null
|
|
fi
|
|
}
|
|
}
|
|
|
|
alias global focus x11-focus
|
|
alias global terminal x11-terminal
|
|
|
|
}
|