mirror of
https://github.com/tmux/tmux.git
synced 2026-09-22 12:57:43 +00:00
104a0cee99c716f416c3f755fcdcb4ffea3efd91
`(~c->flags & CLIENT_ALLREDRAWFLAGS)` - for a multi-bit mask, ~x & MASK means "at least one of these bits is unset" (almost always true), not "none of these bits are set" as the comment and surrounding logic clearly intend. Every floating-pane drag command unconditionally sets CLIENT_REDRAWBORDERS (server_redraw_window_borders(), called from cmd-resize-pane.c/cmd-join-pane.c/cmd-split-window.c) alongside reporting window damage, so this fallback fired on every single drag step: redraw_client_damage(c) ran here, then ran again a few lines later at the CLIENT_ALLREDRAWFLAGS block for the exact same rectangles. Confirmed via the server's own -vv log: a 6-step drag produced 12 "composing damage" lines in matched pairs (identical position and size, milliseconds apart) with no fix, 6 with it. No memory-safety issue - redraw_client_damage() only reads w->damage, never frees it - just wasted work rendering the same rectangles twice per pass. Fix: `(c->flags & CLIENT_ALLREDRAWFLAGS) == 0`, matching the comment's actual intent. regress/floating-pane-drag-no-double-composite.sh drags a floating pane and asserts no two consecutive "composing damage" log lines share the same position and size (comparing both together, since distinct drag steps commonly share the same rectangle size and only the position differs). Verified failing 3/3 against the pre-fix code (all 6 rectangles doubled each run) and passing 5/5 against the fix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Welcome to tmux! tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached. This release runs on OpenBSD, FreeBSD, NetBSD, Linux, macOS and Solaris. * Dependencies tmux depends on libevent 2.x, available from: https://github.com/libevent/libevent/releases/latest It also depends on ncurses, available from: https://invisible-mirror.net/archives/ncurses/ To build tmux, a C compiler (for example gcc or clang), make, pkg-config and a suitable yacc (yacc or bison) are needed. * Installation To build and install tmux from a release tarball, use: $ ./configure && make $ sudo make install tmux can use the utempter library to update utmp(5), if it is installed - run configure with --enable-utempter to enable this. To get and build the latest from version control - note that this requires autoconf, automake and pkg-config: $ git clone https://github.com/tmux/tmux.git $ cd tmux $ sh autogen.sh $ ./configure && make $ sudo make install * Contributing Bug reports, feature suggestions and especially code contributions are most welcome. Please send by email to: tmux-users@googlegroups.com Or open a GitHub issue or pull request. * Documentation For documentation on using tmux, see the tmux.1 manpage. View it from the source tree with: $ nroff -mdoc tmux.1|less A small example configuration is in example_tmux.conf. Other documentation is available in the wiki: https://github.com/tmux/tmux/wiki Also see the tmux FAQ at: https://github.com/tmux/tmux/wiki/FAQ A bash(1) completion file is at: https://github.com/scop/bash-completion/blob/main/completions/tmux For debugging, run tmux with -v and -vv to generate server and client log files in the current directory. * Support The tmux mailing list for general discussion and bug reports is: https://groups.google.com/forum/#!forum/tmux-users Subscribe by sending an email to: tmux-users+subscribe@googlegroups.com * License This file and the CHANGES files are licensed under the ISC license. All other files have a license and copyright notice at their start.
Description
Languages
C
73.1%
Shell
19.1%
Roff
5.7%
Yacc
0.9%
M4
0.7%
Other
0.4%