diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-08-23 13:36:06 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-08-23 13:36:06 +0900 |
| commit | 6baef1437fcf40b1d51c5255af78ab297d361d2c (patch) | |
| tree | c3c257e026ec3fb32b787839f81d8af0c2e6c7ce /mac/.local/bin/sd | |
| parent | 07d294425a98ee5d1e22d03e2b24ae2c76e487c0 (diff) | |
updates
Diffstat (limited to 'mac/.local/bin/sd')
| -rwxr-xr-x | mac/.local/bin/sd | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/mac/.local/bin/sd b/mac/.local/bin/sd new file mode 100755 index 0000000..8c6f6a4 --- /dev/null +++ b/mac/.local/bin/sd @@ -0,0 +1,22 @@ +#!/bin/sh + +# Open a terminal window in the same directory as the currently active window. + +windowPID=$(xprop -id "$(xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p") +PIDlist=$(pstree -lpATna "$windowPID" | 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 ' ')" 2>/dev/null) + 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; } +setsid -f "$TERMINAL" |
