Files
dotfiles/dotfiles/lib/functions/zrw
2026-04-26 13:43:54 -07:00

60 lines
1.4 KiB
Bash

#!/usr/bin/env sh
function _zrw_kdl_quote {
printf '"'
printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g'
printf '"'
}
function _zrw_layout_string {
command="$1"
shift
printf 'layout {\n'
printf ' pane command='
_zrw_kdl_quote "$command"
printf ' name='
_zrw_kdl_quote "${ZRW_NAME:-$(basename -- "$command")}"
printf ' cwd='
_zrw_kdl_quote "$PWD"
if [ "$#" -eq 0 ]; then
printf '\n'
else
printf ' {\n'
printf ' args'
for arg in "$@"; do
printf ' '
_zrw_kdl_quote "$arg"
done
printf '\n'
printf ' }\n'
fi
printf '}\n'
}
function _zrw_session_name {
command_name="$(basename -- "$1")"
base="$(basename -- "$PWD")"
ck="$(printf '%s' "$PWD" | cksum | awk '{print $1}')"
session="${ZRW_SESSION:-${command_name}-${base}-${ck}}"
printf '%s' "$session" | tr -cs 'A-Za-z0-9_-' '-' | sed 's/^-//;s/-$//'
}
function zrw {
if [ "$#" -eq 0 ]; then
echo "Usage: zrw COMMAND [ARG ...]" >&2
return 2
fi
tab_name="${ZRW_NAME:-$(basename -- "$1")}"
if [ -n "$ZELLIJ" ]; then
zellij action new-tab --cwd "$PWD" --name "$tab_name" -- "$@"
else
session="$(_zrw_session_name "$1")"
layout="$(_zrw_layout_string "$@")"
zellij --session "$session" --layout-string "$layout"
fi
}
zrw "$@"