diff options
author | Joe Wilm <joe@jwilm.com> | 2017-04-26 10:38:30 -0700 |
---|---|---|
committer | Joe Wilm <jwilm@users.noreply.github.com> | 2017-05-01 08:36:09 -0700 |
commit | ac2a1ece9e30d8253c40bf2f1b44626292ea4f4d (patch) | |
tree | 8c542e69e7c9c97f0c8e04c0874f05bef5b2f24b | |
parent | 574586045f08307b310983ed713972d0b6a45c30 (diff) |
Add script for spawning alacritty in CWD
The script uses the recently added _NET_WM_PID window property for
finding the program running in Alacritty, fetching its working
directory, and spawning a new Alacritty using that directory.
-rwxr-xr-x | scripts/spawn-alacritty-cwd | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/scripts/spawn-alacritty-cwd b/scripts/spawn-alacritty-cwd new file mode 100755 index 00000000..8c69e028 --- /dev/null +++ b/scripts/spawn-alacritty-cwd @@ -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 + exit 1 +fi |