diff --git a/cmd-invoke.c b/cmd-invoke.c index ce3759a2d..d47649bc0 100644 --- a/cmd-invoke.c +++ b/cmd-invoke.c @@ -337,11 +337,12 @@ static void cmd_invoke_error(struct cmdq_item *item, struct cmd_invoke_state *is, struct cmd_parse_node *node, const char *cause) { + struct client *c = cmdq_get_client(item); struct cmd_parse_tree *tree = cmd_invoke_tree(is); const char *file = cmd_parse_file(tree); u_int line = cmd_parse_node_line(node); - if (cmdq_get_client(item) != NULL) { + if (c != NULL && (~c->flags & CLIENT_CONTROL || file == NULL)) { cmdq_error(item, "%s", cause); return; } @@ -499,7 +500,9 @@ cmd_invoke_fire(struct cmdq_item *item, struct cmd_invoke_state *is) struct cmd_parse_tree *tree, *alias; struct cmdq_item *new_item, *next; struct cmdq_state *state; + struct client *c; struct cmd *cmd; + const char *file; char *cause; int r; @@ -547,7 +550,10 @@ cmd_invoke_fire(struct cmdq_item *item, struct cmd_invoke_state *is) break; } if (r == -1) { - if (cmdq_get_client(item) != NULL) + c = cmdq_get_client(item); + file = cmd_parse_file(tree); + if (c != NULL && + (~c->flags & CLIENT_CONTROL || file == NULL)) cmdq_error(item, "%s", cause); else cfg_add_cause("%s", cause); diff --git a/regress/cmd-parse-print.sh b/regress/cmd-parse-print.sh index 8d46212f5..3a35d7004 100755 --- a/regress/cmd-parse-print.sh +++ b/regress/cmd-parse-print.sh @@ -15,7 +15,9 @@ PATH=/bin:/usr/bin TERM=screen [ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) -TMUX="$TEST_TMUX -Ltest -f/dev/null" +SOCKET=$(mktemp -u testXXXXXX) +TMUX="$TEST_TMUX -L$SOCKET -f/dev/null" +TMUX2= $TMUX kill-server 2>/dev/null TMP=$(mktemp) @@ -23,7 +25,7 @@ CONF=$(mktemp) EXP=$(mktemp) RT1=$(mktemp) RT2=$(mktemp) -trap "rm -f $TMP $CONF $EXP $RT1 $RT2" 0 1 15 +trap "[ -n \"\$TMUX\" ] && \$TMUX kill-server 2>/dev/null; [ -n \"\$TMUX2\" ] && \$TMUX2 kill-server 2>/dev/null; rm -f $TMP $CONF $EXP $RT1 $RT2" 0 1 15 cat <<'EOF' >$CONF bind -T parsetest a display-message hello @@ -82,6 +84,7 @@ $TMUX -f/dev/null start \; new-session -d 2>/dev/null || exit 1 $TMUX source-file $CONF || exit 1 $TMUX set -g default-client-command 'display-message "hi there"' || exit 1 +set +x { $TMUX list-keys -T parsetest echo "--- options ---" @@ -89,6 +92,7 @@ $TMUX set -g default-client-command 'display-message "hi there"' || exit 1 echo "--- multiline ---" $TMUX list-keys -p -T parsetest } >$TMP 2>&1 || exit 1 +set -x cmp -s $TMP $EXP || { echo "cmd-parse-print: output differs from expected" >&2 @@ -100,10 +104,12 @@ cmp -s $TMP $EXP || { # identical key list. $TMUX list-keys -T parsetest >$RT1 || exit 1 $TMUX kill-server 2>/dev/null -$TMUX -f/dev/null start \; new-session -d 2>/dev/null || exit 1 -$TMUX source-file $RT1 || exit 1 -$TMUX list-keys -T parsetest >$RT2 || exit 1 -$TMUX kill-server 2>/dev/null +SOCKET2=$(mktemp -u testXXXXXX) +TMUX2="$TEST_TMUX -L$SOCKET2 -f/dev/null" +$TMUX2 -f/dev/null start \; new-session -d 2>/dev/null || exit 1 +$TMUX2 source-file $RT1 || exit 1 +$TMUX2 list-keys -T parsetest >$RT2 || exit 1 +$TMUX2 kill-server 2>/dev/null cmp -s $RT1 $RT2 || { echo "cmd-parse-print: default form does not round-trip" >&2 diff --git a/regress/control-client-exit.sh b/regress/control-client-exit.sh index ac08db5cc..9bbe727f5 100644 --- a/regress/control-client-exit.sh +++ b/regress/control-client-exit.sh @@ -19,7 +19,8 @@ PATH=/bin:/usr/bin TERM=screen [ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) -TMUX="$TEST_TMUX -Ltest" +SOCKET=$(mktemp -u testXXXXXX) +TMUX="$TEST_TMUX -L$SOCKET" $TMUX kill-server 2>/dev/null DIR=$(mktemp -d) diff --git a/regress/if-shell-error.sh b/regress/if-shell-error.sh index 3b2dac753..ef9afdd41 100644 --- a/regress/if-shell-error.sh +++ b/regress/if-shell-error.sh @@ -7,24 +7,35 @@ PATH=/bin:/usr/bin TERM=screen [ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) -TMUX="$TEST_TMUX -LtestA$$ -f/dev/null" +SOCKET=$(mktemp -u testAXXXXXX) +TMUX="$TEST_TMUX -L$SOCKET -f/dev/null" $TMUX kill-server 2>/dev/null TMP=$(mktemp) OUT=$(mktemp) -trap "rm -f $TMP $OUT" 0 1 15 +cleanup() { + $TMUX kill-server 2>/dev/null + rm -f "$TMP" "$OUT" +} +trap cleanup 0 1 15 -cat <$TMP +cat <"$TMP" if 'true' 'wibble wobble' EOF -$TMUX -f$TMP -C new <$OUT +$TMUX -f"$TMP" -C new <"$OUT" EOF -grep -q "^%config-error $TMP:1: $TMP:1: unknown command: wibble$" $OUT +if ! grep -q "^%config-error $TMP:1: unknown command: wibble$" "$OUT"; then + cat "$OUT" >&2 + exit 1 +fi -cat <$TMP +cat <"$TMP" wibble wobble EOF -echo "source $TMP" | $TMUX -C new >$OUT -grep -q "^%config-error $TMP:1: unknown command: wibble$" $OUT +echo "source $TMP" | $TMUX -C new >"$OUT" +if ! grep -q "^%config-error $TMP:1: unknown command: wibble$" "$OUT"; then + cat "$OUT" >&2 + exit 1 +fi