diff --git a/ts-control b/ts-control index faf5766..3ce6769 100755 --- a/ts-control +++ b/ts-control @@ -10,15 +10,8 @@ back message message-user" -action="$1" -if [ -n "$1" ]; then - shift -else - action=$(echo "$actions" | $DMENU) -fi - _ts_control_get_entity() { - entity=$(teamspeak-query-lib "$1s" | $DMENU) + entity=$(_ts_control_single_or_dmenu "$(teamspeak-query-lib "$1s")" "$2") if [ -z "$entity" ]; then exit 1 fi @@ -26,39 +19,59 @@ _ts_control_get_entity() { } _ts_control_get_message() { - message=$(printf "\n" | $DMENU -p "message") + if [ -n "$1" ]; + then + message="$1" + else + message=$(printf "\n" | $DMENU -p "message") + fi + if [ -z "$message" ]; then exit 1 fi + echo "$message" } _ts_control_move_self() { - channel=$(_ts_control_get_entity channel) + channel=$(_ts_control_get_entity channel "$1" "$2") teamspeak-query-lib move --strict-channel "$channel" } _ts_control_fetch() { - target=$(_ts_control_get_entity "$1") + target=$(_ts_control_get_entity "$1" "$2") teamspeak-query-lib fetch "--strict-$1" "--$1" "$target" } +_ts_control_single_or_dmenu() { + options=$(echo "$1" | grep "$2") + count=$(echo "$options" | wc -l) + if [ "$count" -eq 1 ]; then + echo "$options" + else + echo "$options" | $DMENU + fi +} + +# Add '$' to $1 to add 'End of line' to the regex for grep +action=$(_ts_control_single_or_dmenu "$actions" "$1$") + case $action in "quick") action=$($DMENU < "$XDG_CONFIG_HOME/ts-control-quick") if [ -z "$action" ]; then exit 1 fi - eval "teamspeak-query-lib $action" + eval "$0 $action" ;; "move") - _ts_control_move_self + _ts_control_move_self "$2" ;; "fetch-client") - _ts_control_fetch client + _ts_control_fetch client "$2" ;; "fetch-channel") - _ts_control_fetch channel + _ts_control_fetch channel "$2" ;; "not away") teamspeak-query-lib move "Not Away From Keyboard" @@ -72,20 +85,16 @@ case $action in ;; "back") teamspeak-query-lib update --back - if [ -n "$1" ]; then - teamspeak-query-lib move "$1" - else - _ts_control_move_self "$1" - fi + _ts_control_move_self "$2" teamspeak-query-lib update --microphone=true --speakers=true ;; "message") - message=$(_ts_control_get_message) + message=$(_ts_control_get_message "$2") teamspeak-query-lib message "$message" ;; "message-user") - message=$(_ts_control_get_message) - user=$(_ts_control_get_entity client) + user=$(_ts_control_get_entity client "$2") + message=$(_ts_control_get_message "$3") teamspeak-query-lib message --strict-client --client "$user" "$message" ;; esac