Skip to content

Instantly share code, notes, and snippets.

@viking
Last active March 25, 2024 16:25
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save viking/5851049 to your computer and use it in GitHub Desktop.
Save viking/5851049 to your computer and use it in GitHub Desktop.
Bash script for i3 to run a terminal in the same working directory as the current focused application
#!/bin/bash
# i3 thread: https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/?answer=152#post-id-152
CMD=xterm
CWD=''
# Get window ID
ID=$(xdpyinfo | grep focus | cut -f4 -d " ")
# Get PID of process whose window this is
PID=$(xprop -id $ID | grep -m 1 PID | cut -d " " -f 3)
# Get last child process (shell, vim, etc)
if [ -n "$PID" ]; then
TREE=$(pstree -lpA $PID | tail -n 1)
PID=$(echo $TREE | awk -F'---' '{print $NF}' | sed -re 's/[^0-9]//g')
# If we find the working directory, run the command in that directory
if [ -e "/proc/$PID/cwd" ]; then
CWD=$(readlink /proc/$PID/cwd)
fi
fi
if [ -n "$CWD" ]; then
cd $CWD && $CMD
else
$CMD
fi
@nsbgn
Copy link

nsbgn commented Jan 11, 2022

Be aware that you can use the process' tgpid to find the foreground process of the terminal. This is more reliable and avoids having to look through the process' children. It's what I did in https://github.com/slakkenhuis/scripts/blob/master/xcwd.sh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment