History log of /openbsd-current/usr.bin/tmux/options-table.c
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.174 14-May-2024 nicm

Revert part of the change for GitHub issue 3675 because it does not work
correctly, it was intended to skip lines that are already being searched
as part of a previous wrapped line but in fact is skipping all lines
except the last in wrapped lines.

Also revert the search-wrapped-lines option (I didn't realize it was
intended to work around this).


# 1.173 14-May-2024 nicm

Add a command-error hook when a command fails, from Hugh Davenport in
GitHub issue 3973.


# 1.172 14-May-2024 nicm

Add an option to disable unwrapping lines for searching, from
meanderingprogrammer at gmail dot com, GitHub issue 3975.


# 1.171 10-Apr-2024 nicm

Add an option allow-set-title to forbid applications from changing the
pane title, from someone in GitHub issue 3930.


# 1.170 21-Mar-2024 nicm

Reduce escape-time default to 10 milliseconds, 500 is far too long for
modern terminals and networks. Case made by Kurtis Rader in GitHub issue
3844.


Revision tags: OPENBSD_7_5_BASE
# 1.169 13-Feb-2024 nicm

Add two new values for the destroy-unattached option to destroy sessions
only if they are not members of sessions groups, from Mark Huang, GitHub
issue 3806.


Revision tags: OPENBSD_7_4_BASE
# 1.168 01-Sep-2023 nicm

Add detach-on-destroy previous and next, mostly from Alexis Hildebrandt.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.171 10-Apr-2024 nicm

Add an option allow-set-title to forbid applications from changing the
pane title, from someone in GitHub issue 3930.


# 1.170 21-Mar-2024 nicm

Reduce escape-time default to 10 milliseconds, 500 is far too long for
modern terminals and networks. Case made by Kurtis Rader in GitHub issue
3844.


Revision tags: OPENBSD_7_5_BASE
# 1.169 13-Feb-2024 nicm

Add two new values for the destroy-unattached option to destroy sessions
only if they are not members of sessions groups, from Mark Huang, GitHub
issue 3806.


Revision tags: OPENBSD_7_4_BASE
# 1.168 01-Sep-2023 nicm

Add detach-on-destroy previous and next, mostly from Alexis Hildebrandt.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.170 21-Mar-2024 nicm

Reduce escape-time default to 10 milliseconds, 500 is far too long for
modern terminals and networks. Case made by Kurtis Rader in GitHub issue
3844.


Revision tags: OPENBSD_7_5_BASE
# 1.169 13-Feb-2024 nicm

Add two new values for the destroy-unattached option to destroy sessions
only if they are not members of sessions groups, from Mark Huang, GitHub
issue 3806.


Revision tags: OPENBSD_7_4_BASE
# 1.168 01-Sep-2023 nicm

Add detach-on-destroy previous and next, mostly from Alexis Hildebrandt.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.169 13-Feb-2024 nicm

Add two new values for the destroy-unattached option to destroy sessions
only if they are not members of sessions groups, from Mark Huang, GitHub
issue 3806.


Revision tags: OPENBSD_7_4_BASE
# 1.168 01-Sep-2023 nicm

Add detach-on-destroy previous and next, mostly from Alexis Hildebrandt.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.168 01-Sep-2023 nicm

Add detach-on-destroy previous and next, mostly from Alexis Hildebrandt.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.167 15-Aug-2023 nicm

Add an option menu-selected-style to configure the currently selected
menu item, from Alexis Hildebrandt.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.166 08-Aug-2023 nicm

Add options and flags for menu styles similar to those existing for
popups, from Alexis Hildebrandt. GitHub issue 3650.


Revision tags: OPENBSD_7_2_BASE OPENBSD_7_3_BASE
# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.165 09-Sep-2022 nicm

Add message-line option to control where message and prompt go, from
Varun Kumar E in GitHub issue 3324.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.164 02-Aug-2022 nicm

Add a third state "all" to allow-passthrough to work even in invisible
panes, from Sergei Grechanik in GitHub issue 3274.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.163 14-Jun-2022 nicm

kf* terminfo capabilities are poorly defined and rxvt uses them in a
different way from xterm, so add a feature flag for rxvt to make tmux
ignore the capabilities and instead rely on its builtin definitions.


Revision tags: OPENBSD_7_1_BASE
# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.162 24-Mar-2022 nicm

Add unit (milliseconds) to escape-time, show unset colours as "none"
rather than "invalid" and don't show the same text twice for user
options in customize mode.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.161 17-Mar-2022 nicm

Add an option (scroll-on-clear) to control if tmux scrolls into history
on clear, from Robert Lange in GitHub issue 3121.


# 1.160 16-Mar-2022 nicm

Add an option to set the character used for unused areas of the
terminal, GitHub issue 3110.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.159 08-Mar-2022 nicm

Add remain-on-exit-format to set text shown when pane is dead.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.158 17-Feb-2022 nicm

Add a window-resized hook which is fired when the window is actually
resized which may be later than the client resize, GitHub issue 2995.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.157 15-Feb-2022 nicm

Add an option (default off) to control the passthrough escape sequence.
Like set-clipboard and allow-rename it is safer to forbid this by
default.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.156 01-Feb-2022 nicm

Add option to show arrows for active pane indicator, GitHub issue 3022
from Marcel Partap.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.155 13-Dec-2021 nicm

Make pane-border-format a pane option, GitHub issue 2999.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.154 03-Nov-2021 nicm

Add a cursor-style option, from Alexis Hildebrandt in GitHub issue 2960.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.153 01-Nov-2021 nicm

Add a cursor-colour option, from Alexis Hildebrandt in GitHub issue
2959.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.152 14-Oct-2021 nicm

Add popup-border-lines option to set popup line style, from Alexis
Hildebrandt, GitHub issue 2930.


# 1.151 13-Oct-2021 nicm

Add popup-style and popup-border-style options, from Alexis Hildebrandt
in GitHub issue 2927.


Revision tags: OPENBSD_7_0_BASE
# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.150 12-Aug-2021 nicm

Now that styles can contain formats, they need to be expanded when
inserted into the status line.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.149 11-Aug-2021 nicm

Break the colour palette into a struct rather than just a single array
and use that to support the OSC palette-setting sequences in popups.
Also add a pane-colours array option to specify the defaults. GitHub
issue 2815.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.148 06-Aug-2021 nicm

Add client focus hooks.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.147 04-Aug-2021 nicm

Add a client-active hook, from ncfavier in GitHub issue 2803.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.146 28-Jul-2021 nicm

Make window-linked and window-unlinked window options, GitHub issue
2790.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.145 14-Jul-2021 nicm

Move default value for TERM into tmux.h.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.144 16-Jun-2021 nicm

Minor fixes to option descriptions.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.143 10-Jun-2021 nicm

More accurate vi(1) word navigation in copy mode and on the status line.
This changes the meaning of the word-separators option - setting it to
the empty string is equivalent to the previous behavior. From Will Noble
in GitHub issue 2693.


# 1.142 10-Jun-2021 nicm

Add different command historys for different types of prompts
("command", "search" etc). From Anindya Mukherjee.


# 1.141 10-Jun-2021 nicm

Add an "always" value to the extended-keys option to always forward
these keys to applications inside tmux.


Revision tags: OPENBSD_6_9_BASE
# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.140 11-Mar-2021 nicm

Add an "absolute-centre" alignment to use the centre of the total space
instead of only the available space. From Magnus Gross in GitHub issue 2578.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.139 01-Feb-2021 nicm

Add a no-detached choice to detach-on-destroy which detaches only if
there are no other detached sessions to switch to, from Sencer Selcuk in
GitHub issue 2553.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.138 20-Jan-2021 nicm

Change so that window_flags escapes # automatically which means configs
will not have to change. A new format window_raw_flags contains the old
unescaped version.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.137 04-Jan-2021 nicm

Add a variant of remain-on-exit that only keeps the pane if the program
failed, GitHub issue 2513.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.136 15-Dec-2020 nicm

Make synchronize-panes a pane option and add -U flag to set-option to
unset an option on all panes. GitHub issue 2491 from Rostislav Nesin.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.135 01-Dec-2020 nicm

Make replacement of ##s consistent when drawing formats, whether
followed by [ or not. Add a flag (e) to the q: format modifier to double
up #s and use it for the window_flags format variable so it doesn't end
up escaping any following text. GitHub issue 2485.


Revision tags: OPENBSD_6_8_BASE
# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.134 25-Aug-2020 nicm

Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.133 24-Jul-2020 nicm

Add a hook when the pane title changed.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.132 22-May-2020 nicm

xterm* can have focus too.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.131 16-May-2020 nicm

Add a terminal feature for enable/disable extended keys (supported by
xterm and mintty) and add an option to make tmux send it. Only forward
extended keys if the application has requested them, even though we use
the CSI u sequence and xterm uses CSI 27 ~ - this is what mintty does as
well.


# 1.130 16-May-2020 nicm

xterm-keys has been on by default for five years and all other modern
terminals use these key sequences by default. Merge the code into the
main tty and input tree processing (converting the latter to use a tree
rather than a table at the same time) and make the option a no-op.


# 1.129 16-May-2020 nicm

Add an option to set the pane border lines style from a choice of single
lines (ACS or UTF-8), double or heavy (UTF-8), simple (plain ASCII) or
number (the pane numbers). Lines that won't work on a non-UTF-8 terminal
are translated back into ACS when they are output.


# 1.128 16-May-2020 nicm

Add a mark in copy mode. Set with set-mark command (bound to 'X') by
default and the mark and cursor position are swapped with 'jump-to-mark'
(bound to M-x). The line containing the mark is shown in
copy-mode-mark-style with the horizontal position in reverse.

From Anindya Mukherjee in GitHub issue 2209.


# 1.127 16-May-2020 nicm

Add a customize mode where keys and options may be browsed and changed,
includes adding a brief description of each option. Bound to "C" by
default.


# 1.126 16-May-2020 nicm

Change message log to be per server rather than per client and include
every command that is run.


# 1.125 16-May-2020 nicm

Add 'e' key in buffer mode to open the buffer in an editor.


# 1.124 16-May-2020 nicm

Copy mode search improvements:

- Add styles for the search marking styles (copy-mode-match-style and
copy-mode-current-match-style).

- Show the current match (the one with the cursor on it) in a different style.

- Copying without a selection will copy the current match if there is one.


# 1.123 16-May-2020 nicm

Drop having a separate type for style options and make them all strings,
which allows formats to be expanded. Any styles without a '#{' are still
validated when they are set but any with a '#{' are not. Formats are not
expanded usefully in many cases yet, that will be changed later.

To make this work, a few other changes:

- set-option -a with a style option automatically appends a ",".

- OSC 10 and 11 don't set the window-style option anymore, instead the
fg and bg are stored in the pane struct and act as the defaults that
can be overridden by window-style.

- status-fg and -bg now override status-style instead of trying to keep
them in sync.


# 1.122 16-May-2020 nicm

Instead of having a default set of terminals in terminal-overrides that
get XT added and using that as a marker for xterm(1)-like, assume that
if the terminfo(5) entry already has XT or the clear capability starts
with CSI then the terminal is VT100-like and it should be safe to send
DA requests. The DA responses trigger additional features being added.


# 1.121 16-May-2020 nicm

Add feature and capabilities for focus reporting. Also document AX and
XT even though they aren't tmux's, and add some bits for rxvt.


Revision tags: OPENBSD_6_7_BASE
# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.120 22-Apr-2020 nicm

Change so main-pane-width and height can be given as a percentage.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.119 21-Apr-2020 nicm

xterm* needs XT also.


# 1.118 20-Apr-2020 nicm

Tidy up the terminal detection and feature code and add named sets of
terminal features, each of which are defined in one place and map to a
builtin set of terminfo(5) capabilities. Features can be specified based
on TERM with a new terminal-features option or with the -T flag when
running tmux. tmux will also detect a few common terminals from the DA
and DSR responses.

This is intended to make it easier to configure tmux's use of
terminfo(5) even in the presence of outdated ncurses(3) or terminfo(5)
databases or for features which do not yet have a terminfo(5) entry.
Instead of having to grok terminfo(5) capability names and what they
should be set to in the terminal-overrides option, the user can
hopefully just give tmux a feature name and let it do the right thing.

The terminal-overrides option remains both for backwards compatibility
and to allow tweaks of individual capabilities.

tmux already did much of this already, this makes it tidier and simpler
to configure.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.117 17-Apr-2020 nicm

Add a copy-command option and change copy-pipe and friends to pipe to it
if used without arguments, allows all copy key bindings to be changed to
pipe with one option.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.116 13-Apr-2020 nicm

Change so that the appropriate hooks for windows and panes belong to
pane/window options rather than all being session options. This is
useful for example to create a pane that is automatically closed on some
condition. From Anindya Mukherjee.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.115 28-Nov-2019 nicm

Missing after-kill-pane option.


# 1.114 28-Nov-2019 nicm

status-left and status-right need push-default also, reported by Eric
Pruitt in GitHub issue 1989.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.113 14-Nov-2019 nicm

Change window-size default from smallest to latest.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.112 14-Nov-2019 nicm

Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.


Revision tags: OPENBSD_6_6_BASE
# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.111 19-Sep-2019 nicm

Add a "latest" window-size option which tries to size windows based on
the most recently used client. From Tommie Gannert in GitHub issue 1869
based on earlier changes from me.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.110 15-Sep-2019 nicm

Add push-default and pop-default in styles to change the default colours
and attributes and use them to restore the previous behaviour of
window-status-style being the default for window-status-format in the
status line. From John Drouhard in GitHub issue 1912.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.109 26-Jun-2019 nicm

Add #define for the pane status line option position numbers.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.108 20-Jun-2019 nicm

allow-rename and alternate-screen can be pane options.


# 1.107 20-Jun-2019 nicm

Add a per-pane option set. Pane options inherit from window options (so
there should be no change to existing behaviour) and are set and shown
with set-option -p and show-options -p.

Change remain-on-exit and window-style/window-active-style to be pane
options (some others will be changed later).

This makes select-pane -P and -g unnecessary so no longer document them
(they still work) and no longer document set-window-option and
show-window-options in favour of set-option -w and show-options -w.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.106 26-May-2019 nicm

Add formats for word and line under the mouse and use them to add some
items to the pane menu.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.105 26-Apr-2019 nicm

Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).


# 1.104 23-Apr-2019 nicm

Indicate an array option with a flag rather than a special type so that
in future will not have to be strings.


Revision tags: OPENBSD_6_5_BASE
# 1.103 07-Apr-2019 nicm

Current window style also needs to be tested for default.


# 1.102 02-Apr-2019 nicm

Silence flag should use the same option as activity, reported by Thomas
Sattler.


# 1.101 19-Mar-2019 nicm

Include window-status-style and window-status-current style in the format.


# 1.100 18-Mar-2019 nicm

The individual -fg, -bg and -attr options have been deprecated (in
favour of -style), undocumented and hidden from show-options since
2014. Remove them, except for status-fg and status-bg.


# 1.99 18-Mar-2019 nicm

Extend the #[] style syntax and use that together with previous format
changes to allow the status line to be entirely configured with a single
option.

Now that it is possible to configure their content, enable the existing
code that lets the status line be multiple lines in height. The status
option can now take a value of 2, 3, 4 or 5 (as well as the previous on
or off) to configure more than one line. The new status-format array
option configures the format of each line, the default just references
the existing status-* options, although some of the more obscure status
options may be eliminated in time.

Additions to the #[] syntax are: "align" to specify alignment (left,
centre, right), "list" for the window list and "range" to configure
ranges of text for the mouse bindings.

The "align" keyword can also be used to specify alignment of entries in
tree mode and the pane status lines.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.98 25-Oct-2018 nicm

Add a "terminal" colour which can be used instead of "default" in style
options for the terminal default colour, bypassing any inheritance from
other options. Prompted by a discussion with abieber@.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.97 18-Oct-2018 nicm

Support for windows larger than visible on the attached client. This has
been a limitation for a long time.

There are two new options, window-size and default-size, and a new
command, resize-window. The force-width and force-height options and the
session_width and session_height formats have been removed.

The new window-size option tells tmux how to work out the size of
windows: largest means it picks the size of the largest session,
smallest the smallest session (similar to the old behaviour) and manual
means that it does not automatically resize windows. The default is
currently largest but this may change. aggressive-resize modifies the
choice of session for largest and smallest as it did before.

If a window is in a session attached to a client that is too small, only
part of the window is shown. tmux attempts to keep the cursor visible,
so the part of the window displayed is changed as the cursor moves (with
a small delay, to try and avoid excess redrawing when applications
redraw status lines or similar that are not currently visible). The
offset of the visible portion of the window is shown in status-right.

Drawing windows which are larger than the client is not as efficient as
those which fit, particularly when the cursor moves, so it is
recommended to avoid using this on slow machines or networks (set
window-size to smallest or manual).

The resize-window command can be used to resize a window manually. If it
is used, the window-size option is automatically set to manual for the
window (undo this with "setw -u window-size"). resize-window works in a
similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and
-A flags. -a sets the window to the size of the smallest client (what it
would be if window-size was smallest) and -A the largest.

For the same behaviour as force-width or force-height, use resize-window
-x or -y, and "setw -u window-size" to revert to automatic sizing..

If the global window-size option is set to manual, the default-size
option is used for new windows. If -x or -y is used with new-session,
that sets the default-size option for the new session.

The maximum size of a window is 10000x10000. But expect applications to
complain and much higher memory use if making a window excessively
big. The minimum size is the size required for the current layout
including borders.

The refresh-client command can be used to pan around a window, -U -D -L
-R moves up, down, left or right and -c returns to automatic cursor
tracking. The position is reset when the current window is changed.


Revision tags: OPENBSD_6_4_BASE
# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.96 23-Apr-2018 nicm

Add KRB5CCNAME to update-environment.


Revision tags: OPENBSD_6_3_BASE
# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.95 22-Feb-2018 nicm

Add exit-empty option to exit server if no sessions (defaults to on).


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.


# 1.94 25-Oct-2017 nicm

Default allow-rename to off because it is ridiculous that applications
are even able to do this and confusing when they do.


Revision tags: OPENBSD_6_2_BASE
# 1.93 17-Aug-2017 nicm

Add monitor-bell window option to match the activity and silence
options, from Brad Town.


# 1.92 16-Aug-2017 nicm

Rename BELL_* values to ALERT_* now they are used by more than bells,
based on a diff from Brad Town.


# 1.91 26-Jul-2017 nicm

Make bell, activity and silence alerting more consistent:

- remove the bell-on-alert option;

- add activity-action and silence-action options with the same possible
values as the existing bell-action;

- add "both" value for the visual-bell, visual-activity and
visual-silence options to trigger both a bell and a message.

This means all three work the same way. Based on changes from Yvain Thonnart.


# 1.90 23-Jun-2017 nicm

Add user-keys option to allow user-defined keys to be set, from Dan
Aloni.


# 1.89 03-Jun-2017 nicm

Make set-clipboard a three-state option so tmux itself can ignore the
sequencess.


# 1.88 30-May-2017 nicm

Rewrite of choose mode, both to simplify and tidy the code and to add
some modern features.

Now the common code is in mode-tree.c, which provides an API used by the
three modes now separated into window-{buffer,client,tree}.c. Buffer
mode shows buffers, client mode clients and tree mode a tree of
sessions, windows and panes.

Each mode has a common set of key bindings plus a few that are specific
to the mode. Other changes are:

- each mode has a preview pane: for buffers this is the buffer content
(very useful), for others it is a preview of the pane;

- items may be sorted in different ways ('O' key);

- multiple items may be tagged and an operation applied to all of them
(for example, to delete multiple buffers at once);

- in tree mode a command may be run on the selected item (session,
window, pane) or on tagged items (key ':');

- displayed items may be filtered in tree mode by using a format (this
is used to implement find-window) (key 'f');

- the custom format (-F) for the display is no longer available;

- shortcut keys change from 0-9, a-z, A-Z which was always a bit weird
with keys used for other uses to 0-9, M-a to M-z.

Now that the code is simpler, other improvements will come later.

Primary key bindings for each mode are documented under the commands in
the man page (choose-buffer, choose-client, choose-tree).

Parts written by Thomas Adam.


# 1.87 29-May-2017 nicm

Store a copy of the old status line, will be needed soon for new choose mode.


Revision tags: OPENBSD_6_1_BASE
# 1.86 24-Jan-2017 nicm

Make update-environment an array as well.


# 1.85 24-Jan-2017 nicm

Convert terminal-overrides to an array option.


# 1.84 24-Jan-2017 nicm

server-info can become an alias rather than a command.


# 1.83 24-Jan-2017 nicm

Add support for custom command aliases, this is an array option which
contains items of the form "alias=command". This is consulted when an
unknown command is parsed.


# 1.82 16-Jan-2017 nicm

Revert WIP parts of previous I didn't mean to commit yet.


# 1.81 16-Jan-2017 nicm

getopt() has a struct option so just return to using options_entry.


# 1.80 15-Jan-2017 nicm

Major tidy up and rework of options tree and set-option/show-options
commands this pushes more of the code into options.c and ties it more
closely to the options table rather than having an unnecessary
split. Also add support for array options (will be used later). Only
(intentional) user visible change is that show-options output is now
passed through vis(3) with VIS_DQ so quotes are escaped.


# 1.79 15-Jan-2017 nicm

Remove unused quiet option.


# 1.78 12-Jan-2017 nicm

Simplify appending to string options.


# 1.77 11-Jan-2017 nicm

Some tidying and tweaks to options code.


# 1.76 30-Dec-2016 nicm

Change the xterm-keys option to default to on, so that tmux will
generate xterm(1) escape sequences for function keys with modifiers.

With the option off most of these keys are ignored by default, except
for ctrl + arrows which use a variant that nothing else seems to use and
I don't remember why we chose. The xterm escape sequences are now the
most common.

Prompted by a question from mpi@.


# 1.75 13-Oct-2016 nicm

Remove the set-remain-on-exit option, it was always a hack and can now
be done with hooks instead.


# 1.74 03-Oct-2016 nicm

Remove some dead code in cmd-move-window.c and make a load of local
functions static.


Revision tags: OPENBSD_6_0_BASE
# 1.73 04-May-2016 nicm

Fix up a couple of long lines.


# 1.72 29-Apr-2016 nicm

Add option to include status text in the pane borders. If
pane-border-status is set to "top" or "bottom" (rather than "off"),
every pane has a permanent top or bottom border containing the text from
pane-border-format.

Based on a diff sent long ago by Jonathan Slenders, mostly rewritten and
simplified by me.


Revision tags: OPENBSD_5_9_BASE
# 1.71 19-Jan-2016 nicm

I no longer use my SourceForge address so replace it.


# 1.70 12-Dec-2015 nicm

Add key-table option to set the default key table for a session, allows
different key bindings for different sessions and a few other things.


# 1.69 24-Nov-2015 nicm

Don't allow options in table without scope set.


# 1.68 22-Nov-2015 tim

If display-time is set to 0, show status messages until a key is pressed;
OK nicm@


# 1.67 20-Nov-2015 nicm

Instead of separate tables for different types of options, give each
option a scope type (server, session, window) in one table.


# 1.66 12-Nov-2015 nicm

Nuke the utf8 and status-utf8 options and make tmux only a UTF-8
terminal. We still support non-UTF-8 terminals outside tmux, but inside
it is always UTF-8 (as when the utf8 and status-utf8 options were on).


# 1.65 12-Nov-2015 nicm

Default history-file should be "" not NULL, from Greg Onufe.


# 1.64 11-Nov-2015 nicm

Drop mouse-utf8 option and always turn on UTF-8 mouse if the client says
it supports UTF-8.


# 1.63 25-Sep-2015 nicm

Adding colors=256 to *256color* was always pretty stupid and now it
won't work (without adding setaf@:setab@ too).


# 1.62 28-Aug-2015 nicm

Remove the lock-server option which is a bit redundant, it isn't that
different without it.


Revision tags: OPENBSD_5_8_BASE
# 1.61 20-Jul-2015 nicm

Add an option (history-file) for a file to save/restore command prompt
history, from Olof-Joachim Frahm.


# 1.60 12-May-2015 nicm

Add a session_alerts format which is a list of all the alerts in the
current session in symbolic form (something like "0!,4~,5!"). Use this
in the default set-titles-string. Prompted by a request from Jan ONDREJ.


# 1.59 12-May-2015 nicm

Add bell-action "other" to pass through bells in all windows except the
current, suggested by Jan ONDREJ.


# 1.58 11-May-2015 nicm

Left the c0-* options behind in the table.


# 1.57 06-May-2015 nicm

Add a format window_linked which is 1 if a window has been linked
multiple times, also remove the default space in window_flags and use a
conditional to add it in window-status-format (this means additional
flags can be added in the option without extra spaces). From Thomas Adam
with tweaks by me.


# 1.56 29-Apr-2015 nicm

If default-terminal is set to "screen" or "screen-*", emulate screen's
historical (incorrect) behaviour for SGR 3 and send smso
(standout). Previously, we would send sitm (italics) if the terminal
outside had it and smso otherwise. This was acceptably until recently
because xterm's terminfo entry lacked sitm, so most users got smso.

People who want italics should set default-terminal to the forthcoming
"tmux" entry (and be prepared to deal with it being missing on older
hosts).

As a side-effect this changes default-terminal to be a server rather
than a session option.

suggested by and ok naddy


# 1.55 19-Apr-2015 nicm

Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as
keys and there is one option "mouse" that turns on mouse support
entirely (set -g mouse on).

See the new MOUSE SUPPORT section of the man page for description of the
key names and new flags (-t= to specify the pane or window under mouse
as a target, and send-keys -M to pass through a mouse event).

The default builtin bindings for the mouse are:

bind -n MouseDown1Pane select-pane -t=; send-keys -M
bind -n MouseDown1Status select-window -t=
bind -n MouseDrag1Pane copy-mode -M
bind -n MouseDrag1Border resize-pane -M

To get the effect of turning mode-mouse off, do:

unbind -n MouseDrag1Pane
unbind -temacs-copy MouseDrag1Pane

The old mouse options are now gone, set-option -q may be used to
suppress warnings if mixing configuration files.


# 1.54 19-Apr-2015 nicm

Support setting the default window and pane background colours (window
and active pane via window-style and window-active-style options, an
individual pane by a new select-pane -P flag). From J Raynor.


Revision tags: OPENBSD_5_7_BASE
# 1.53 06-Feb-2015 nicm

Move pane border options to window options rather than session, from Marc Finet.


# 1.52 21-Jan-2015 sthen

In options-table.c r1.51 an extra space was added to the default status-right,
overrunning status-right-length with long window titles. Allow for the extra
space so the last digit of the year isn't lost. ok nicm@


# 1.51 05-Nov-2014 nicm

Do not put a space between status-left/status-right and the window list,
instead move the space into the defaults for the options (so status-left
now defaults to "[#S] ". From Balazs Kezes.


Revision tags: OPENBSD_5_6_BASE
# 1.50 17-Apr-2014 nicm

Wrap some long lines.


# 1.49 17-Apr-2014 nicm

Remove some unnecessary includes and fix a typo.


# 1.48 17-Apr-2014 nicm

Remove the "info" message mechanism, this was only used for about five
mostly useless and annoying messages. Change those commands to silence
on success like all the others. Still accept the -q command line flag
and "quiet" server option for now.


# 1.47 17-Apr-2014 nicm

Remove the monitor-content option and associated bits and bobs. It's
never worked very well. If there is a big demand for it to return, will
consider better ways to do it.


# 1.46 31-Mar-2014 nicm

Make message-limit a server option.


Revision tags: OPENBSD_5_5_BASE
# 1.45 23-Feb-2014 nicm

Change terminal-overrides to a server option (now that we have them), it
doesn't make much sense as a session option.


# 1.44 28-Jan-2014 nicm

Fix missing argument, stupid last minute changes...


# 1.43 28-Jan-2014 nicm

Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example:

set -g status-fg yellow
set -g status-bg red
set -g status-attr blink

Becomes:

set -g status-style fg=yellow,bg=red,blink

The -a flag to set can be used to add to rather than replace a style. So:

set -g status-bg red

Becomes:

set -ag status-style bg=red

Currently this is fully backwards compatible (all *-{fg,bg,attr} options
remain) but the plan is to deprecate them over time.

From Tiago Cunha.


# 1.42 10-Oct-2013 nicm

Alter how tmux handles the working directory to internally use file
descriptors rather than strings.

- Each session still has a current working directory.

- New sessions still get their working directory from the client that
created them or its attached session if any.

- New windows are created by default in the session working directory.

- The -c flag to new, neww, splitw allows the working directory to be
overridden.

- The -c flag to attach let's the session working directory be changed.

- The default-path option has been removed.

To get the equivalent to default-path '.', do:

bind c neww -c $PWD

To get the equivalent of default-path '~', do:

bind c neww -c ~

This also changes the client identify protocol to be a set of messages rather
than one as well as some other changes that should make it easier to make
backwards-compatible protocol changes in future.


# 1.41 10-Oct-2013 nicm

Add automatic-rename-format option allowing automatic rename to use
something other than pane_current_command.


# 1.40 10-Oct-2013 nicm

Add length limit operator for formats.


# 1.39 05-Oct-2013 nicm

Change the default for the default-path option to ~. This is a quick
change to turn off the KERN_PROC_CWD code which is unpredictable. Later
it will go away and there may be other changes to how this works.


Revision tags: OPENBSD_5_4_BASE
# 1.38 23-Jun-2013 nicm

Focus events can cause trouble if left on and they can't be turned off
during idle periods (like the other states are) because we'd miss
events. So add a server option to control them. Defaults to off.


# 1.37 02-Jun-2013 nicm

The actual terminfo entries we ended up with for cursor changes are Cs,
Ce, Ss and Se (not Cc, Ce, Cs, Csr). So use and document these instead
of the ones we were using earlier.


# 1.36 27-Mar-2013 nicm

Remove tmux's (already minimal) 88 colour support. Such terminals are
few and unnecessary.


# 1.35 25-Mar-2013 nicm

Revert the command-prefix change which breaks sequences of commands.


# 1.34 24-Mar-2013 nicm

Add option command-prefix which is automatically prepended to any
command (apart from a naked default-shell). The default is "exec ".


# 1.33 21-Mar-2013 nicm

Add -v to set and setw to show only option value.


Revision tags: OPENBSD_5_3_BASE
# 1.32 17-Jan-2013 nicm

Remove the layout undo/redo code which never really worked.


# 1.31 15-Jan-2013 nicm

If timing between keys is less than (by default) 1 millisecond, assume
the text is being pasted. assume-paste-time option changes the value (0
disables). Based on a diff from Marcin Kulik.


# 1.30 27-Nov-2012 nicm

Add window-status-last-* options, from Boris Faure.


Revision tags: OPENBSD_5_2_BASE
# 1.29 29-Apr-2012 nicm

Add a flag to move-window to renumber the windows in a session (closing
any gaps) and add an option to do this automatically each time a window
is killed. From Thomas Adam.


# 1.28 23-Apr-2012 nicm

Add window-status-separator option, from Thomas Adam.


# 1.27 01-Apr-2012 nicm

Add a layout history which can be stepped through with select-layout -u
and -U commands (bound to 'u' and 'U' by default).


# 1.26 20-Mar-2012 nicm

50 is a too low trigger default on larger terminals, bump to 250.


# 1.25 20-Mar-2012 nicm

Add a simple form of output rate limiting by counting the number of
certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.


# 1.24 17-Mar-2012 nicm

Add a wrap-search option to turn off wrapping of searches in copy
mode. From Jacobo de Vera.


# 1.23 29-Feb-2012 nicm

Remove accidentally committed option.


# 1.22 25-Feb-2012 nicm

Allow a single option to be specified to show-options to show just that
option.


# 1.21 15-Feb-2012 nicm

Sort some entries, from Ben Boeckel.


Revision tags: OPENBSD_5_1_BASE
# 1.20 29-Jan-2012 nicm

Add an option to move the status line to the top of the screen,
requested by many.


# 1.19 21-Jan-2012 nicm

Drop the ability to have a list of keys in the prefix in favour of two
separate options, prefix and prefix2. This simplifies the code and gets
rid the data options type which was only used for this one option.

Also add a -2 flag to send-prefix to send the secondary prefix key,
fixing a cause of minor irritation.

People who want three prefix keys are out of luck :-).


# 1.18 20-Jan-2012 nicm

Add some trivial additional status line attributes from jwcxz at users
dot sourceforge dot net.


# 1.17 20-Jan-2012 nicm

Add an option to disable the window rename escape sequence, from Romain
Francoise.


# 1.16 15-Nov-2011 nicm

Move word-separators to be a session rather than window option, from Ben
Boeckel.


# 1.15 05-Nov-2011 nicm

Option to change status line (message) background when using vi keys and
in command mode. From Ben Boeckel.


# 1.14 27-Oct-2011 nicm

Add screen*:XT to terminal-overrides for tmux-in-tmux, from Romain
Francoise.


# 1.13 24-Aug-2011 nicm

Add pane-base-index option, from Ben Barbour.


Revision tags: OPENBSD_5_0_BASE
# 1.12 30-Jul-2011 nicm

Extend the mode-mouse option to add a third choice which means the mouse
does not enter copy mode. Patch from SF bug 3374493.

In future the mode-mouse option is likely to die and be broken into
several smaller options.


# 1.11 03-Jul-2011 nicm

Add an option to trigger the terminal bell when there is an alert, from
Marco Beck.


# 1.10 20-May-2011 nicm

Support DECSCUSR sequence to set the cursor style with two new
terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.


# 1.9 20-May-2011 nicm

Support xterm(1) cursor colour change sequences through terminfo(5) Cc
(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.


# 1.8 18-May-2011 nicm

Support setting the xterm clipboard when copying from copy mode using
the xterm escape sequence for the purpose (if xterm is configured to
allow it).

Written by and much discussed Ailin Nemui, guidance on
xterm/termcap/terminfo from Thomas Dickey.


# 1.7 08-May-2011 nicm

Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.


# 1.6 08-May-2011 nicm

Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability
(which means their title setting is xterm-compatible). From hsim at
gmx.li.


# 1.5 18-Apr-2011 nicm

Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.


# 1.4 09-Apr-2011 nicm

Since buffers are now global, bump the default buffer-limit a bit higher
to 20 rather than 9.


Revision tags: OPENBSD_4_9_BASE
# 1.3 13-Jan-2011 nicm

The maximum history-limit was accidentally reduced, fix it back to INT_MAX.


# 1.2 03-Jan-2011 nicm

Support for UTF-8 mouse input (\033[1005h). This was added in xterm 262
and supports larger terminals than the older way.

If the new mouse-utf8 option is on, UTF-8 mouse input is enabled for all
UTF-8 terminals. The option defaults to on if LANG etc are set in the
same manner as the utf8 option.

With help and based on code from hsim at gmx.li.


# 1.1 01-Jan-2011 nicm

Move the user-visible parts of all options (names, types, limit, default
values) together into one set of tables in options-table.c. Also clean
up and simplify cmd-set-options.c and move a common print function into
option-table.c.