Add script/binding for spawning alacritty in CWD of another focused instance
This commit is contained in:
parent
724bdf6f2d
commit
d623f6c8ab
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue