mirror of
https://github.com/LukeSmithxyz/voidrice.git
synced 2026-01-30 09:48:11 +01:00
The current way of finding the PID of the active window is quite fragile due to the extremely loose regex in place. Since xdotool is already a dependency of multiple other scripts I'd recommend just using that.
22 lines
920 B
Bash
Executable File
22 lines
920 B
Bash
Executable File
#!/bin/sh
|
|
|
|
# Open a terminal window in the same directory as the currently active window.
|
|
|
|
PIDlist=$(pstree -lpATna "$(xdotool getactivewindow getwindowpid)" | sed -En 's/.*,([0-9]+).*/\1/p' | tac)
|
|
for PID in $PIDlist; do
|
|
cmdline=$(ps -o args= -p "$PID")
|
|
process_group_leader=$(ps -o comm= -p "$(ps -o pgid= -p "$PID" | tr -d ' ')")
|
|
cwd=$(readlink /proc/"$PID"/cwd)
|
|
# zsh and lf won't be ignored even if it shows ~ or /
|
|
case "$cmdline" in
|
|
'lf -server') continue ;;
|
|
"${SHELL##*/}"|'lf'|'lf '*) break ;;
|
|
esac
|
|
# git (and its sub-processes) will show the root of a repository instead of the actual cwd, so they're ignored
|
|
[ "$process_group_leader" = 'git' ] || [ ! -d "$cwd" ] && continue
|
|
# This is to ignore programs that show ~ or / instead of the actual working directory
|
|
[ "$cwd" != "$HOME" ] && [ "$cwd" != '/' ] && break
|
|
done
|
|
[ "$PWD" != "$cwd" ] && [ -d "$cwd" ] && { cd "$cwd" || exit 1; }
|
|
"$TERMINAL"
|