mirror of
https://github.com/zdharma-continuum/zconvey.git
synced 2026-09-10 07:06:21 -04:00
101 lines
3 KiB
Bash
101 lines
3 KiB
Bash
setopt localoptions extendedglob clobber
|
|
integer idx is_locked counter=0
|
|
local name busyfile busywith
|
|
|
|
__zconvey_usage_zc-all() {
|
|
__zconvey_pinfo2 "Sends command to all unbusy sessions (also busy when -f passed)"
|
|
__zconvey_pinfo "Usage: zc-all [-h|--help] [-f|--force] [-a|--ask] [-q|--quiet] [-v|--verbose] COMMAND ARGUMENT ..."
|
|
print -- "-h/--help - this message"
|
|
print -- "-q/--quiet - don't output status messages"
|
|
print -- "-v/--verbose - output more status messages"
|
|
print -- "-a/--ask - ask for command (if not provided)"
|
|
print -- "-f/--force - send also to busy sessions; command can time out"
|
|
}
|
|
|
|
local -A opthash
|
|
zparseopts -D -A opthash h -help q -quiet v -verbose f -force a -ask || { __zconvey_usage_zc-all; return 1; }
|
|
|
|
integer verbose=0 quiet=0 force=0 ask=0
|
|
|
|
# Help
|
|
(( ${+opthash[-h]} + ${+opthash[--help]} )) && { __zconvey_usage_zc-all; return 0; }
|
|
|
|
# ASK (requests command and/or ID)
|
|
(( ask = ${+opthash[-a]} + ${+opthash[--ask]} ))
|
|
if [ "$ask" = "0" ]; then
|
|
local ask_setting
|
|
zstyle -b ":plugin:zconvey" ask ask_setting || ask_setting="no"
|
|
[ "$ask_setting" = "yes" ] && ask=1 || ask=0
|
|
fi
|
|
|
|
# VERBOSE, QUIET, FORCE
|
|
(( verbose = ${+opthash[-v]} + ${+opthash[--verbose]} ))
|
|
(( quiet = ${+opthash[-q]} + ${+opthash[--quiet]} ))
|
|
(( force = ${+opthash[-f]} + ${+opthash[--force]} ))
|
|
|
|
local -a args
|
|
args=( "${(q)@}" )
|
|
|
|
local cmd="${args[*]}"
|
|
cmd="${cmd//\\;/;}"
|
|
cmd="${cmd//\\|/|}"
|
|
cmd="${cmd//\\&/&}"
|
|
cmd="${cmd##[[:space:]]#}"
|
|
cmd="${cmd%%[[:space:]]#}"
|
|
|
|
# Resupply missing input if requested
|
|
if (( $ask )); then
|
|
# Supply command?
|
|
if [[ -z "$cmd" ]]; then
|
|
vared -cp "Enter command to send: " cmd
|
|
cmd="${cmd##[[:space:]]#}"
|
|
cmd="${cmd%%[[:space:]]#}"
|
|
if [ -z "$cmd" ]; then
|
|
__zconvey_pinfo "No command enterred, exiting"
|
|
return 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$cmd" ]; then
|
|
__zconvey_pinfo "No command provided, aborting"
|
|
return 1
|
|
fi
|
|
|
|
for (( idx = 1; idx <= 100; idx ++ )); do
|
|
name=""
|
|
busywith=""
|
|
is_locked=0
|
|
|
|
__zconvey_is_session_active "$idx" && is_locked=1 || is_locked=0
|
|
|
|
if (( is_locked )); then
|
|
busyfile="$ZCONVEY_OTHER_DIR/${idx}.busy"
|
|
if [[ -e "$busyfile" && "$idx" != "$ZCONVEY_ID" ]]; then
|
|
busywith="\033[1;33m$(<$busyfile)\033[0m"
|
|
|
|
__zconvey_get_name_of_id "$idx"
|
|
if (( force )); then
|
|
counter+=1
|
|
(( quiet )) || print "\033[1;35mSending to busy\033[0m session $idx (name: $REPLY, busy with: $busywith)"
|
|
zc -qi "$idx" -r "${cmd[@]}"
|
|
else
|
|
(( quiet )) || print "Session $idx (name: $REPLY) busy ($busywith)"
|
|
fi
|
|
elif [[ "$idx" != "$ZCONVEY_ID" ]]; then
|
|
counter+=1
|
|
if (( verbose )); then
|
|
zc -i "$idx" -r "${cmd[@]}"
|
|
else
|
|
zc -qi "$idx" -r "${cmd[@]}"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
(( quiet )) || __zconvey_pinfo "Sent command to $counter other sessions"
|
|
|
|
return 0
|
|
|
|
# vim:ft=zsh
|