summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorJoe Wilm <joe@jwilm.com>2017-04-26 10:38:30 -0700
committerJoe Wilm <jwilm@users.noreply.github.com>2017-05-01 08:36:09 -0700
commitac2a1ece9e30d8253c40bf2f1b44626292ea4f4d (patch)
tree8c542e69e7c9c97f0c8e04c0874f05bef5b2f24b /scripts
parent574586045f08307b310983ed713972d0b6a45c30 (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.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/spawn-alacritty-cwd44
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