Add script/binding for spawning alacritty in CWD of another focused instance

This commit is contained in:
Adam Goldsmith 2018-11-10 02:29:06 -05:00
parent 724bdf6f2d
commit d623f6c8ab
2 changed files with 45 additions and 1 deletions

View File

@ -29,7 +29,7 @@ set $mon2 LVDS-0
set $config_dir /home/adam/.config/i3
## Keybindings! ##
bindsym $mod+Return exec alacritty # start a terminal
bindsym $mod+Return exec ~/.config/i3/spawn-alacritty-cwd # start a terminal
bindsym $mod+e exec emacsclient -c -n # start emacs
bindsym $mod+Shift+e exec emacsclient -ce '(nm)' # start NeverMore

44
.config/i3/spawn-alacritty-cwd Executable file
View File

@ -0,0 +1,44 @@
#!/bin/bash
# Spawn a new instance of Alacritty using the CWD of the currently focused
# Alacritty process.
#
# This is useful in environment like i3 where terminals are opened using a
# key-combination while another terminal is already focused.
#
# If the script is run with a non-Alacritty window in focus or a non-compliant
# version of Alacritty, the script will exit with code 1. This makes it possible
# to use the script like
#
# spawn-alacritty-cwd || alacritty
#
ACTIVE_WINDOW=$(xdotool getactivewindow)
ACTIVE_WM_CLASS=$(xprop -id $ACTIVE_WINDOW | grep WM_CLASS)
if [[ $ACTIVE_WM_CLASS == *"Alacritty"* ]]
then
# Get PID. If _NET_WM_PID isn't set, bail.
PID=$(xprop -id $ACTIVE_WINDOW | grep _NET_WM_PID | grep -oP "\d+")
if [[ "$PID" == "" ]]
then
exit 1
fi
# Get first child of terminal
CHILD_PID=$(pgrep -P $PID)
if [[ "$PID" == "" ]]
then
exit 1
fi
# Get current directory of child. The first child should be the shell.
pushd "/proc/${CHILD_PID}/cwd"
SHELL_CWD=$(pwd -P)
popd
# Start alacritty with the working directory
alacritty --working-directory $SHELL_CWD
else
alacritty
fi