60 lines
1.4 KiB
Bash
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 "$@"
|