Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strange character sequences (ANSI escape sequences?) leaking into shell prompt when starting/attaching Tmux #2275

Open
3 tasks done
primeos-work opened this issue Sep 25, 2024 · 23 comments

Comments

@primeos-work
Copy link

primeos-work commented Sep 25, 2024

Prerequisites

  • Write a descriptive title.
  • Make sure you are able to repro it on the latest version
  • Search the existing issues.

Steps to reproduce

Connect to a Linux/Unix host via ssh and attach to a tmux session. Strangely the results seem to differ based on the target OS, e.g.:

  • On an EoL CentOS 7 and a Fedora Linux 40 system I reliably get 61;6;7;21;22;23;24;28;32;42c (basically every time)
  • On a Debian 12 host I get 0;10;1c but only on every third/fourth attempt or so

Expected behavior

I can attach to my Tmux session and it looks exactly as I left it.
This usually means that the last line of the active Tmux window/pane contains a empty shell prompt like this:

[michael@groot ~]$

Actual behavior

I get some additional random characters ("garbage") behind the prompt, e.g.:

[michael@groot ~]$ 61;6;7;21;22;23;24;28;32;42c

Error details

No response

Environment data

I am using the Windows Terminal and it doesn't matter if I uses the "Windows PowerShell", "Command Prompt", or "Git Bash". When I use "Git Bash" via "Windows Terminal" everything works as expected with /usr/bin/ssh (OpenSSH_9.7p1, OpenSSL 3.2.1 30 Jan 2024) but not with /c/Program\ Files/OpenSSH/ssh (OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2) which is why I came to the conclusion that this seems to be a OpenSSH for Windows bug. The second indication that this seems to be an OpenSSH for Windows bug is that I didn't get those unexpected character sequence with SSH_TERM_CONHOST_PARSER=0 (but that also makes the rendering much much slower and I get significant visual glitches like a green background color (probably due to the status line background color from tmux)).

Anyway, here is the desired output but I don't expect it to be relevant in this case:

Name                           Value
----                           -----
PSVersion                      5.1.19041.4894
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.4894
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Version

OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2

Visuals

No response

@primeos-work
Copy link
Author

primeos-work commented Sep 25, 2024

Please also note that there are already a lot of related issues/reports but not in this repository.
I tried the following workarounds/solutions but none of them worked for me:

  • set -sg escape-time 1 in ~/.tmux.conf
  • I don't use any Tmux plugins (so I'm, e.g., not affected by tmux-sensible overriding escape-time)

Some links to the reports that I found:

Other relevant links:

So my conclusions are the following:

  • This affects lots of people and the real source of the issue is still unknown
  • Only users on Windows seem to be affected by it
  • Weirdly the set -sg escape-time 1 workaround seems to resolve the Tmux issues for most users but not for me

@yoctozepto
Copy link

yoctozepto commented Sep 26, 2024

On OpenSSH_for_Windows_9.8 Win32-OpenSSH-GitHubp1, LibreSSL 3.8.2 as built from PowerShell/openssh-portable@414d853 it happens almost every time tmux is run and no workaround helps. But it happens only in Windows Terminal. The legacy command host is not affected so it's most likely an issue of the Windows Terminal. However, it also does not happen with WSL2-based ssh even though it's still in Windows Terminal.

@primeos-work
Copy link
Author

primeos-work commented Sep 27, 2024

Thanks for the additional data @yoctozepto! :)

I think it's the combination of the terminal and OpenSSH for Windows but that the actual bug is in OpenSSH for Windows and the terminal only matters as it will affect the response to tmux's ESC [ c (\033[c) "Request terminal attributes" (if https://serverfault.com/questions/1130064/why-is-the-windows-11-terminal-pushing-escape-sequences-to-tmux is correct).

I did run two additional tests yesterday:

To be sure I did another test today via Ubuntu 24.04 LTS in WSL 2: I installed and started openssh-server in the Ubuntu VM/container, started a Tmux session and then did compare a "direct" terminal with an SSH connection:

  • When I open a "direct" terminal to the Ubuntu system by selecting the "Ubuntu 24.04 LTS" profile on Windows Terminal I can attach to the Tmux session without triggering the bug (I didn't manage to get any "strange characters" even once)
  • When I use the "Windows PowerShell" profile and OpenSSH for Windows (ssh $USER@localhost) I consistently get 61;6;7;14;21;22;23;24;28;32;42c0;10;1c every time.
    • With $env:SSH_TERM_CONHOST_PARSER = '0'; ssh localhost, the bug/problem goes away completely (although I get lot's of visual glitches / rendering issues instead...).

PS: I can also trigger the bug with echo instead of tmux like this (or echo -e '\e[c', etc.):

mweiss@groot ~ $ echo -e '\033[c'

mweiss@groot ~ $ 1;2c

@yoctozepto
Copy link

OK, so it truly is the Win32-OpenSSH - that is the common denominator here. It needs certain conditions to happen but it does not happen without it.

@mgkuhn
Copy link

mgkuhn commented Nov 6, 2024

Sounds like a tmux bug to me. It is normal and expected behaviour that sending to a VT100-style terminal a device-attributes request of the form ESC [ c or ESC [ 0 c will cause the terminal to respond with a sequence of the form ESC [ ? number ; number ; ... ; number c.

If an application like tmux sends such a request, it has to wait for and parse the entire response, and not cause it to echo back to the terminal for the user to see. This waiting and parsing by tmux doesn't seem to happen correctly here. The question is why tmux doesn't swallow the response.

On my old Linux xterm, I get back

ESC [ ?64;1;2;6;9;15;16;17;18;21;22;28c

On Windows Terminal on current Windows 11, I get instead

ESC [ ?61;6;7;14;21;22;23;24;28;32;42c

Different numbers, but still correct syntax that tmux should swallow.

I don't think this is anything that OpenSSH gets involved in. Instead, I suspect that the VT100 terminal emulation built into Windows Terminal (or ConPTY?) is returning something that tmux didn't expect, even though it looks syntactically correct to me. Check in the source code of tmux the state machine that is meant to process the reply to that request.

@mgkuhn
Copy link

mgkuhn commented Nov 6, 2024

PS: I can also trigger the bug with echo instead of tmux like this (or echo -e '\e[c', etc.)

@primeos-work That is expected behaviour and not a bug. (Or you could say it's a bug in your use of the echo command ... ;-) Your echo command asked the terminal to reply to a device-attributes request and then finished without reading the reply. So the reply now goes to the shell, which didn't expect it and treats it like user keyboard entry.

@yoctozepto
Copy link

Since the issue seems random, could it be that the speed at which these characters are produced/transferred is causing it? As in, tmux does not wait long enough for the consumption.

@mgkuhn
Copy link

mgkuhn commented Nov 7, 2024

Since the issue seems random, could it be that the speed at which these characters are produced/transferred is causing it? As in, tmux does not wait long enough for the consumption.

Yes, that seems likely, and would explain reports that increasing the tmux configuration parameter escape-time alleviates the problem for many users.

Looking at tmux/tty-keys.c, the unit for escape-time is milliseconds and looking at tmux/options-table.c the default is currently 10 ms (in tmux-3.5, down from previously 500 ms in tmux-3.4 after this commit by @nicm). I would increase this to at least 100, or five times the top-quartile ping time to the server, whichever is higher.

Looking at Nagle's algorithm, I suspect escape-time should be a small multiple of the round-trip time, as TCP may wait with sending the rest of a device-attribute response until it has received the TCP ACK for the start of the response, in case the response is split across two IP packets.

There may be a conflict of interest with vi users who may have to wait for escape-time for their ESC key presses to be passed through to their favourite editor. One solution is perhaps to temporarily increase that wait time back to 500 ms after tmux has sent out its device-attributes request?

@mgkuhn
Copy link

mgkuhn commented Nov 7, 2024

One thing Windows Terminal and ConPTY folks might want to check is if their device-attributes response is really being sent out via a single write() system call (as ESC sequences always should be). If not, splitting such a response across several system calls might risk substantially increasing the chances that the response will end up spread over several IP packets that do not arrive within the 10 ms patience time that tmux-3.5 allows before it concludes that this might have been a manual press of the ESC key and not a response sequence.

@mgkuhn
Copy link

mgkuhn commented Nov 7, 2024

Looking in Windows Terminal at terminal/src/terminal/adaptDispatch.cpp:AdaptDispatch::DeviceAttributes() and _ReturnCsiResponse we can see where the device-attributes response of Windows Terminal comes from. It is one wide string L"?61;4;6;7;14;21;22;23;24;28;32;42c", except for the initial ESC [, which all may have to go through a UTF-8 encoder, and thus might end up in separate write() system calls and separate TCP packets?

@nicm
Copy link

nicm commented Nov 7, 2024

Maybe try something like this, although last time I was asked about anything like this it turned out the terminal was sending the response twice, so you would want to be sure that is not happening (tmux logs or strace tmux is the easiest way):

--- tty-keys.c  4 Oct 2024 14:55:17 -0000       1.182
+++ tty-keys.c  7 Nov 2024 14:44:35 -0000
@@ -917,9 +917,13 @@ partial_key:
        }

        /* Get the time period. */
-       delay = options_get_number(global_options, "escape-time");
-       if (delay == 0)
-               delay = 1;
+       if ((tty->flags & TTY_ALL_REQUEST_FLAGS) != TTY_ALL_REQUEST_FLAGS)
+               delay = 500;
+       else {
+               delay = options_get_number(global_options, "escape-time");
+               if (delay == 0)
+                       delay = 1;
+       }
        tv.tv_sec = delay / 1000;
        tv.tv_usec = (delay % 1000) * 1000L;

@mgkuhn
Copy link

mgkuhn commented Nov 7, 2024

@nicm Thanks for the suggestion. I would probably modify it to more something like

delay = options_get_number(global_options, "escape-time");
if (delay == 0)
        delay = 1;
if (delay < 500 && (tty->flags & TTY_ALL_REQUEST_FLAGS) != TTY_ALL_REQUEST_FLAGS)
        delay = 500;

such that you don't override an even higher user preference for that delay.

@yoctozepto
Copy link

I do still wonder, however, why this does not trigger when WSL2 SSH is run in Windows Terminal. Maybe only then do the bytes get sent in different packets or buffered too long? Could it have to do with Windows networking? Especially how it runs (or doesn't run) the Nagle's algorithm?

@mgkuhn
Copy link

mgkuhn commented Nov 7, 2024

@yoctozepto If you run ssh in WSL2, you use the Linux-kernel implementation of TCP, which does all kinds of very clever things, like the tcp_autocorking function that “tries to coalesce small writes (from consecutive write(2) and sendmsg(2) calls) as much as possible, in order to decrease the total number of sent packets” (see man tcp). May be that helps the entire Windows Terminal device-attribute response to stay in one packet?

I can't find anything similar mentioned among the Windows TCP features.

(If you are really curious, try disabling TCP autocorking in WSL2 with echo 0 >/proc/sys/net/ipv4/tcp_autocorking and see if this makes the problem more likely.)

@yoctozepto
Copy link

@yoctozepto If you run ssh in WSL2, you use the Linux-kernel implementation of TCP, which does all kinds of very clever things,

Yup, this is why I am suggesting it might be the Windows vs Linux networking subsystem that causes the discrepancy.

like the tcp_autocorking function that “tries to coalesce small writes (from consecutive write(2) and sendmsg(2) calls) as much as possible, in order to decrease the total number of sent packets” (see man tcp). May be that helps the entire Windows Terminal device-attribute response to stay in one packet?

I can't find anything similar mentioned among the Windows TCP features.

(If you are really curious, try disabling TCP autocorking in WSL2 with echo 0 >/proc/sys/net/ipv4/tcp_autocorking and see if this makes the problem more likely.)

Checked - but it has no effect on the outcome.

@primeos-work
Copy link
Author

@mgkuhn first of all: Huge thanks for your awesome, detailed, and super helpful and interesting analysis!
I already learned a lot from it ❤️

Sounds like a tmux bug to me.

That thought makes sense given your analysis. However, given the age and spread of Tmux combined with the fact that I only experience this bug when I connect from a Windows client (using the Windows Terminal and OpenSSH for Windows) I find it quite unlikely (certainly not impossible though! – it could of course be a bug that only gets triggered from the behavior of Windows Terminal and/or OpenSSH for Windows).

On my old Linux xterm, I get back

That response was just from the test with echo, right? (If you could trigger this bug from a Linux client with Xterm when using Tmux then it might very well be a Tmux bug.)

I don't think this is anything that OpenSSH gets involved in.

I wouldn’t expect this either. I only came to that assumption through testing. I did also perform the following experiments just now:

  • A): Windows -> ssh B -> tmux
  • B): Windows -> ssh A (tmux) -> ssh B -> tmux

And I could only trigger the bug in case A. However, as I was writing this, I realized that this test was flawed as I ran tmux on host A (I start/attach tmux automatically in my bashrc so it was unintentionally). Without tmux on host A the bug was still there – so I guess it only went away in case B because Tmux on host A became the new/nested terminal that replied to the device-attributes request?

It’s probably indeed not related to OpenSSH for Windows then and I apologize for my incorrect experiments / mistakes that lead me to a wrong conclusion. I’m unfortunately out of my depth here… :(

@primeos-work That is expected behaviour and not a bug.

You’re right, the echo command isn’t suitable for testing/reproducing the bug. My bad :o (I probably assumed the shell would swallow/interpret it.)

Since the issue seems random, could it be that the speed at which these characters are produced/transferred is causing it? As in, tmux does not wait long enough for the consumption.

+1, that seems like the best guess then. I initially ruled this out as I tried increasing the escape-time setting for Tmux and it weirdly didn’t make a difference in my case but increasing it to 500 ms fixed it for me just now. I probably either didn’t increase it above 50 ms or the network was so congested that even the 500 ms weren’t enough (the network where I hit this bug is unfortunately indeed super slow at times so I guess that’s also related (the average RTT is currently around 20ms but I had severe input delays and “hickups” in the past – the packet queues are probably way too large :o)… - I didn’t realize this before as I basically always have to SSH through that network).

Looking at Nagle's algorithm, I suspect escape-time should be a small multiple of the round-trip time, as TCP may wait with sending the rest of a device-attribute response until it has received the TCP ACK for the start of the response, in case the response is split across two IP packets.

Agreed, a device-attribute response that is split across 2(+) IP packets seems like a likely cause then. I might have time to test that next week (in the hope that Wireshark makes the analysis relatively straightforward with access to the private SSH key).

There may be a conflict of interest with vi users who may have to wait for escape-time for their ESC key presses to be passed through to their favourite editor.

Indeed, 500 ms is unfortunately way too much for me. And for some reason (perhaps related to this bug) the shell startup inside Tmux also becomes super slow (from the white screen until the shell prompt appears) if I increase the escape-time to 50 ms.

One solution is perhaps to temporarily increase that wait time back to 500 ms after tmux has sent out its device-attributes request?

That might be an acceptable workaround.

One thing Windows Terminal and ConPTY folks might want to check is if their device-attributes response is really being sent out via a single write() system call (as ESC sequences always should be).

+1, that seems like a very good idea to me!

I do still wonder, however, why this does not trigger when WSL2 SSH is run in Windows Terminal. Maybe only then do the bytes get sent in different packets or buffered too long? Could it have to do with Windows networking? Especially how it runs (or doesn't run) the Nagle's algorithm?

Indeed… :o And IIRC I also couldn’t trigger this bug via the Git Bash with Git’s SSH binary (but the terminal and perhaps $TERM are also different with Git Bash). I guess it really does depend on lots of factors, unfortunately… :o But I do hope it is fixable from the side of Windows Terminal by ensuring the response to the device-attributes request is sent using a single syscall (so that it should basically always end up in the same TCP packet).

@yoctozepto If you run ssh in WSL2, you use the Linux-kernel implementation of TCP, which does all kinds of very clever things, like the tcp_autocorking function that “tries to coalesce small writes (from consecutive write(2) and sendmsg(2) calls) as much as possible, in order to decrease the total number of sent packets” (see man tcp). May be that helps the entire Windows Terminal device-attribute response to stay in one packet?

Interesting, that would indeed explain it then! :)

Checked - but it has no effect on the outcome.

Would’ve been too nice… :(
But I do wonder how Windows Terminal connects to the WSL machine – perhaps there’s also another terminal involved in between as a kind of proxy or it’s a serial console that also ends up “bundling” the write() syscalls so that the netstack / TCP autocorking doesn’t really matter anymore (since the "bundling" already happened before)?

@primeos-work
Copy link
Author

My initial plan didn't work out. Wireshark doesn't have support for decrypting encrypted SSH packets/payload yet (https://wiki.wireshark.org/SSH -> https://gitlab.com/wireshark/wireshark/-/issues/16054).

I also tried strace but that didn't really help much either as Tmux reads the input one character at a time.

Then I looked at the Tmux source-code and noticed the log_debug() function that is used in parts of the relevant code and that it can apparently easily be enabled by launching Tmux with the -v option (which makes everything much easier):

 -v            Request verbose logging.  Log messages will be saved into tmux-client-PID.log and tmux-server-PID.log files in the current directory, where PID is the PID of the server or
               client process.  If -v is specified twice, an additional tmux-out-PID.log file is generated with a copy of everything tmux writes to the terminal.

Turns out that those logs already contain enough (hopefully) information to debug the issue. In tmux-server-*.log I get the following when the issue appears:

$ grep input_parse_buffer tmux-server-*.log
1731694819.616979 input_parse_buffer: %0 ground, 32 bytes: ^[[?61;6;7;14;21;22;23;24;28;32;
1731694819.637852 input_parse_buffer: %0 ground, 3 bytes: 42c
1731694819.712193 input_parse_buffer: %0 ground, 20 bytes: mweiss@dunwich ~ $ 6
1731694819.712469 input_parse_buffer: %0 ground, 23 bytes: 1;6;7;14;21;22;23;24;28
1731694819.712742 input_parse_buffer: %0 ground, 7 bytes: ;32;42c
1731694821.774889 input_parse_buffer: %0 ground, 23 bytes: ^C\r\nmweiss@dunwich ~ $
1731694822.149083 input_parse_buffer: %0 ground, 8 bytes: logout\r\n

I still need to have a closer look at the source code but my current assumptions are the following:

The primary device attributes input (^[[?61;6;7;14;21;22;23;24;28;32;42c) shouldn't be split across multiple buffers (a 32 bytes and a 3 bytes buffer in this case). The timing (a bit over 20 ms) makes me assume that Windows Terminal (or perhaps actually even something lower level like OpenSSH for Windows?) does indeed somehow cause the response being split across two TCP packets (TODO: check the code and more debugging to verify this assumption). As a result, the Tmux function tty_keys_device_attributes fails to parse the buffer as a DA response since it needs the entire input in the buffer (starting with the three bytes \033[? and ending with a c).
The rest of it is a bit weird... I think what happens here is that Tmux prints ^[[?, then get's interrupted by the shell prompt output (mweiss@dunwich ~ $ ), and puts the rest at the back of the buffer (not sure yet how it gets split up into three buffers though).

So next, I/we need to figure out where (and why) the DA response gets split up to make a bug report there and it's probably also a good idea to propose the Tmux patch for upstream inclusion to make the parsing more robust against such issues (I'm not sure yet if the patch might also cause unintended/undesired regressions - e.g. for Vim users).

@nicm
Copy link

nicm commented Nov 15, 2024

input_parse is data from the pty inside tmux so will not necessarily reflect what tmux itself is receiving from the terminal, although in this case it may be split in the same way. Instead you would be better to look for lines like this (it will grow each time until tmux does something with the input):

1731700636.445900 /dev/ttyp0: keys are 7 (\033[?1;2c)

The pty output is probably like this because first the kernel is echoing it and then when the shell starts it treats it as if you had typed at the prompt.

@primeos-work
Copy link
Author

Yes, you're right, I should've included that output instead (it's just a bit verbose). I did check the first keys are messages to be sure though (wanting to include some more information later but I cannot dedicate too much time to it atm, unfortunately). Here is a more detailed output of the input parsing:

$ grep -e ' read ' -e 'keys are' -e 'next key' -e 'partial key' -e 'complete key' -e 'received ' tmux-server-*.log
1731694819.612110 /dev/pts/4: read 31 bytes (already 0)
1731694819.612117 /dev/pts/4: keys are 31 (\033[?61;6;7;14;21;22;23;24;28;32;)
1731694819.612124 /dev/pts/4: partial key \033[?61;6;7;14;21;22;23;24;28;32;
1731694819.614252 /dev/pts/4: keys are 31 (\033[?61;6;7;14;21;22;23;24;28;32;)
1731694819.614258 /dev/pts/4: partial key \033[?61;6;7;14;21;22;23;24;28;32;
1731694819.614265 /dev/pts/4: next key is 31 (\033[?61;6;7;14;21;22;23;24;28;32;) (expired=1)
1731694819.614272 /dev/pts/4: next key is 30 ([?61;6;7;14;21;22;23;24;28;32;) (expired=1)
1731694819.614278 /dev/pts/4: complete key \033[ 0x10000000005b
1731694819.614292 /dev/pts/4: keys are 29 (?61;6;7;14;21;22;23;24;28;32;)
1731694819.614299 /dev/pts/4: next key is 29 (?61;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614305 /dev/pts/4: complete key ? 0x3f
1731694819.614317 /dev/pts/4: keys are 28 (61;6;7;14;21;22;23;24;28;32;)
1731694819.614323 /dev/pts/4: next key is 28 (61;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614329 /dev/pts/4: complete key 6 0x36
1731694819.614341 /dev/pts/4: keys are 27 (1;6;7;14;21;22;23;24;28;32;)
1731694819.614347 /dev/pts/4: next key is 27 (1;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614353 /dev/pts/4: complete key 1 0x31
1731694819.614365 /dev/pts/4: keys are 26 (;6;7;14;21;22;23;24;28;32;)
1731694819.614371 /dev/pts/4: next key is 26 (;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614377 /dev/pts/4: complete key ; 0x3b
1731694819.614389 /dev/pts/4: keys are 25 (6;7;14;21;22;23;24;28;32;)
1731694819.614395 /dev/pts/4: next key is 25 (6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614401 /dev/pts/4: complete key 6 0x36
1731694819.614414 /dev/pts/4: keys are 24 (;7;14;21;22;23;24;28;32;)
1731694819.614420 /dev/pts/4: next key is 24 (;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614426 /dev/pts/4: complete key ; 0x3b
1731694819.614438 /dev/pts/4: keys are 23 (7;14;21;22;23;24;28;32;)
1731694819.614444 /dev/pts/4: next key is 23 (7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614450 /dev/pts/4: complete key 7 0x37
1731694819.614462 /dev/pts/4: keys are 22 (;14;21;22;23;24;28;32;)
1731694819.614470 /dev/pts/4: next key is 22 (;14;21;22;23;24;28;32;) (expired=0)
1731694819.614476 /dev/pts/4: complete key ; 0x3b
1731694819.614488 /dev/pts/4: keys are 21 (14;21;22;23;24;28;32;)
1731694819.614494 /dev/pts/4: next key is 21 (14;21;22;23;24;28;32;) (expired=0)
1731694819.614500 /dev/pts/4: complete key 1 0x31
1731694819.614513 /dev/pts/4: keys are 20 (4;21;22;23;24;28;32;)
1731694819.614519 /dev/pts/4: next key is 20 (4;21;22;23;24;28;32;) (expired=0)
1731694819.614524 /dev/pts/4: complete key 4 0x34
1731694819.614537 /dev/pts/4: keys are 19 (;21;22;23;24;28;32;)
1731694819.614543 /dev/pts/4: next key is 19 (;21;22;23;24;28;32;) (expired=0)
1731694819.614549 /dev/pts/4: complete key ; 0x3b
1731694819.614561 /dev/pts/4: keys are 18 (21;22;23;24;28;32;)
1731694819.614567 /dev/pts/4: next key is 18 (21;22;23;24;28;32;) (expired=0)
1731694819.614573 /dev/pts/4: complete key 2 0x32
1731694819.614585 /dev/pts/4: keys are 17 (1;22;23;24;28;32;)
1731694819.614591 /dev/pts/4: next key is 17 (1;22;23;24;28;32;) (expired=0)
1731694819.614597 /dev/pts/4: complete key 1 0x31
1731694819.614609 /dev/pts/4: keys are 16 (;22;23;24;28;32;)
1731694819.614615 /dev/pts/4: next key is 16 (;22;23;24;28;32;) (expired=0)
1731694819.614621 /dev/pts/4: complete key ; 0x3b
1731694819.614633 /dev/pts/4: keys are 15 (22;23;24;28;32;)
1731694819.614639 /dev/pts/4: next key is 15 (22;23;24;28;32;) (expired=0)
1731694819.614645 /dev/pts/4: complete key 2 0x32
1731694819.614658 /dev/pts/4: keys are 14 (2;23;24;28;32;)
1731694819.614663 /dev/pts/4: next key is 14 (2;23;24;28;32;) (expired=0)
1731694819.614669 /dev/pts/4: complete key 2 0x32
1731694819.614682 /dev/pts/4: keys are 13 (;23;24;28;32;)
1731694819.614688 /dev/pts/4: next key is 13 (;23;24;28;32;) (expired=0)
1731694819.614694 /dev/pts/4: complete key ; 0x3b
1731694819.614706 /dev/pts/4: keys are 12 (23;24;28;32;)
1731694819.614712 /dev/pts/4: next key is 12 (23;24;28;32;) (expired=0)
1731694819.614718 /dev/pts/4: complete key 2 0x32
1731694819.614730 /dev/pts/4: keys are 11 (3;24;28;32;)
1731694819.614736 /dev/pts/4: next key is 11 (3;24;28;32;) (expired=0)
1731694819.614742 /dev/pts/4: complete key 3 0x33
1731694819.614754 /dev/pts/4: keys are 10 (;24;28;32;)
1731694819.614760 /dev/pts/4: next key is 10 (;24;28;32;) (expired=0)
1731694819.614766 /dev/pts/4: complete key ; 0x3b
1731694819.614778 /dev/pts/4: keys are 9 (24;28;32;)
1731694819.614785 /dev/pts/4: next key is 9 (24;28;32;) (expired=0)
1731694819.614790 /dev/pts/4: complete key 2 0x32
1731694819.614803 /dev/pts/4: keys are 8 (4;28;32;)
1731694819.614809 /dev/pts/4: next key is 8 (4;28;32;) (expired=0)
1731694819.614814 /dev/pts/4: complete key 4 0x34
1731694819.614826 /dev/pts/4: keys are 7 (;28;32;)
1731694819.614832 /dev/pts/4: next key is 7 (;28;32;) (expired=0)
1731694819.614838 /dev/pts/4: complete key ; 0x3b
1731694819.614852 /dev/pts/4: keys are 6 (28;32;)
1731694819.614858 /dev/pts/4: next key is 6 (28;32;) (expired=0)
1731694819.614863 /dev/pts/4: complete key 2 0x32
1731694819.614876 /dev/pts/4: keys are 5 (8;32;)
1731694819.614882 /dev/pts/4: next key is 5 (8;32;) (expired=0)
1731694819.614887 /dev/pts/4: complete key 8 0x38
1731694819.614900 /dev/pts/4: keys are 4 (;32;)
1731694819.614906 /dev/pts/4: next key is 4 (;32;) (expired=0)
1731694819.614911 /dev/pts/4: complete key ; 0x3b
1731694819.614924 /dev/pts/4: keys are 3 (32;)
1731694819.614929 /dev/pts/4: next key is 3 (32;) (expired=0)
1731694819.614935 /dev/pts/4: complete key 3 0x33
1731694819.614947 /dev/pts/4: keys are 2 (2;)
1731694819.614953 /dev/pts/4: next key is 2 (2;) (expired=0)
1731694819.614962 /dev/pts/4: complete key 2 0x32
1731694819.614975 /dev/pts/4: keys are 1 (;)
1731694819.614981 /dev/pts/4: next key is 1 (;) (expired=0)
1731694819.614987 /dev/pts/4: complete key ; 0x3b
1731694819.630263 /dev/pts/4: read 13 bytes (already 0)
1731694819.630278 /dev/pts/4: keys are 13 (42c\033[>0;10;1c)
1731694819.630286 /dev/pts/4: next key is 13 (42c\033[>0;10;1c) (expired=0)
1731694819.630293 /dev/pts/4: complete key 4 0x34
1731694819.630309 /dev/pts/4: keys are 12 (2c\033[>0;10;1c)
1731694819.630315 /dev/pts/4: next key is 12 (2c\033[>0;10;1c) (expired=0)
1731694819.630321 /dev/pts/4: complete key 2 0x32
1731694819.630335 /dev/pts/4: keys are 11 (c\033[>0;10;1c)
1731694819.630341 /dev/pts/4: next key is 11 (c\033[>0;10;1c) (expired=0)
1731694819.630347 /dev/pts/4: complete key c 0x63
1731694819.630361 /dev/pts/4: keys are 10 (\033[>0;10;1c)
1731694819.630368 /dev/pts/4: received secondary DA \033[>0;10;1c
1731694819.630468 /dev/pts/4: complete key \033[>0;10;1c 0xfe000000000
1731694821.742482 /dev/pts/4: read 1 bytes (already 0)
1731694821.742541 /dev/pts/4: keys are 1 (\003)
1731694821.742573 /dev/pts/4: next key is 1 (\003) (expired=0)
1731694821.742600 /dev/pts/4: complete key \003 0x3
1731694822.147021 /dev/pts/4: read 1 bytes (already 0)
1731694822.147075 /dev/pts/4: keys are 1 (\004)
1731694822.147102 /dev/pts/4: next key is 1 (\004) (expired=0)
1731694822.147126 /dev/pts/4: complete key \004 0x4

Or in a more minimal but incomplete form:

$ grep -e ' read ' -e 'received ' tmux-server-*.log
1731694819.612110 /dev/pts/4: read 31 bytes (already 0)
1731694819.630263 /dev/pts/4: read 13 bytes (already 0)
1731694819.630368 /dev/pts/4: received secondary DA \033[>0;10;1c
1731694821.742482 /dev/pts/4: read 1 bytes (already 0)
1731694822.147021 /dev/pts/4: read 1 bytes (already 0)

There are also cmdq_next </dev/pts/4>: empty messages in between but I haven't checked yet if that means that there is no more input to read.

And here is an unmodified part of the complete tmux-server-*.log output:

1731694819.614196 screen_write_collect_flush: flushed 0 items (screen_write_stop)
1731694819.614202 unref client 0xaf7c40 (2 references)
1731694819.614209 status_redraw exit: force=0, changed=0
1731694819.614215 /dev/pts/4: redraw added 0 bytes
1731694819.614221 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.614228 server_client_reset_state: cursor to 0,0
1731694819.614235 server_client_check_pane_buffer: pane %0 is on
1731694819.614241 @0 active pane not changed
1731694819.614252 /dev/pts/4: keys are 31 (\033[?61;6;7;14;21;22;23;24;28;32;)
1731694819.614258 /dev/pts/4: partial key \033[?61;6;7;14;21;22;23;24;28;32;
1731694819.614265 /dev/pts/4: next key is 31 (\033[?61;6;7;14;21;22;23;24;28;32;) (expired=1)
1731694819.614272 /dev/pts/4: next key is 30 ([?61;6;7;14;21;22;23;24;28;32;) (expired=1)
1731694819.614278 /dev/pts/4: complete key \033[ 0x10000000005b
1731694819.614286 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa9add0]
1731694819.614292 /dev/pts/4: keys are 29 (?61;6;7;14;21;22;23;24;28;32;)
1731694819.614299 /dev/pts/4: next key is 29 (?61;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614305 /dev/pts/4: complete key ? 0x3f
1731694819.614311 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa95220]
1731694819.614317 /dev/pts/4: keys are 28 (61;6;7;14;21;22;23;24;28;32;)
1731694819.614323 /dev/pts/4: next key is 28 (61;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614329 /dev/pts/4: complete key 6 0x36
1731694819.614335 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad9370]
1731694819.614341 /dev/pts/4: keys are 27 (1;6;7;14;21;22;23;24;28;32;)
1731694819.614347 /dev/pts/4: next key is 27 (1;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614353 /dev/pts/4: complete key 1 0x31
1731694819.614359 cmdq_append </dev/pts/4>: [server_client_key_callback/0xae9bb0]
1731694819.614365 /dev/pts/4: keys are 26 (;6;7;14;21;22;23;24;28;32;)
1731694819.614371 /dev/pts/4: next key is 26 (;6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614377 /dev/pts/4: complete key ; 0x3b
1731694819.614383 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa9a9b0]
1731694819.614389 /dev/pts/4: keys are 25 (6;7;14;21;22;23;24;28;32;)
1731694819.614395 /dev/pts/4: next key is 25 (6;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614401 /dev/pts/4: complete key 6 0x36
1731694819.614408 cmdq_append </dev/pts/4>: [server_client_key_callback/0xacc600]
1731694819.614414 /dev/pts/4: keys are 24 (;7;14;21;22;23;24;28;32;)
1731694819.614420 /dev/pts/4: next key is 24 (;7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614426 /dev/pts/4: complete key ; 0x3b
1731694819.614432 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad5950]
1731694819.614438 /dev/pts/4: keys are 23 (7;14;21;22;23;24;28;32;)
1731694819.614444 /dev/pts/4: next key is 23 (7;14;21;22;23;24;28;32;) (expired=0)
1731694819.614450 /dev/pts/4: complete key 7 0x37
1731694819.614456 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad8f50]
1731694819.614462 /dev/pts/4: keys are 22 (;14;21;22;23;24;28;32;)
1731694819.614470 /dev/pts/4: next key is 22 (;14;21;22;23;24;28;32;) (expired=0)
1731694819.614476 /dev/pts/4: complete key ; 0x3b
1731694819.614482 cmdq_append </dev/pts/4>: [server_client_key_callback/0xaf3090]
1731694819.614488 /dev/pts/4: keys are 21 (14;21;22;23;24;28;32;)
1731694819.614494 /dev/pts/4: next key is 21 (14;21;22;23;24;28;32;) (expired=0)
1731694819.614500 /dev/pts/4: complete key 1 0x31
1731694819.614507 cmdq_append </dev/pts/4>: [server_client_key_callback/0xaa0dc0]
1731694819.614513 /dev/pts/4: keys are 20 (4;21;22;23;24;28;32;)
1731694819.614519 /dev/pts/4: next key is 20 (4;21;22;23;24;28;32;) (expired=0)
1731694819.614524 /dev/pts/4: complete key 4 0x34
1731694819.614531 cmdq_append </dev/pts/4>: [server_client_key_callback/0xabcca0]
1731694819.614537 /dev/pts/4: keys are 19 (;21;22;23;24;28;32;)
1731694819.614543 /dev/pts/4: next key is 19 (;21;22;23;24;28;32;) (expired=0)
1731694819.614549 /dev/pts/4: complete key ; 0x3b
1731694819.614555 cmdq_append </dev/pts/4>: [server_client_key_callback/0xac0ec0]
1731694819.614561 /dev/pts/4: keys are 18 (21;22;23;24;28;32;)
1731694819.614567 /dev/pts/4: next key is 18 (21;22;23;24;28;32;) (expired=0)
1731694819.614573 /dev/pts/4: complete key 2 0x32
1731694819.614580 cmdq_append </dev/pts/4>: [server_client_key_callback/0xaa6ca0]
1731694819.614585 /dev/pts/4: keys are 17 (1;22;23;24;28;32;)
1731694819.614591 /dev/pts/4: next key is 17 (1;22;23;24;28;32;) (expired=0)
1731694819.614597 /dev/pts/4: complete key 1 0x31
1731694819.614603 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad5050]
1731694819.614609 /dev/pts/4: keys are 16 (;22;23;24;28;32;)
1731694819.614615 /dev/pts/4: next key is 16 (;22;23;24;28;32;) (expired=0)
1731694819.614621 /dev/pts/4: complete key ; 0x3b
1731694819.614627 cmdq_append </dev/pts/4>: [server_client_key_callback/0xae66e0]
1731694819.614633 /dev/pts/4: keys are 15 (22;23;24;28;32;)
1731694819.614639 /dev/pts/4: next key is 15 (22;23;24;28;32;) (expired=0)
1731694819.614645 /dev/pts/4: complete key 2 0x32
1731694819.614652 cmdq_append </dev/pts/4>: [server_client_key_callback/0xab0cf0]
1731694819.614658 /dev/pts/4: keys are 14 (2;23;24;28;32;)
1731694819.614663 /dev/pts/4: next key is 14 (2;23;24;28;32;) (expired=0)
1731694819.614669 /dev/pts/4: complete key 2 0x32
1731694819.614676 cmdq_append </dev/pts/4>: [server_client_key_callback/0xacdab0]
1731694819.614682 /dev/pts/4: keys are 13 (;23;24;28;32;)
1731694819.614688 /dev/pts/4: next key is 13 (;23;24;28;32;) (expired=0)
1731694819.614694 /dev/pts/4: complete key ; 0x3b
1731694819.614700 cmdq_append </dev/pts/4>: [server_client_key_callback/0xb0edf0]
1731694819.614706 /dev/pts/4: keys are 12 (23;24;28;32;)
1731694819.614712 /dev/pts/4: next key is 12 (23;24;28;32;) (expired=0)
1731694819.614718 /dev/pts/4: complete key 2 0x32
1731694819.614724 cmdq_append </dev/pts/4>: [server_client_key_callback/0xae0430]
1731694819.614730 /dev/pts/4: keys are 11 (3;24;28;32;)
1731694819.614736 /dev/pts/4: next key is 11 (3;24;28;32;) (expired=0)
1731694819.614742 /dev/pts/4: complete key 3 0x33
1731694819.614748 cmdq_append </dev/pts/4>: [server_client_key_callback/0xae9a40]
1731694819.614754 /dev/pts/4: keys are 10 (;24;28;32;)
1731694819.614760 /dev/pts/4: next key is 10 (;24;28;32;) (expired=0)
1731694819.614766 /dev/pts/4: complete key ; 0x3b
1731694819.614772 cmdq_append </dev/pts/4>: [server_client_key_callback/0xaf5310]
1731694819.614778 /dev/pts/4: keys are 9 (24;28;32;)
1731694819.614785 /dev/pts/4: next key is 9 (24;28;32;) (expired=0)
1731694819.614790 /dev/pts/4: complete key 2 0x32
1731694819.614797 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad23c0]
1731694819.614803 /dev/pts/4: keys are 8 (4;28;32;)
1731694819.614809 /dev/pts/4: next key is 8 (4;28;32;) (expired=0)
1731694819.614814 /dev/pts/4: complete key 4 0x34
1731694819.614821 cmdq_append </dev/pts/4>: [server_client_key_callback/0xab2a40]
1731694819.614826 /dev/pts/4: keys are 7 (;28;32;)
1731694819.614832 /dev/pts/4: next key is 7 (;28;32;) (expired=0)
1731694819.614838 /dev/pts/4: complete key ; 0x3b
1731694819.614846 cmdq_append </dev/pts/4>: [server_client_key_callback/0xb0f840]
1731694819.614852 /dev/pts/4: keys are 6 (28;32;)
1731694819.614858 /dev/pts/4: next key is 6 (28;32;) (expired=0)
1731694819.614863 /dev/pts/4: complete key 2 0x32
1731694819.614870 cmdq_append </dev/pts/4>: [server_client_key_callback/0xb110d0]
1731694819.614876 /dev/pts/4: keys are 5 (8;32;)
1731694819.614882 /dev/pts/4: next key is 5 (8;32;) (expired=0)
1731694819.614887 /dev/pts/4: complete key 8 0x38
1731694819.614894 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa8c810]
1731694819.614900 /dev/pts/4: keys are 4 (;32;)
1731694819.614906 /dev/pts/4: next key is 4 (;32;) (expired=0)
1731694819.614911 /dev/pts/4: complete key ; 0x3b
1731694819.614918 cmdq_append </dev/pts/4>: [server_client_key_callback/0xac1aa0]
1731694819.614924 /dev/pts/4: keys are 3 (32;)
1731694819.614929 /dev/pts/4: next key is 3 (32;) (expired=0)
1731694819.614935 /dev/pts/4: complete key 3 0x33
1731694819.614942 cmdq_append </dev/pts/4>: [server_client_key_callback/0xaf5930]
1731694819.614947 /dev/pts/4: keys are 2 (2;)
1731694819.614953 /dev/pts/4: next key is 2 (2;) (expired=0)
1731694819.614962 /dev/pts/4: complete key 2 0x32
1731694819.614969 cmdq_append </dev/pts/4>: [server_client_key_callback/0xae3200]
1731694819.614975 /dev/pts/4: keys are 1 (;)
1731694819.614981 /dev/pts/4: next key is 1 (;) (expired=0)
1731694819.614987 /dev/pts/4: complete key ; 0x3b
1731694819.614993 cmdq_append </dev/pts/4>: [server_client_key_callback/0xad0430]
1731694819.615000 cmdq_next <global>: empty
1731694819.615006 cmdq_next </dev/pts/4>: enter
1731694819.615012 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa9add0] (1), flags 0
1731694819.615019 session $0 0 activity 1731694819.615017 (last 1731694819.569678)
1731694819.615026 cmd_find_from_client: s=$0 0
1731694819.615032 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615038 cmd_find_from_client: wp=%0
1731694819.615043 cmd_find_from_client: idx=none
1731694819.615052 session 0 not pasting
1731694819.615059 key table root (pane %0)
1731694819.615066 key table root (pane %0)
1731694819.615071 not found in key table root
1731694819.615081 writing key 0x10000000005b (M-[) to %0
1731694819.615087 input_key: \033
1731694819.615102 input_key: [
1731694819.615110 unref client 0xaf7c40 (31 references)
1731694819.615117 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa95220] (1), flags 0
1731694819.615123 session $0 0 activity 1731694819.615122 (last 1731694819.615017)
1731694819.615129 cmd_find_from_client: s=$0 0
1731694819.615135 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615141 cmd_find_from_client: wp=%0
1731694819.615146 cmd_find_from_client: idx=none
1731694819.615152 session 0 pasting (flag 0)
1731694819.615158 key table root (pane %0)
1731694819.615164 key table root (pane %0)
1731694819.615170 not found in key table root
1731694819.615176 writing key 0x3f (?) to %0
1731694819.615181 input_key: ?
1731694819.615188 unref client 0xaf7c40 (30 references)
1731694819.615194 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad9370] (1), flags 0
1731694819.615200 session $0 0 activity 1731694819.615199 (last 1731694819.615122)
1731694819.615206 cmd_find_from_client: s=$0 0
1731694819.615212 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615218 cmd_find_from_client: wp=%0
1731694819.615223 cmd_find_from_client: idx=none
1731694819.615229 session 0 pasting (flag 1)
1731694819.615235 writing key 0x36 (6) to %0
1731694819.615240 input_key: 6
1731694819.615246 unref client 0xaf7c40 (29 references)
1731694819.615253 cmdq_next </dev/pts/4>: [server_client_key_callback/0xae9bb0] (1), flags 0
1731694819.615259 session $0 0 activity 1731694819.615258 (last 1731694819.615199)
1731694819.615264 cmd_find_from_client: s=$0 0
1731694819.615270 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615276 cmd_find_from_client: wp=%0
1731694819.615281 cmd_find_from_client: idx=none
1731694819.615287 session 0 pasting (flag 1)
1731694819.615293 writing key 0x31 (1) to %0
1731694819.615300 input_key: 1
1731694819.615306 unref client 0xaf7c40 (28 references)
1731694819.615312 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa9a9b0] (1), flags 0
1731694819.615319 session $0 0 activity 1731694819.615317 (last 1731694819.615258)
1731694819.615324 cmd_find_from_client: s=$0 0
1731694819.615330 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615335 cmd_find_from_client: wp=%0
1731694819.615341 cmd_find_from_client: idx=none
1731694819.615346 session 0 pasting (flag 1)
1731694819.615353 writing key 0x3b (;) to %0
1731694819.615358 input_key: ;
1731694819.615364 unref client 0xaf7c40 (27 references)
1731694819.615370 cmdq_next </dev/pts/4>: [server_client_key_callback/0xacc600] (1), flags 0
1731694819.615376 session $0 0 activity 1731694819.615375 (last 1731694819.615317)
1731694819.615382 cmd_find_from_client: s=$0 0
1731694819.615388 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615393 cmd_find_from_client: wp=%0
1731694819.615399 cmd_find_from_client: idx=none
1731694819.615404 session 0 pasting (flag 1)
1731694819.615410 writing key 0x36 (6) to %0
1731694819.615416 input_key: 6
1731694819.615422 unref client 0xaf7c40 (26 references)
1731694819.615428 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad5950] (1), flags 0
1731694819.615434 session $0 0 activity 1731694819.615433 (last 1731694819.615375)
1731694819.615440 cmd_find_from_client: s=$0 0
1731694819.615446 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615452 cmd_find_from_client: wp=%0
1731694819.615457 cmd_find_from_client: idx=none
1731694819.615463 session 0 pasting (flag 1)
1731694819.615469 writing key 0x3b (;) to %0
1731694819.615474 input_key: ;
1731694819.615480 unref client 0xaf7c40 (25 references)
1731694819.615486 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad8f50] (1), flags 0
1731694819.615492 session $0 0 activity 1731694819.615491 (last 1731694819.615433)
1731694819.615498 cmd_find_from_client: s=$0 0
1731694819.615504 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615509 cmd_find_from_client: wp=%0
1731694819.615514 cmd_find_from_client: idx=none
1731694819.615520 session 0 pasting (flag 1)
1731694819.615526 writing key 0x37 (7) to %0
1731694819.615532 input_key: 7
1731694819.615538 unref client 0xaf7c40 (24 references)
1731694819.615544 cmdq_next </dev/pts/4>: [server_client_key_callback/0xaf3090] (1), flags 0
1731694819.615550 session $0 0 activity 1731694819.615549 (last 1731694819.615491)
1731694819.615556 cmd_find_from_client: s=$0 0
1731694819.615562 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615567 cmd_find_from_client: wp=%0
1731694819.615572 cmd_find_from_client: idx=none
1731694819.615578 session 0 pasting (flag 1)
1731694819.615584 writing key 0x3b (;) to %0
1731694819.615589 input_key: ;
1731694819.615595 unref client 0xaf7c40 (23 references)
1731694819.615602 cmdq_next </dev/pts/4>: [server_client_key_callback/0xaa0dc0] (1), flags 0
1731694819.615608 session $0 0 activity 1731694819.615607 (last 1731694819.615549)
1731694819.615614 cmd_find_from_client: s=$0 0
1731694819.615619 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615625 cmd_find_from_client: wp=%0
1731694819.615630 cmd_find_from_client: idx=none
1731694819.615636 session 0 pasting (flag 1)
1731694819.615642 writing key 0x31 (1) to %0
1731694819.615647 input_key: 1
1731694819.615653 unref client 0xaf7c40 (22 references)
1731694819.615660 cmdq_next </dev/pts/4>: [server_client_key_callback/0xabcca0] (1), flags 0
1731694819.615666 session $0 0 activity 1731694819.615665 (last 1731694819.615607)
1731694819.615671 cmd_find_from_client: s=$0 0
1731694819.615677 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615683 cmd_find_from_client: wp=%0
1731694819.615688 cmd_find_from_client: idx=none
1731694819.615694 session 0 pasting (flag 1)
1731694819.615700 writing key 0x34 (4) to %0
1731694819.615705 input_key: 4
1731694819.615711 unref client 0xaf7c40 (21 references)
1731694819.615717 cmdq_next </dev/pts/4>: [server_client_key_callback/0xac0ec0] (1), flags 0
1731694819.615723 session $0 0 activity 1731694819.615722 (last 1731694819.615665)
1731694819.615731 cmd_find_from_client: s=$0 0
1731694819.615737 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615742 cmd_find_from_client: wp=%0
1731694819.615747 cmd_find_from_client: idx=none
1731694819.615753 session 0 pasting (flag 1)
1731694819.615759 writing key 0x3b (;) to %0
1731694819.615764 input_key: ;
1731694819.615770 unref client 0xaf7c40 (20 references)
1731694819.615776 cmdq_next </dev/pts/4>: [server_client_key_callback/0xaa6ca0] (1), flags 0
1731694819.615783 session $0 0 activity 1731694819.615782 (last 1731694819.615722)
1731694819.615788 cmd_find_from_client: s=$0 0
1731694819.615794 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615800 cmd_find_from_client: wp=%0
1731694819.615805 cmd_find_from_client: idx=none
1731694819.615811 session 0 pasting (flag 1)
1731694819.615817 writing key 0x32 (2) to %0
1731694819.615822 input_key: 2
1731694819.615828 unref client 0xaf7c40 (19 references)
1731694819.615835 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad5050] (1), flags 0
1731694819.615841 session $0 0 activity 1731694819.615840 (last 1731694819.615782)
1731694819.615846 cmd_find_from_client: s=$0 0
1731694819.615852 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615858 cmd_find_from_client: wp=%0
1731694819.615863 cmd_find_from_client: idx=none
1731694819.615869 session 0 pasting (flag 1)
1731694819.615875 writing key 0x31 (1) to %0
1731694819.615880 input_key: 1
1731694819.615886 unref client 0xaf7c40 (18 references)
1731694819.615893 cmdq_next </dev/pts/4>: [server_client_key_callback/0xae66e0] (1), flags 0
1731694819.615899 session $0 0 activity 1731694819.615898 (last 1731694819.615840)
1731694819.615905 cmd_find_from_client: s=$0 0
1731694819.615910 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615916 cmd_find_from_client: wp=%0
1731694819.615921 cmd_find_from_client: idx=none
1731694819.615927 session 0 pasting (flag 1)
1731694819.615933 writing key 0x3b (;) to %0
1731694819.615938 input_key: ;
1731694819.615944 unref client 0xaf7c40 (17 references)
1731694819.615951 cmdq_next </dev/pts/4>: [server_client_key_callback/0xab0cf0] (1), flags 0
1731694819.615957 session $0 0 activity 1731694819.615956 (last 1731694819.615898)
1731694819.615965 cmd_find_from_client: s=$0 0
1731694819.615971 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.615977 cmd_find_from_client: wp=%0
1731694819.615982 cmd_find_from_client: idx=none
1731694819.615988 session 0 pasting (flag 1)
1731694819.615994 writing key 0x32 (2) to %0
1731694819.615999 input_key: 2
1731694819.616005 unref client 0xaf7c40 (16 references)
1731694819.616011 cmdq_next </dev/pts/4>: [server_client_key_callback/0xacdab0] (1), flags 0
1731694819.616018 session $0 0 activity 1731694819.616016 (last 1731694819.615956)
1731694819.616023 cmd_find_from_client: s=$0 0
1731694819.616029 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616035 cmd_find_from_client: wp=%0
1731694819.616040 cmd_find_from_client: idx=none
1731694819.616046 session 0 pasting (flag 1)
1731694819.616052 writing key 0x32 (2) to %0
1731694819.616057 input_key: 2
1731694819.616063 unref client 0xaf7c40 (15 references)
1731694819.616069 cmdq_next </dev/pts/4>: [server_client_key_callback/0xb0edf0] (1), flags 0
1731694819.616075 session $0 0 activity 1731694819.616074 (last 1731694819.616016)
1731694819.616081 cmd_find_from_client: s=$0 0
1731694819.616087 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616092 cmd_find_from_client: wp=%0
1731694819.616098 cmd_find_from_client: idx=none
1731694819.616103 session 0 pasting (flag 1)
1731694819.616109 writing key 0x3b (;) to %0
1731694819.616115 input_key: ;
1731694819.616121 unref client 0xaf7c40 (14 references)
1731694819.616127 cmdq_next </dev/pts/4>: [server_client_key_callback/0xae0430] (1), flags 0
1731694819.616134 session $0 0 activity 1731694819.616132 (last 1731694819.616074)
1731694819.616139 cmd_find_from_client: s=$0 0
1731694819.616145 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616151 cmd_find_from_client: wp=%0
1731694819.616156 cmd_find_from_client: idx=none
1731694819.616163 session 0 pasting (flag 1)
1731694819.616169 writing key 0x32 (2) to %0
1731694819.616175 input_key: 2
1731694819.616181 unref client 0xaf7c40 (13 references)
1731694819.616187 cmdq_next </dev/pts/4>: [server_client_key_callback/0xae9a40] (1), flags 0
1731694819.616193 session $0 0 activity 1731694819.616192 (last 1731694819.616132)
1731694819.616199 cmd_find_from_client: s=$0 0
1731694819.616205 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616210 cmd_find_from_client: wp=%0
1731694819.616216 cmd_find_from_client: idx=none
1731694819.616221 session 0 pasting (flag 1)
1731694819.616227 writing key 0x33 (3) to %0
1731694819.616233 input_key: 3
1731694819.616239 unref client 0xaf7c40 (12 references)
1731694819.616245 cmdq_next </dev/pts/4>: [server_client_key_callback/0xaf5310] (1), flags 0
1731694819.616251 session $0 0 activity 1731694819.616250 (last 1731694819.616192)
1731694819.616257 cmd_find_from_client: s=$0 0
1731694819.616262 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616268 cmd_find_from_client: wp=%0
1731694819.616273 cmd_find_from_client: idx=none
1731694819.616279 session 0 pasting (flag 1)
1731694819.616285 writing key 0x3b (;) to %0
1731694819.616290 input_key: ;
1731694819.616296 unref client 0xaf7c40 (11 references)
1731694819.616303 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad23c0] (1), flags 0
1731694819.616309 session $0 0 activity 1731694819.616308 (last 1731694819.616250)
1731694819.616315 cmd_find_from_client: s=$0 0
1731694819.616320 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616326 cmd_find_from_client: wp=%0
1731694819.616331 cmd_find_from_client: idx=none
1731694819.616337 session 0 pasting (flag 1)
1731694819.616343 writing key 0x32 (2) to %0
1731694819.616348 input_key: 2
1731694819.616354 unref client 0xaf7c40 (10 references)
1731694819.616360 cmdq_next </dev/pts/4>: [server_client_key_callback/0xab2a40] (1), flags 0
1731694819.616367 session $0 0 activity 1731694819.616365 (last 1731694819.616308)
1731694819.616372 cmd_find_from_client: s=$0 0
1731694819.616378 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616384 cmd_find_from_client: wp=%0
1731694819.616389 cmd_find_from_client: idx=none
1731694819.616395 session 0 pasting (flag 1)
1731694819.616401 writing key 0x34 (4) to %0
1731694819.616406 input_key: 4
1731694819.616412 unref client 0xaf7c40 (9 references)
1731694819.616418 cmdq_next </dev/pts/4>: [server_client_key_callback/0xb0f840] (1), flags 0
1731694819.616425 session $0 0 activity 1731694819.616423 (last 1731694819.616365)
1731694819.616430 cmd_find_from_client: s=$0 0
1731694819.616436 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616441 cmd_find_from_client: wp=%0
1731694819.616447 cmd_find_from_client: idx=none
1731694819.616452 session 0 pasting (flag 1)
1731694819.616458 writing key 0x3b (;) to %0
1731694819.616464 input_key: ;
1731694819.616470 unref client 0xaf7c40 (8 references)
1731694819.616476 cmdq_next </dev/pts/4>: [server_client_key_callback/0xb110d0] (1), flags 0
1731694819.616483 session $0 0 activity 1731694819.616481 (last 1731694819.616423)
1731694819.616488 cmd_find_from_client: s=$0 0
1731694819.616494 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616500 cmd_find_from_client: wp=%0
1731694819.616505 cmd_find_from_client: idx=none
1731694819.616511 session 0 pasting (flag 1)
1731694819.616517 writing key 0x32 (2) to %0
1731694819.616522 input_key: 2
1731694819.616528 unref client 0xaf7c40 (7 references)
1731694819.616534 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa8c810] (1), flags 0
1731694819.616540 session $0 0 activity 1731694819.616539 (last 1731694819.616481)
1731694819.616546 cmd_find_from_client: s=$0 0
1731694819.616552 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616558 cmd_find_from_client: wp=%0
1731694819.616563 cmd_find_from_client: idx=none
1731694819.616568 session 0 pasting (flag 1)
1731694819.616575 writing key 0x38 (8) to %0
1731694819.616580 input_key: 8
1731694819.616586 unref client 0xaf7c40 (6 references)
1731694819.616592 cmdq_next </dev/pts/4>: [server_client_key_callback/0xac1aa0] (1), flags 0
1731694819.616600 session $0 0 activity 1731694819.616599 (last 1731694819.616539)
1731694819.616606 cmd_find_from_client: s=$0 0
1731694819.616611 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616617 cmd_find_from_client: wp=%0
1731694819.616622 cmd_find_from_client: idx=none
1731694819.616628 session 0 pasting (flag 1)
1731694819.616634 writing key 0x3b (;) to %0
1731694819.616639 input_key: ;
1731694819.616645 unref client 0xaf7c40 (5 references)
1731694819.616652 cmdq_next </dev/pts/4>: [server_client_key_callback/0xaf5930] (1), flags 0
1731694819.616658 session $0 0 activity 1731694819.616657 (last 1731694819.616599)
1731694819.616663 cmd_find_from_client: s=$0 0
1731694819.616669 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616675 cmd_find_from_client: wp=%0
1731694819.616680 cmd_find_from_client: idx=none
1731694819.616686 session 0 pasting (flag 1)
1731694819.616692 writing key 0x33 (3) to %0
1731694819.616697 input_key: 3
1731694819.616703 unref client 0xaf7c40 (4 references)
1731694819.616709 cmdq_next </dev/pts/4>: [server_client_key_callback/0xae3200] (1), flags 0
1731694819.616715 session $0 0 activity 1731694819.616714 (last 1731694819.616657)
1731694819.616721 cmd_find_from_client: s=$0 0
1731694819.616727 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616732 cmd_find_from_client: wp=%0
1731694819.616738 cmd_find_from_client: idx=none
1731694819.616744 session 0 pasting (flag 1)
1731694819.616749 writing key 0x32 (2) to %0
1731694819.616755 input_key: 2
1731694819.616761 unref client 0xaf7c40 (3 references)
1731694819.616767 cmdq_next </dev/pts/4>: [server_client_key_callback/0xad0430] (1), flags 0
1731694819.616773 session $0 0 activity 1731694819.616772 (last 1731694819.616714)
1731694819.616779 cmd_find_from_client: s=$0 0
1731694819.616785 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.616790 cmd_find_from_client: wp=%0
1731694819.616795 cmd_find_from_client: idx=none
1731694819.616801 session 0 pasting (flag 1)
1731694819.616807 writing key 0x3b (;) to %0
1731694819.616813 input_key: ;
1731694819.616818 unref client 0xaf7c40 (2 references)
1731694819.616824 cmdq_next </dev/pts/4>: exit (empty)
1731694819.616830 cmdq_next <global>: empty
1731694819.616836 cmdq_next </dev/pts/4>: empty
1731694819.616843 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.616849 server_client_reset_state: cursor to 0,0
1731694819.616855 server_client_check_pane_buffer: pane %0 is on
1731694819.616861 @0 active pane not changed
1731694819.616893 cmdq_next <global>: empty
1731694819.616901 cmdq_next </dev/pts/4>: empty
1731694819.616907 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.616913 server_client_reset_state: cursor to 0,0
1731694819.616919 server_client_check_pane_buffer: pane %0 is on
1731694819.616925 @0 active pane not changed
1731694819.616954 %0 has 32 bytes
1731694819.616965 @0 alerts timer reset 0
1731694819.616973 screen_write_start_pane: size 198x52, pane %0 (at 0,0)
1731694819.616979 input_parse_buffer: %0 ground, 32 bytes: ^[[?61;6;7;14;21;22;23;24;28;32;
1731694819.616987 screen_write_collect_end: 32 ^[[?61;6;7;14;21;22;23;24;28;32; (at 0,0)
1731694819.616994 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617000 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617006 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617012 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617018 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617023 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617029 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617035 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617040 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617046 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617052 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617058 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617063 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617069 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617075 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617080 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617086 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617094 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617100 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617106 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617111 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617117 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617123 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617129 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617134 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617140 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617146 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617152 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617158 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617163 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617169 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617175 utf8_from_data: (1 1 ^) -> 4100005e
1731694819.617187 /dev/pts/4: ^[[?61;6;7;14;21;22;23;24;28;32;
1731694819.617199 screen_write_collect_flush: flushed 1 items (screen_write_stop)
1731694819.617218 cmdq_next <global>: empty
1731694819.617224 cmdq_next </dev/pts/4>: empty
1731694819.617230 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.617236 server_client_reset_state: cursor to 32,0
1731694819.617242 server_client_check_pane_buffer: %0 has 32 minimum (of 32) bytes used
1731694819.617248 server_client_check_pane_buffer: pane %0 is on
1731694819.617255 @0 active pane changed
1731694819.617260 @0 name timer queued (454285 left)
1731694819.617281 /dev/pts/4: wrote 32 bytes (of 32)
1731694819.617287 cmdq_next <global>: empty
1731694819.617293 cmdq_next </dev/pts/4>: empty
1731694819.617299 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.617304 server_client_reset_state: cursor to 32,0
1731694819.617310 server_client_check_pane_buffer: pane %0 is on
1731694819.617316 @0 active pane changed
1731694819.617322 @0 name timer already queued (454224 left)
1731694819.626400 cmdq_next <global>: empty
1731694819.626419 cmdq_next </dev/pts/4>: empty
1731694819.626428 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.626435 server_client_reset_state: cursor to 32,0
1731694819.626444 server_client_check_pane_buffer: pane %0 is on
1731694819.626453 @0 active pane changed
1731694819.626460 @0 name timer already queued (445087 left)
1731694819.630263 /dev/pts/4: read 13 bytes (already 0)
1731694819.630278 /dev/pts/4: keys are 13 (42c\033[>0;10;1c)
1731694819.630286 /dev/pts/4: next key is 13 (42c\033[>0;10;1c) (expired=0)
1731694819.630293 /dev/pts/4: complete key 4 0x34
1731694819.630302 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa8dab0]
1731694819.630309 /dev/pts/4: keys are 12 (2c\033[>0;10;1c)
1731694819.630315 /dev/pts/4: next key is 12 (2c\033[>0;10;1c) (expired=0)
1731694819.630321 /dev/pts/4: complete key 2 0x32
1731694819.630329 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa9add0]
1731694819.630335 /dev/pts/4: keys are 11 (c\033[>0;10;1c)
1731694819.630341 /dev/pts/4: next key is 11 (c\033[>0;10;1c) (expired=0)
1731694819.630347 /dev/pts/4: complete key c 0x63
1731694819.630354 cmdq_append </dev/pts/4>: [server_client_key_callback/0xa95220]
1731694819.630361 /dev/pts/4: keys are 10 (\033[>0;10;1c)
1731694819.630368 /dev/pts/4: received secondary DA \033[>0;10;1c
1731694819.630378 applying terminal features: bpaste,ccolour,clipboard,cstyle,focus,title
1731694819.630388 /dev/pts/4: \033[?7727h
1731694819.630401 /dev/pts/4: \033(B\033[m
1731694819.630411 /dev/pts/4: \033[?12l\033[?25h
1731694819.630422 /dev/pts/4: current mode ALL
1731694819.630428 /dev/pts/4: setting mode CURSOR
1731694819.630434 /dev/pts/4: \033[?1006l\033[?1000l\033[?1002l\033[?1003l
1731694819.630447 /dev/pts/4: \033[1;1H
1731694819.630458 /dev/pts/4: \033[1;53r
1731694819.630468 /dev/pts/4: complete key \033[>0;10;1c 0xfe000000000
1731694819.630476 cmdq_next <global>: empty
1731694819.630482 cmdq_next </dev/pts/4>: enter
1731694819.630488 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa8dab0] (1), flags 0
1731694819.630496 session $0 0 activity 1731694819.630494 (last 1731694819.616772)
1731694819.630506 cmd_find_from_client: s=$0 0
1731694819.630513 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.630518 cmd_find_from_client: wp=%0
1731694819.630524 cmd_find_from_client: idx=none
1731694819.630531 session 0 not pasting
1731694819.630538 key table root (pane %0)
1731694819.630544 key table root (pane %0)
1731694819.630550 not found in key table root
1731694819.630557 writing key 0x34 (4) to %0
1731694819.630563 input_key: 4
1731694819.630573 unref client 0xaf7c40 (4 references)
1731694819.630580 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa9add0] (1), flags 0
1731694819.630587 session $0 0 activity 1731694819.630585 (last 1731694819.630494)
1731694819.630593 cmd_find_from_client: s=$0 0
1731694819.630599 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.630605 cmd_find_from_client: wp=%0
1731694819.630610 cmd_find_from_client: idx=none
1731694819.630616 session 0 pasting (flag 0)
1731694819.630622 key table root (pane %0)
1731694819.630628 key table root (pane %0)
1731694819.630633 not found in key table root
1731694819.630640 writing key 0x32 (2) to %0
1731694819.630645 input_key: 2
1731694819.630652 unref client 0xaf7c40 (3 references)
1731694819.630658 cmdq_next </dev/pts/4>: [server_client_key_callback/0xa95220] (1), flags 0
1731694819.630665 session $0 0 activity 1731694819.630663 (last 1731694819.630585)
1731694819.630671 cmd_find_from_client: s=$0 0
1731694819.630677 cmd_find_from_client: wl=0 1 w=@0 tmux
1731694819.630682 cmd_find_from_client: wp=%0
1731694819.630687 cmd_find_from_client: idx=none
1731694819.630693 session 0 pasting (flag 1)
1731694819.630699 writing key 0x63 (c) to %0
1731694819.630705 input_key: c
1731694819.630711 unref client 0xaf7c40 (2 references)
1731694819.630717 cmdq_next </dev/pts/4>: exit (empty)
1731694819.630723 cmdq_next <global>: empty
1731694819.630728 cmdq_next </dev/pts/4>: empty
1731694819.630735 /dev/pts/4: redraw window status borders overlay panes
1731694819.630741 /dev/pts/4: redraw deferred (71 left)
1731694819.630747 redraw timer started
1731694819.630755 server_client_reset_state: client /dev/pts/4 mode CURSOR,WRAP
1731694819.630761 server_client_reset_state: cursor to 32,0
1731694819.630767 /dev/pts/4: \033[1;33H
1731694819.630778 /dev/pts/4: current mode CURSOR
1731694819.630784 /dev/pts/4: setting mode CURSOR,WRAP
1731694819.630791 server_client_check_pane_buffer: pane %0 is on
1731694819.630798 @0 active pane changed
1731694819.630805 @0 name timer already queued (440741 left)
1731694819.630828 /dev/pts/4: wrote 78 bytes (of 78)
1731694819.630842 cmdq_next <global>: empty
1731694819.630849 cmdq_next </dev/pts/4>: empty
1731694819.630855 /dev/pts/4: redraw window status borders overlay panes
1731694819.630861 /dev/pts/4: redraw needed

@nicm
Copy link

nicm commented Nov 15, 2024

There looks to be 16 milliseconds between the first part of the escape sequence and the end, so I'd say you will need an escape-time of 20 or more for tmux to recognize this. Or try my diff above which will use a longer time only when waiting for a response.

16 milliseconds is a fair delay on a modern network but it isn't crazy.

@HipToday
Copy link

HipToday commented Dec 2, 2024

Looking at tmux/tty-keys.c, the unit for escape-time is milliseconds and looking at tmux/options-table.c the default is currently 10 ms (in tmux-3.5, down from previously 500 ms in tmux-3.4 after this commit by @nicm). I would increase this to at least 100, or five times the top-quartile ping time to the server, whichever is higher.

For what it's worth, this issue showed up for me when I upgraded an OpenBSD machine to v7.6 (from v7.3) and connected from my Windows machine. I suspect the OpenBSD version of tmux has that commit from @nicm in it as well (looks like it). I was able to resolve it by setting the escape-time to 100 (set -g escape-time 100 in ~/.tmux.conf). Dropping from 500ms to 10ms seems pretty drastic to me, especially considering I never even noticed before that there was any delay when I hit the Escape key!

@johnjohntheleprechaun
Copy link

Some experimentation (trying to uncover some really weird inconsistencies) seems to show that (all else being equal), older ssh client versions like 9.2p1 don't pass the escape sequences, while newer ones (9.9p1) do pass it. Found that out by building both version from source on the same debian instance, so I'm pretty confident that's accurate. In any case it would imply that this is not a TMUX bug, but rather something to do with SSH (or maybe something strange about the way they interact?)

Incidentally, it's also only passed when the remote command is tmux attach-session (or new-session, or a combo), but not when you ssh and then run attach-session yourself

I'd rather not mess with escape-time since I use vim, and even if that wasn't a problem I'm very curious to track down the real cause of the issue

@mgkuhn
Copy link

mgkuhn commented Jan 8, 2025

When investigating keyboard character-timing effects in recent OpenSSH versions, also be aware of this new keystroke-timing-obfuscation feature in OpenSSH 9.5:

ssh(1): add keystroke timing obfuscation to the client. This attempts to hide inter-keystroke timings by sending interactive traffic at fixed intervals (default: every 20ms) when there is only a small amount of data being sent. It also sends fake "chaff" keystrokes for a random interval after the last real keystroke. These are controlled by a new ssh_config ObscureKeystrokeTiming keyword.

(Another reason for why tmux should perhaps wait by default for longer than 20 ms for the completion of an ESC sequence.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants