Fix control mode error and update regression tests.

This commit is contained in:
Nicholas Marriott
2026-07-15 11:05:15 +01:00
parent 66e6b2e1c3
commit 5d2b6542b6
4 changed files with 41 additions and 17 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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)

View File

@@ -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 <<EOF >$TMP
cat <<EOF >"$TMP"
if 'true' 'wibble wobble'
EOF
$TMUX -f$TMP -C new <<EOF >$OUT
$TMUX -f"$TMP" -C new <<EOF >"$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 <<EOF >$TMP
cat <<EOF >"$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