Skip to content

Instantly share code, notes, and snippets.

@kabeersvohra
Last active May 5, 2021 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kabeersvohra/cf3d18275358e9a368138e65e15e6fff to your computer and use it in GitHub Desktop.
Save kabeersvohra/cf3d18275358e9a368138e65e15e6fff to your computer and use it in GitHub Desktop.
Bash script for i3 to run terminal in the same working directory as active window running tmux
#!/bin/bash
# i3 thread: https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/?answer=152#post-id-152
# based on https://gist.github.com/viking/5851049 and https://gist.github.com/TiddoLangerak/c61e1e48df91192f9554
CWD=''
CMD='/usr/bin/x-terminal-emulator'
# 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 first child process (shell, vim, etc)
if [ -n "$PID" ]; then
TREE=$(pstree -lpA $PID | head -n 1)
PROCESS=$(echo $TREE | awk -F'---' '{print $NF}')
if [[ $PROCESS == tmux* ]];
then
PID=$(tmux list-panes -F '#{pane_active} #{pane_pid}' | cut -d " " -f 2)
fi
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment