feat: add kitty to the list of supported terminals for automatic start

This commit is contained in:
Dillon Lees 2020-07-06 02:00:50 -04:00
parent 1531b3770a
commit 9f0cf6581b
3 changed files with 102 additions and 31 deletions

View File

@ -16,10 +16,19 @@ Next time the computer is started:
Config options: Config options:
- `set -g @continuum-boot-options 'fullscreen'` - terminal window - `set -g @continuum-boot-options 'fullscreen'` - terminal window
will go fullscreen will go fullscreen
- `set -g @continuum-boot-options 'iterm'` - start `iTerm` instead - `set -g @continuum-boot-options 'iterm'` - start [iTerm](https://www.iterm2.com) instead
of `Terminal.app` of `Terminal.app`
- `set -g @continuum-boot-options 'iterm,fullscreen'` - start `iTerm` - `set -g @continuum-boot-options 'iterm,fullscreen'` - start `iTerm`
in fullscreen in fullscreen
- `set -g @continuum-boot-options 'kitty'` - start [kitty](https://sw.kovidgoyal.net/kitty) instead
of `Terminal.app`
- `set -g @continuum-boot-options 'kitty,fullscreen'` - start `kitty`
in fullscreen
Note: The first time you reboot your machine and activate this feature you may be prompted about a script requiring
access to a system program (i.e. - System Events). If this happens tmux will not start automatically and you will need
to go to `System Preferences -> Security & Privacy -> Accessability` and add the script to the list of apps that are
allowed to control your computer.
### Linux ### Linux

View File

@ -1,22 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$CURRENT_DIR/../helpers.sh" source "$CURRENT_DIR/../helpers.sh"
source "$CURRENT_DIR/../variables.sh" source "$CURRENT_DIR/../variables.sh"
template() { template() {
local tmux_start_script="$1" local tmux_start_script="$1"
local is_fullscreen="$2" local is_fullscreen="$2"
local fullscreen_tag="" local fullscreen_tag=""
if [ "$is_fullscreen" == "true" ]; then if [ "$is_fullscreen" == "true" ]; then
# newline and spacing so tag is aligned with other tags in template # newline and spacing so tag is aligned with other tags in template
fullscreen_tag=$'\n <string>fullscreen</string>' fullscreen_tag=$'\n <string>fullscreen</string>'
fi fi
local content local content
read -r -d '' content <<-EOF read -r -d '' content <<- EOF
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
@ -32,35 +32,37 @@ template() {
</dict> </dict>
</plist> </plist>
EOF EOF
echo "$content" echo "$content"
} }
get_iterm_or_teminal_option_value() { get_iterm_or_teminal_option_value() {
local options="$1" local options="$1"
if [[ "$options" =~ "iterm" ]]; then if [[ "$options" =~ "iterm" ]]; then
echo "iterm" echo "iterm"
else elif [[ "$options" =~ "kitty" ]]; then
# Terminal.app is the default console app echo "kitty"
echo "terminal" else
fi # Terminal.app is the default console app
echo "terminal"
fi
} }
get_fullscreen_option_value() { get_fullscreen_option_value() {
local options="$1" local options="$1"
if [[ "$options" =~ "fullscreen" ]]; then if [[ "$options" =~ "fullscreen" ]]; then
echo "true" echo "true"
else else
echo "false" echo "false"
fi fi
} }
main() { main() {
local options="$(get_tmux_option "$auto_start_config_option" "$auto_start_config_default")" local options="$(get_tmux_option "$auto_start_config_option" "$auto_start_config_default")"
local iterm_or_terminal_value="$(get_iterm_or_teminal_option_value "$options")" local iterm_or_terminal_value="$(get_iterm_or_teminal_option_value "$options")"
local fullscreen_option_value="$(get_fullscreen_option_value "$options")" local fullscreen_option_value="$(get_fullscreen_option_value "$options")"
local tmux_start_script_path="${CURRENT_DIR}/osx_${iterm_or_terminal_value}_start_tmux.sh" local tmux_start_script_path="${CURRENT_DIR}/osx_${iterm_or_terminal_value}_start_tmux.sh"
local launchd_plist_file_content="$(template "$tmux_start_script_path" "$fullscreen_option_value")" local launchd_plist_file_content="$(template "$tmux_start_script_path" "$fullscreen_option_value")"
echo "$launchd_plist_file_content" > "$osx_auto_start_file_path" echo "$launchd_plist_file_content" > "$osx_auto_start_file_path"
} }
main main

View File

@ -0,0 +1,60 @@
#!/usr/bin/env bash
# for "true full screen" call the script with "fullscreen" as the first argument
TRUE_FULL_SCREEN="$1"
start_terminal_and_run_tmux() {
osascript <<- EOF
tell application "kitty"
activate
delay 5
tell application "System Events" to tell process "kitty"
set frontmost to true
keystroke "tmux"
key code 36
end tell
end tell
EOF
}
resize_window_to_full_screen() {
osascript <<- EOF
tell application "kitty"
activate
tell application "System Events"
if (every window of process "kitty") is {} then
keystroke "n" using command down
end if
tell application "Finder"
set desktopSize to bounds of window of desktop
end tell
set position of front window of process "kitty" to {0, 0}
set size of front window of process "kitty" to {item 3 of desktopSize, item 4 of desktopSize}
end tell
end tell
EOF
}
resize_to_true_full_screen() {
osascript <<- EOF
tell application "kitty"
activate
delay 1
tell application "System Events" to tell process "kitty"
keystroke "f" using {control down, command down}
end tell
end tell
EOF
}
main() {
start_terminal_and_run_tmux
if [ "$TRUE_FULL_SCREEN" == "fullscreen" ]; then
resize_to_true_full_screen
else
resize_window_to_full_screen
fi
}
main