diff --git a/README.md b/README.md index acd2619..0b31b3d 100644 --- a/README.md +++ b/README.md @@ -17,3 +17,4 @@ * [BitShade](./bitshade.sh): a steganographic tool for hiding any data file inside a PNG image * [BlueShift](./blueshift.sh): a high-density steganographic tool for hiding any data file inside a PNG image * [abmux](./abmux.sh): a simple terminal session switcher on top of abduco, fzf and expect +* [dmux](./dmux.sh): a simple terminal session switcher on top of dtach and fzf diff --git a/dmux.sh b/dmux.sh new file mode 100755 index 0000000..67a9ca8 --- /dev/null +++ b/dmux.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# dmux: a simple terminal session switcher on top of dtach and fzf +# Created by Luxferre in 2026, released into the public domain + +SDIR="$HOME/.dtsess" +SPFILE="$SDIR/.list" +mkdir -p "$SDIR" +touch "$SPFILE" +if [ -z "$(ls -1 "$SDIR")" ]; then + cat "$SPFILE" | while read -r sess; do + dtach -n "$SDIR/$sess" $SHELL + done +fi +FTR='Select a session or create a new one' +while true; do + ls -1 "$SDIR" > "$SPFILE" + slist="$(nl -nln -w1 -s' - ' "$SPFILE")" + sname="$(printf '%s\nNew\nQuit\n' "$slist" | grep . | fzf --tac --footer="$FTR")" + [ "$sname" = 'Quit' ] && break + [ "$sname" = 'New' ] && read -r -p 'New session name: ' sname + sname="$(echo "$sname" | sed -E 's/^[0-9]+\ -\ //')" + [ -n "$sname" ] && printf '\033[0m' && dtach -A "$SDIR/$sname" $SHELL +done