Home | History | Annotate | Line # | Download | only in dist
      1 /* $OpenBSD$ */
      2 
      3 /*
      4  * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott (at) gmail.com>
      5  *
      6  * Permission to use, copy, modify, and distribute this software for any
      7  * purpose with or without fee is hereby granted, provided that the above
      8  * copyright notice and this permission notice appear in all copies.
      9  *
     10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
     15  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
     16  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17  */
     18 
     19 #include <sys/types.h>
     20 
     21 #include <string.h>
     22 
     23 #include "tmux.h"
     24 
     25 /*
     26  * This file has a tables with all the server, session and window
     27  * options. These tables are the master copy of the options with their real
     28  * (user-visible) types, range limits and default values. At start these are
     29  * copied into the runtime global options trees (which only has number and
     30  * string types). These tables are then used to look up the real type when the
     31  * user sets an option or its value needs to be shown.
     32  */
     33 
     34 /* Choice option type lists. */
     35 static const char *options_table_mode_keys_list[] = {
     36 	"emacs", "vi", NULL
     37 };
     38 static const char *options_table_clock_mode_style_list[] = {
     39 	"12", "24", "12-with-seconds", "24-with-seconds", NULL
     40 };
     41 static const char *options_table_status_list[] = {
     42 	"off", "on", "2", "3", "4", "5", NULL
     43 };
     44 static const char *options_table_message_line_list[] = {
     45 	"0", "1", "2", "3", "4", NULL
     46 };
     47 static const char *options_table_status_keys_list[] = {
     48 	"emacs", "vi", NULL
     49 };
     50 static const char *options_table_status_justify_list[] = {
     51 	"left", "centre", "right", "absolute-centre", NULL
     52 };
     53 static const char *options_table_status_position_list[] = {
     54 	"top", "bottom", NULL
     55 };
     56 static const char *options_table_bell_action_list[] = {
     57 	"none", "any", "current", "other", NULL
     58 };
     59 static const char *options_table_visual_bell_list[] = {
     60 	"off", "on", "both", NULL
     61 };
     62 static const char *options_table_cursor_style_list[] = {
     63 	"default", "blinking-block", "block", "blinking-underline", "underline",
     64 	"blinking-bar", "bar", NULL
     65 };
     66 static const char *options_table_pane_scrollbars_list[] = {
     67 	"off", "modal", "on", NULL
     68 };
     69 static const char *options_table_pane_scrollbars_position_list[] = {
     70 	"right", "left", NULL
     71 };
     72 static const char *options_table_pane_status_list[] = {
     73 	"off", "top", "bottom", NULL
     74 };
     75 static const char *options_table_pane_border_indicators_list[] = {
     76 	"off", "colour", "arrows", "both", NULL
     77 };
     78 static const char *options_table_pane_border_lines_list[] = {
     79 	"single", "double", "heavy", "simple", "number", "spaces", NULL
     80 };
     81 static const char *options_table_popup_border_lines_list[] = {
     82 	"single", "double", "heavy", "simple", "rounded", "padded", "none", NULL
     83 };
     84 static const char *options_table_set_clipboard_list[] = {
     85 	"off", "external", "on", NULL
     86 };
     87 static const char *options_table_window_size_list[] = {
     88 	"largest", "smallest", "manual", "latest", NULL
     89 };
     90 static const char *options_table_remain_on_exit_list[] = {
     91 	"off", "on", "failed", NULL
     92 };
     93 static const char *options_table_destroy_unattached_list[] = {
     94 	"off", "on", "keep-last", "keep-group", NULL
     95 };
     96 static const char *options_table_detach_on_destroy_list[] = {
     97 	"off", "on", "no-detached", "previous", "next", NULL
     98 };
     99 static const char *options_table_extended_keys_list[] = {
    100 	"off", "on", "always", NULL
    101 };
    102 static const char *options_table_extended_keys_format_list[] = {
    103 	"csi-u", "xterm", NULL
    104 };
    105 static const char *options_table_allow_passthrough_list[] = {
    106 	"off", "on", "all", NULL
    107 };
    108 
    109 /* Status line format. */
    110 #define OPTIONS_TABLE_STATUS_FORMAT1 \
    111 	"#[align=left range=left #{E:status-left-style}]" \
    112 	"#[push-default]" \
    113 	"#{T;=/#{status-left-length}:status-left}" \
    114 	"#[pop-default]" \
    115 	"#[norange default]" \
    116 	"#[list=on align=#{status-justify}]" \
    117 	"#[list=left-marker]<#[list=right-marker]>#[list=on]" \
    118 	"#{W:" \
    119 		"#[range=window|#{window_index} " \
    120 			"#{E:window-status-style}" \
    121 			"#{?#{&&:#{window_last_flag}," \
    122 				"#{!=:#{E:window-status-last-style},default}}, " \
    123 				"#{E:window-status-last-style}," \
    124 			"}" \
    125 			"#{?#{&&:#{window_bell_flag}," \
    126 				"#{!=:#{E:window-status-bell-style},default}}, " \
    127 				"#{E:window-status-bell-style}," \
    128 				"#{?#{&&:#{||:#{window_activity_flag}," \
    129 					     "#{window_silence_flag}}," \
    130 					"#{!=:" \
    131 					"#{E:window-status-activity-style}," \
    132 					"default}}, " \
    133 					"#{E:window-status-activity-style}," \
    134 				"}" \
    135 			"}" \
    136 		"]" \
    137 		"#[push-default]" \
    138 		"#{T:window-status-format}" \
    139 		"#[pop-default]" \
    140 		"#[norange default]" \
    141 		"#{?loop_last_flag,,#{window-status-separator}}" \
    142 	"," \
    143 		"#[range=window|#{window_index} list=focus " \
    144 			"#{?#{!=:#{E:window-status-current-style},default}," \
    145 				"#{E:window-status-current-style}," \
    146 				"#{E:window-status-style}" \
    147 			"}" \
    148 			"#{?#{&&:#{window_last_flag}," \
    149 				"#{!=:#{E:window-status-last-style},default}}, " \
    150 				"#{E:window-status-last-style}," \
    151 			"}" \
    152 			"#{?#{&&:#{window_bell_flag}," \
    153 				"#{!=:#{E:window-status-bell-style},default}}, " \
    154 				"#{E:window-status-bell-style}," \
    155 				"#{?#{&&:#{||:#{window_activity_flag}," \
    156 					     "#{window_silence_flag}}," \
    157 					"#{!=:" \
    158 					"#{E:window-status-activity-style}," \
    159 					"default}}, " \
    160 					"#{E:window-status-activity-style}," \
    161 				"}" \
    162 			"}" \
    163 		"]" \
    164 		"#[push-default]" \
    165 		"#{T:window-status-current-format}" \
    166 		"#[pop-default]" \
    167 		"#[norange list=on default]" \
    168 		"#{?loop_last_flag,,#{window-status-separator}}" \
    169 	"}" \
    170 	"#[nolist align=right range=right #{E:status-right-style}]" \
    171 	"#[push-default]" \
    172 	"#{T;=/#{status-right-length}:status-right}" \
    173 	"#[pop-default]" \
    174 	"#[norange default]"
    175 #define OPTIONS_TABLE_STATUS_FORMAT2 \
    176 	"#[align=left]#{R: ,#{n:#{session_name}}}P: " \
    177 	"#[norange default]" \
    178 	"#[list=on align=#{status-justify}]" \
    179 	"#[list=left-marker]<#[list=right-marker]>#[list=on]" \
    180 	"#{P:" \
    181 		"#[range=pane|#{pane_id} " \
    182 			"#{E:pane-status-style}" \
    183 		"]" \
    184 		"#[push-default]" \
    185 		"#P[#{pane_width}x#{pane_height}]" \
    186 		"#[pop-default]" \
    187 		"#[norange list=on default]  " \
    188 	"," \
    189 		"#[range=pane|#{pane_id} list=focus " \
    190 			"#{?#{!=:#{E:pane-status-current-style},default}," \
    191 				"#{E:pane-status-current-style}," \
    192 				"#{E:pane-status-style}" \
    193 			"}" \
    194 		"]" \
    195 		"#[push-default]" \
    196 		"#P[#{pane_width}x#{pane_height}]*" \
    197 		"#[pop-default]" \
    198 		"#[norange list=on default] " \
    199 	"}"
    200 #define OPTIONS_TABLE_STATUS_FORMAT3 \
    201 	"#[align=left]#{R: ,#{n:#{session_name}}}S: " \
    202 	"#[norange default]" \
    203 	"#[list=on align=#{status-justify}]" \
    204 	"#[list=left-marker]<#[list=right-marker]>#[list=on]" \
    205 	"#{S:" \
    206 		"#[range=session|#{session_id} " \
    207 			"#{E:session-status-style}" \
    208 		"]" \
    209 		"#[push-default]" \
    210 		"#S#{session_alert}" \
    211 		"#[pop-default]" \
    212 		"#[norange list=on default]  " \
    213 	"," \
    214 		"#[range=session|#{session_id} list=focus " \
    215 			"#{?#{!=:#{E:session-status-current-style},default}," \
    216 					"#{E:session-status-current-style}," \
    217 					"#{E:session-status-style}" \
    218 			"}" \
    219 		"]" \
    220 		"#[push-default]" \
    221 		"#S*#{session_alert}" \
    222 		"#[pop-default]" \
    223 		"#[norange list=on default] " \
    224 	"}"
    225 static const char *options_table_status_format_default[] = {
    226 	OPTIONS_TABLE_STATUS_FORMAT1,
    227 	OPTIONS_TABLE_STATUS_FORMAT2,
    228 	OPTIONS_TABLE_STATUS_FORMAT3,
    229 	NULL
    230 };
    231 
    232 /* Helpers for hook options. */
    233 #define OPTIONS_TABLE_HOOK(hook_name, default_value) \
    234 	{ .name = hook_name, \
    235 	  .type = OPTIONS_TABLE_COMMAND, \
    236 	  .scope = OPTIONS_TABLE_SESSION, \
    237 	  .flags = OPTIONS_TABLE_IS_ARRAY|OPTIONS_TABLE_IS_HOOK, \
    238 	  .default_str = default_value,	\
    239 	  .separator = "" \
    240 	}
    241 
    242 #define OPTIONS_TABLE_PANE_HOOK(hook_name, default_value) \
    243 	{ .name = hook_name, \
    244 	  .type = OPTIONS_TABLE_COMMAND, \
    245 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE, \
    246 	  .flags = OPTIONS_TABLE_IS_ARRAY|OPTIONS_TABLE_IS_HOOK, \
    247 	  .default_str = default_value,	\
    248 	  .separator = "" \
    249 	}
    250 
    251 #define OPTIONS_TABLE_WINDOW_HOOK(hook_name, default_value) \
    252 	{ .name = hook_name, \
    253 	  .type = OPTIONS_TABLE_COMMAND, \
    254 	  .scope = OPTIONS_TABLE_WINDOW, \
    255 	  .flags = OPTIONS_TABLE_IS_ARRAY|OPTIONS_TABLE_IS_HOOK, \
    256 	  .default_str = default_value,	\
    257 	  .separator = "" \
    258 	}
    259 
    260 /* Map of name conversions. */
    261 const struct options_name_map options_other_names[] = {
    262 	{ "display-panes-color", "display-panes-colour" },
    263 	{ "display-panes-active-color", "display-panes-active-colour" },
    264 	{ "clock-mode-color", "clock-mode-colour" },
    265 	{ "cursor-color", "cursor-colour" },
    266 	{ "prompt-cursor-color", "prompt-cursor-colour" },
    267 	{ "pane-colors", "pane-colours" },
    268 	{ NULL, NULL }
    269 };
    270 
    271 /* Top-level options. */
    272 const struct options_table_entry options_table[] = {
    273 	/* Server options. */
    274 	{ .name = "backspace",
    275 	  .type = OPTIONS_TABLE_KEY,
    276 	  .scope = OPTIONS_TABLE_SERVER,
    277 	  .default_num = '\177',
    278 	  .text = "The key to send for backspace."
    279 	},
    280 
    281 	{ .name = "buffer-limit",
    282 	  .type = OPTIONS_TABLE_NUMBER,
    283 	  .scope = OPTIONS_TABLE_SERVER,
    284 	  .minimum = 1,
    285 	  .maximum = INT_MAX,
    286 	  .default_num = 50,
    287 	  .text = "The maximum number of automatic buffers. "
    288 		  "When this is reached, the oldest buffer is deleted."
    289 	},
    290 
    291 	{ .name = "command-alias",
    292 	  .type = OPTIONS_TABLE_STRING,
    293 	  .scope = OPTIONS_TABLE_SERVER,
    294 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    295 	  .default_str = "split-pane=split-window,"
    296 			 "splitp=split-window,"
    297 			 "server-info=show-messages -JT,"
    298 			 "info=show-messages -JT,"
    299 			 "choose-window=choose-tree -w,"
    300 			 "choose-session=choose-tree -s",
    301 	  .separator = ",",
    302 	  .text = "Array of command aliases. "
    303 		  "Each entry is an alias and a command separated by '='."
    304 	},
    305 
    306 	{ .name = "codepoint-widths",
    307 	  .type = OPTIONS_TABLE_STRING,
    308 	  .scope = OPTIONS_TABLE_SERVER,
    309 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    310 	  .default_str = "",
    311 	  .separator = ",",
    312 	  .text = "Array of override widths for Unicode codepoints."
    313 	},
    314 
    315 	{ .name = "copy-command",
    316 	  .type = OPTIONS_TABLE_STRING,
    317 	  .scope = OPTIONS_TABLE_SERVER,
    318 	  .default_str = "",
    319 	  .text = "Shell command run when text is copied. "
    320 		  "If empty, no command is run."
    321 	},
    322 
    323 	{ .name = "cursor-colour",
    324 	  .type = OPTIONS_TABLE_COLOUR,
    325 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
    326 	  .default_num = -1,
    327 	  .text = "Colour of the cursor."
    328 	},
    329 
    330 	{ .name = "cursor-style",
    331 	  .type = OPTIONS_TABLE_CHOICE,
    332 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
    333 	  .choices = options_table_cursor_style_list,
    334 	  .default_num = 0,
    335 	  .text = "Style of the cursor."
    336 	},
    337 
    338 	{ .name = "default-client-command",
    339 	  .type = OPTIONS_TABLE_COMMAND,
    340 	  .scope = OPTIONS_TABLE_SERVER,
    341 	  .default_str = "new-session",
    342 	  .text = "Default command to run when tmux is run without a command."
    343 	},
    344 
    345 	{ .name = "default-terminal",
    346 	  .type = OPTIONS_TABLE_STRING,
    347 	  .scope = OPTIONS_TABLE_SERVER,
    348 	  .default_str = TMUX_TERM,
    349 	  .text = "Default for the 'TERM' environment variable."
    350 	},
    351 
    352 	{ .name = "editor",
    353 	  .type = OPTIONS_TABLE_STRING,
    354 	  .scope = OPTIONS_TABLE_SERVER,
    355 	  .default_str = _PATH_VI,
    356 	  .text = "Editor run to edit files."
    357 	},
    358 
    359 	{ .name = "escape-time",
    360 	  .type = OPTIONS_TABLE_NUMBER,
    361 	  .scope = OPTIONS_TABLE_SERVER,
    362 	  .minimum = 0,
    363 	  .maximum = INT_MAX,
    364 	  .default_num = 10,
    365 	  .unit = "milliseconds",
    366 	  .text = "Time to wait before assuming a key is Escape."
    367 	},
    368 
    369 	{ .name = "exit-empty",
    370 	  .type = OPTIONS_TABLE_FLAG,
    371 	  .scope = OPTIONS_TABLE_SERVER,
    372 	  .default_num = 1,
    373 	  .text = "Whether the server should exit if there are no sessions."
    374 	},
    375 
    376 	{ .name = "exit-unattached",
    377 	  .type = OPTIONS_TABLE_FLAG,
    378 	  .scope = OPTIONS_TABLE_SERVER,
    379 	  .default_num = 0,
    380 	  .text = "Whether the server should exit if there are no attached "
    381 		  "clients."
    382 	},
    383 
    384 	{ .name = "extended-keys",
    385 	  .type = OPTIONS_TABLE_CHOICE,
    386 	  .scope = OPTIONS_TABLE_SERVER,
    387 	  .choices = options_table_extended_keys_list,
    388 	  .default_num = 0,
    389 	  .text = "Whether to request extended key sequences from terminals "
    390 		  "that support it."
    391 	},
    392 
    393 	{ .name = "extended-keys-format",
    394 	  .type = OPTIONS_TABLE_CHOICE,
    395 	  .scope = OPTIONS_TABLE_SERVER,
    396 	  .choices = options_table_extended_keys_format_list,
    397 	  .default_num = 1,
    398 	  .text = "The format of emitted extended key sequences."
    399 	},
    400 
    401 	{ .name = "focus-events",
    402 	  .type = OPTIONS_TABLE_FLAG,
    403 	  .scope = OPTIONS_TABLE_SERVER,
    404 	  .default_num = 0,
    405 	  .text = "Whether to send focus events to applications."
    406 	},
    407 
    408 	{ .name = "history-file",
    409 	  .type = OPTIONS_TABLE_STRING,
    410 	  .scope = OPTIONS_TABLE_SERVER,
    411 	  .default_str = "",
    412 	  .text = "Location of the command prompt history file. "
    413 		  "Empty does not write a history file."
    414 	},
    415 
    416 	{ .name = "input-buffer-size",
    417 	  .type = OPTIONS_TABLE_NUMBER,
    418 	  .scope = OPTIONS_TABLE_SERVER,
    419 	  .minimum = INPUT_BUF_DEFAULT_SIZE,
    420 	  .maximum = UINT_MAX,
    421 	  .default_num = INPUT_BUF_DEFAULT_SIZE,
    422 	  .text = "Number of bytes accepted in a single input before dropping."
    423 	},
    424 
    425 	{ .name = "menu-style",
    426 	  .type = OPTIONS_TABLE_STRING,
    427 	  .scope = OPTIONS_TABLE_WINDOW,
    428 	  .flags = OPTIONS_TABLE_IS_STYLE,
    429 	  .default_str = "default",
    430 	  .separator = ",",
    431 	  .text = "Default style of menu."
    432 	},
    433 
    434 	{ .name = "menu-selected-style",
    435 	  .type = OPTIONS_TABLE_STRING,
    436 	  .scope = OPTIONS_TABLE_WINDOW,
    437 	  .flags = OPTIONS_TABLE_IS_STYLE,
    438 	  .default_str = "bg=yellow,fg=black",
    439 	  .separator = ",",
    440 	  .text = "Default style of selected menu item."
    441 	},
    442 
    443 	{ .name = "menu-border-style",
    444 	  .type = OPTIONS_TABLE_STRING,
    445 	  .scope = OPTIONS_TABLE_WINDOW,
    446 	  .default_str = "default",
    447 	  .flags = OPTIONS_TABLE_IS_STYLE,
    448 	  .separator = ",",
    449 	  .text = "Default style of menu borders."
    450 	},
    451 
    452 	{ .name = "menu-border-lines",
    453 	  .type = OPTIONS_TABLE_CHOICE,
    454 	  .scope = OPTIONS_TABLE_WINDOW,
    455 	  .choices = options_table_popup_border_lines_list,
    456 	  .default_num = BOX_LINES_SINGLE,
    457 	  .text = "Type of characters used to draw menu border lines. Some of "
    458 		  "these are only supported on terminals with UTF-8 support."
    459 	},
    460 
    461 	{ .name = "message-limit",
    462 	  .type = OPTIONS_TABLE_NUMBER,
    463 	  .scope = OPTIONS_TABLE_SERVER,
    464 	  .minimum = 0,
    465 	  .maximum = INT_MAX,
    466 	  .default_num = 1000,
    467 	  .text = "Maximum number of server messages to keep."
    468 	},
    469 
    470 	{ .name = "prefix-timeout",
    471 	  .type = OPTIONS_TABLE_NUMBER,
    472 	  .scope = OPTIONS_TABLE_SERVER,
    473 	  .minimum = 0,
    474 	  .maximum = INT_MAX,
    475 	  .default_num = 0,
    476 	  .unit = "milliseconds",
    477 	  .text = "The timeout for the prefix key if no subsequent key is "
    478 		  "pressed. Zero means disabled."
    479 	},
    480 
    481 	{ .name = "prompt-history-limit",
    482 	  .type = OPTIONS_TABLE_NUMBER,
    483 	  .scope = OPTIONS_TABLE_SERVER,
    484 	  .minimum = 0,
    485 	  .maximum = INT_MAX,
    486 	  .default_num = 100,
    487 	  .text = "Maximum number of commands to keep in history."
    488 	},
    489 
    490 	{ .name = "set-clipboard",
    491 	  .type = OPTIONS_TABLE_CHOICE,
    492 	  .scope = OPTIONS_TABLE_SERVER,
    493 	  .choices = options_table_set_clipboard_list,
    494 	  .default_num = 1,
    495 	  .text = "Whether to attempt to set the system clipboard ('on' or "
    496 		  "'external') and whether to allow applications to create "
    497 		  "paste buffers with an escape sequence ('on' only)."
    498 	},
    499 
    500 	{ .name = "terminal-overrides",
    501 	  .type = OPTIONS_TABLE_STRING,
    502 	  .scope = OPTIONS_TABLE_SERVER,
    503 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    504 	  .default_str = "linux*:AX@",
    505 	  .separator = ",",
    506 	  .text = "List of terminal capabilities overrides."
    507 	},
    508 
    509 	{ .name = "terminal-features",
    510 	  .type = OPTIONS_TABLE_STRING,
    511 	  .scope = OPTIONS_TABLE_SERVER,
    512 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    513 	  .default_str = "xterm*:clipboard:ccolour:cstyle:focus:title,"
    514 			 "screen*:title,"
    515 			 "rxvt*:ignorefkeys",
    516 	  .separator = ",",
    517 	  .text = "List of terminal features, used if they cannot be "
    518 		  "automatically detected."
    519 	},
    520 
    521 	{ .name = "user-keys",
    522 	  .type = OPTIONS_TABLE_STRING,
    523 	  .scope = OPTIONS_TABLE_SERVER,
    524 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    525 	  .default_str = "",
    526 	  .separator = ",",
    527 	  .text = "User key assignments. "
    528 		  "Each sequence in the list is translated into a key: "
    529 		  "'User0', 'User1' and so on."
    530 	},
    531 
    532 	{ .name = "variation-selector-always-wide",
    533 	  .type = OPTIONS_TABLE_FLAG,
    534 	  .scope = OPTIONS_TABLE_SERVER,
    535 	  .default_num = 1,
    536 	  .text = "If the Unicode VS16 codepoint should always be treated as a "
    537 		  "wide character."
    538 	},
    539 
    540 	/* Session options. */
    541 	{ .name = "activity-action",
    542 	  .type = OPTIONS_TABLE_CHOICE,
    543 	  .scope = OPTIONS_TABLE_SESSION,
    544 	  .choices = options_table_bell_action_list,
    545 	  .default_num = ALERT_OTHER,
    546 	  .text = "Action to take on an activity alert."
    547 	},
    548 
    549 	{ .name = "assume-paste-time",
    550 	  .type = OPTIONS_TABLE_NUMBER,
    551 	  .scope = OPTIONS_TABLE_SESSION,
    552 	  .minimum = 0,
    553 	  .maximum = INT_MAX,
    554 	  .default_num = 1,
    555 	  .unit = "milliseconds",
    556 	  .text = "Maximum time between input to assume it is pasting rather "
    557 		  "than typing."
    558 	},
    559 
    560 	{ .name = "base-index",
    561 	  .type = OPTIONS_TABLE_NUMBER,
    562 	  .scope = OPTIONS_TABLE_SESSION,
    563 	  .minimum = 0,
    564 	  .maximum = INT_MAX,
    565 	  .default_num = 0,
    566 	  .text = "Default index of the first window in each session."
    567 	},
    568 
    569 	{ .name = "bell-action",
    570 	  .type = OPTIONS_TABLE_CHOICE,
    571 	  .scope = OPTIONS_TABLE_SESSION,
    572 	  .choices = options_table_bell_action_list,
    573 	  .default_num = ALERT_ANY,
    574 	  .text = "Action to take on a bell alert."
    575 	},
    576 
    577 	{ .name = "default-command",
    578 	  .type = OPTIONS_TABLE_STRING,
    579 	  .scope = OPTIONS_TABLE_SESSION,
    580 	  .default_str = "",
    581 	  .text = "Default command to run in new panes. If empty, a shell is "
    582 		  "started."
    583 	},
    584 
    585 	{ .name = "default-shell",
    586 	  .type = OPTIONS_TABLE_STRING,
    587 	  .scope = OPTIONS_TABLE_SESSION,
    588 	  .default_str = _PATH_BSHELL,
    589 	  .text = "Location of default shell."
    590 	},
    591 
    592 	{ .name = "default-size",
    593 	  .type = OPTIONS_TABLE_STRING,
    594 	  .scope = OPTIONS_TABLE_SESSION,
    595 	  .pattern = "[0-9]*x[0-9]*",
    596 	  .default_str = "80x24",
    597 	  .text = "Initial size of new sessions."
    598 	},
    599 
    600 	{ .name = "destroy-unattached",
    601 	  .type = OPTIONS_TABLE_CHOICE,
    602 	  .scope = OPTIONS_TABLE_SESSION,
    603 	  .choices = options_table_destroy_unattached_list,
    604 	  .default_num = 0,
    605 	  .text = "Whether to destroy sessions when they have no attached "
    606 		  "clients, or keep the last session whether in the group."
    607 	},
    608 
    609 	{ .name = "detach-on-destroy",
    610 	  .type = OPTIONS_TABLE_CHOICE,
    611 	  .scope = OPTIONS_TABLE_SESSION,
    612 	  .choices = options_table_detach_on_destroy_list,
    613 	  .default_num = 1,
    614 	  .text = "Whether to detach when a session is destroyed, or switch "
    615 		  "the client to another session if any exist."
    616 	},
    617 
    618 	{ .name = "display-panes-active-colour",
    619 	  .type = OPTIONS_TABLE_COLOUR,
    620 	  .scope = OPTIONS_TABLE_SESSION,
    621 	  .default_num = 1,
    622 	  .text = "Colour of the active pane for 'display-panes'."
    623 	},
    624 
    625 	{ .name = "display-panes-colour",
    626 	  .type = OPTIONS_TABLE_COLOUR,
    627 	  .scope = OPTIONS_TABLE_SESSION,
    628 	  .default_num = 4,
    629 	  .text = "Colour of not active panes for 'display-panes'."
    630 	},
    631 
    632 	{ .name = "display-panes-time",
    633 	  .type = OPTIONS_TABLE_NUMBER,
    634 	  .scope = OPTIONS_TABLE_SESSION,
    635 	  .minimum = 1,
    636 	  .maximum = INT_MAX,
    637 	  .default_num = 1000,
    638 	  .unit = "milliseconds",
    639 	  .text = "Time for which 'display-panes' should show pane numbers."
    640 	},
    641 
    642 	{ .name = "display-time",
    643 	  .type = OPTIONS_TABLE_NUMBER,
    644 	  .scope = OPTIONS_TABLE_SESSION,
    645 	  .minimum = 0,
    646 	  .maximum = INT_MAX,
    647 	  .default_num = 750,
    648 	  .unit = "milliseconds",
    649 	  .text = "Time for which status line messages should appear."
    650 	},
    651 
    652 	{ .name = "history-limit",
    653 	  .type = OPTIONS_TABLE_NUMBER,
    654 	  .scope = OPTIONS_TABLE_SESSION,
    655 	  .minimum = 0,
    656 	  .maximum = INT_MAX,
    657 	  .default_num = 2000,
    658 	  .unit = "lines",
    659 	  .text = "Maximum number of lines to keep in the history for each "
    660 		  "pane. "
    661 		  "If changed, the new value applies only to new panes."
    662 	},
    663 
    664 	{ .name = "initial-repeat-time",
    665 	  .type = OPTIONS_TABLE_NUMBER,
    666 	  .scope = OPTIONS_TABLE_SESSION,
    667 	  .minimum = 0,
    668 	  .maximum = 2000000,
    669 	  .default_num = 0,
    670 	  .unit = "milliseconds",
    671 	  .text = "Time to wait for a key binding to repeat the first time the "
    672 		  "key is pressed, if it is bound with the '-r' flag. "
    673 		  "Subsequent presses use the 'repeat-time' option."
    674 	},
    675 
    676 	{ .name = "key-table",
    677 	  .type = OPTIONS_TABLE_STRING,
    678 	  .scope = OPTIONS_TABLE_SESSION,
    679 	  .default_str = "root",
    680 	  .text = "Default key table. "
    681 		  "Key presses are first looked up in this table."
    682 	},
    683 
    684 	{ .name = "lock-after-time",
    685 	  .type = OPTIONS_TABLE_NUMBER,
    686 	  .scope = OPTIONS_TABLE_SESSION,
    687 	  .minimum = 0,
    688 	  .maximum = INT_MAX,
    689 	  .default_num = 0,
    690 	  .unit = "seconds",
    691 	  .text = "Time after which a client is locked if not used."
    692 	},
    693 
    694 	{ .name = "lock-command",
    695 	  .type = OPTIONS_TABLE_STRING,
    696 	  .scope = OPTIONS_TABLE_SESSION,
    697 	  .default_str = TMUX_LOCK_CMD,
    698 	  .text = "Shell command to run to lock a client."
    699 	},
    700 
    701 	{ .name = "message-command-style",
    702 	  .type = OPTIONS_TABLE_STRING,
    703 	  .scope = OPTIONS_TABLE_SESSION,
    704 	  .default_str = "bg=black,fg=yellow",
    705 	  .flags = OPTIONS_TABLE_IS_STYLE,
    706 	  .separator = ",",
    707 	  .text = "Style of the command prompt when in command mode, if "
    708 		  "'mode-keys' is set to 'vi'."
    709 	},
    710 
    711 	{ .name = "message-line",
    712 	  .type = OPTIONS_TABLE_CHOICE,
    713 	  .scope = OPTIONS_TABLE_SESSION,
    714 	  .choices = options_table_message_line_list,
    715 	  .default_num = 0,
    716 	  .text = "Position (line) of messages and the command prompt."
    717 	},
    718 
    719 	{ .name = "message-style",
    720 	  .type = OPTIONS_TABLE_STRING,
    721 	  .scope = OPTIONS_TABLE_SESSION,
    722 	  .default_str = "bg=yellow,fg=black",
    723 	  .flags = OPTIONS_TABLE_IS_STYLE,
    724 	  .separator = ",",
    725 	  .text = "Style of messages and the command prompt."
    726 	},
    727 
    728 	{ .name = "mouse",
    729 	  .type = OPTIONS_TABLE_FLAG,
    730 	  .scope = OPTIONS_TABLE_SESSION,
    731 	  .default_num = 0,
    732 	  .text = "Whether the mouse is recognised and mouse key bindings are "
    733 		  "executed. "
    734 		  "Applications inside panes can use the mouse even when 'off'."
    735 	},
    736 
    737 	{ .name = "prefix",
    738 	  .type = OPTIONS_TABLE_KEY,
    739 	  .scope = OPTIONS_TABLE_SESSION,
    740 	  .default_num = 'b'|KEYC_CTRL,
    741 	  .text = "The prefix key."
    742 	},
    743 
    744 	{ .name = "prefix2",
    745 	  .type = OPTIONS_TABLE_KEY,
    746 	  .scope = OPTIONS_TABLE_SESSION,
    747 	  .default_num = KEYC_NONE,
    748 	  .text = "A second prefix key."
    749 	},
    750 
    751 	{ .name = "renumber-windows",
    752 	  .type = OPTIONS_TABLE_FLAG,
    753 	  .scope = OPTIONS_TABLE_SESSION,
    754 	  .default_num = 0,
    755 	  .text = "Whether windows are automatically renumbered rather than "
    756 		  "leaving gaps."
    757 	},
    758 
    759 	{ .name = "repeat-time",
    760 	  .type = OPTIONS_TABLE_NUMBER,
    761 	  .scope = OPTIONS_TABLE_SESSION,
    762 	  .minimum = 0,
    763 	  .maximum = 2000000,
    764 	  .default_num = 500,
    765 	  .unit = "milliseconds",
    766 	  .text = "Time to wait for a key binding to repeat, if it is bound "
    767 		  "with the '-r' flag."
    768 	},
    769 
    770 	{ .name = "set-titles",
    771 	  .type = OPTIONS_TABLE_FLAG,
    772 	  .scope = OPTIONS_TABLE_SESSION,
    773 	  .default_num = 0,
    774 	  .text = "Whether to set the terminal title, if supported."
    775 	},
    776 
    777 	{ .name = "set-titles-string",
    778 	  .type = OPTIONS_TABLE_STRING,
    779 	  .scope = OPTIONS_TABLE_SESSION,
    780 	  .default_str = "#S:#I:#W - \"#T\" #{session_alerts}",
    781 	  .text = "Format of the terminal title to set."
    782 	},
    783 
    784 	{ .name = "silence-action",
    785 	  .type = OPTIONS_TABLE_CHOICE,
    786 	  .scope = OPTIONS_TABLE_SESSION,
    787 	  .choices = options_table_bell_action_list,
    788 	  .default_num = ALERT_OTHER,
    789 	  .text = "Action to take on a silence alert."
    790 	},
    791 
    792 	{ .name = "status",
    793 	  .type = OPTIONS_TABLE_CHOICE,
    794 	  .scope = OPTIONS_TABLE_SESSION,
    795 	  .choices = options_table_status_list,
    796 	  .default_num = 1,
    797 	  .text = "Number of lines in the status line."
    798 	},
    799 
    800 	{ .name = "status-bg",
    801 	  .type = OPTIONS_TABLE_COLOUR,
    802 	  .scope = OPTIONS_TABLE_SESSION,
    803 	  .default_num = 8,
    804 	  .text = "Background colour of the status line. This option is "
    805 		  "deprecated, use 'status-style' instead."
    806 	},
    807 
    808 	{ .name = "status-fg",
    809 	  .type = OPTIONS_TABLE_COLOUR,
    810 	  .scope = OPTIONS_TABLE_SESSION,
    811 	  .default_num = 8,
    812 	  .text = "Foreground colour of the status line. This option is "
    813 		  "deprecated, use 'status-style' instead."
    814 	},
    815 
    816 	{ .name = "status-format",
    817 	  .type = OPTIONS_TABLE_STRING,
    818 	  .scope = OPTIONS_TABLE_SESSION,
    819 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    820 	  .default_arr = options_table_status_format_default,
    821 	  .text = "Formats for the status lines. "
    822 		  "Each array member is the format for one status line. "
    823 		  "The default status line is made up of several components "
    824 		  "which may be configured individually with other options such "
    825 		  "as 'status-left'."
    826 	},
    827 
    828 	{ .name = "status-interval",
    829 	  .type = OPTIONS_TABLE_NUMBER,
    830 	  .scope = OPTIONS_TABLE_SESSION,
    831 	  .minimum = 0,
    832 	  .maximum = INT_MAX,
    833 	  .default_num = 15,
    834 	  .unit = "seconds",
    835 	  .text = "Number of seconds between status line updates."
    836 	},
    837 
    838 	{ .name = "status-justify",
    839 	  .type = OPTIONS_TABLE_CHOICE,
    840 	  .scope = OPTIONS_TABLE_SESSION,
    841 	  .choices = options_table_status_justify_list,
    842 	  .default_num = 0,
    843 	  .text = "Position of the window list in the status line."
    844 	},
    845 
    846 	{ .name = "status-keys",
    847 	  .type = OPTIONS_TABLE_CHOICE,
    848 	  .scope = OPTIONS_TABLE_SESSION,
    849 	  .choices = options_table_status_keys_list,
    850 	  .default_num = MODEKEY_EMACS,
    851 	  .text = "Key set to use at the command prompt."
    852 	},
    853 
    854 	{ .name = "status-left",
    855 	  .type = OPTIONS_TABLE_STRING,
    856 	  .scope = OPTIONS_TABLE_SESSION,
    857 	  .default_str = "[#{session_name}] ",
    858 	  .text = "Contents of the left side of the status line."
    859 	},
    860 
    861 	{ .name = "status-left-length",
    862 	  .type = OPTIONS_TABLE_NUMBER,
    863 	  .scope = OPTIONS_TABLE_SESSION,
    864 	  .minimum = 0,
    865 	  .maximum = SHRT_MAX,
    866 	  .default_num = 10,
    867 	  .text = "Maximum width of the left side of the status line."
    868 	},
    869 
    870 	{ .name = "status-left-style",
    871 	  .type = OPTIONS_TABLE_STRING,
    872 	  .scope = OPTIONS_TABLE_SESSION,
    873 	  .default_str = "default",
    874 	  .flags = OPTIONS_TABLE_IS_STYLE,
    875 	  .separator = ",",
    876 	  .text = "Style of the left side of the status line."
    877 	},
    878 
    879 	{ .name = "status-position",
    880 	  .type = OPTIONS_TABLE_CHOICE,
    881 	  .scope = OPTIONS_TABLE_SESSION,
    882 	  .choices = options_table_status_position_list,
    883 	  .default_num = 1,
    884 	  .text = "Position of the status line."
    885 	},
    886 
    887 	{ .name = "status-right",
    888 	  .type = OPTIONS_TABLE_STRING,
    889 	  .scope = OPTIONS_TABLE_SESSION,
    890 	  .default_str = "#{?window_bigger,"
    891 			 "[#{window_offset_x}#,#{window_offset_y}] ,}"
    892 			 "\"#{=21:pane_title}\" %H:%M %d-%b-%y",
    893 	  .text = "Contents of the right side of the status line."
    894 
    895 	},
    896 
    897 	{ .name = "status-right-length",
    898 	  .type = OPTIONS_TABLE_NUMBER,
    899 	  .scope = OPTIONS_TABLE_SESSION,
    900 	  .minimum = 0,
    901 	  .maximum = SHRT_MAX,
    902 	  .default_num = 40,
    903 	  .text = "Maximum width of the right side of the status line."
    904 	},
    905 
    906 	{ .name = "status-right-style",
    907 	  .type = OPTIONS_TABLE_STRING,
    908 	  .scope = OPTIONS_TABLE_SESSION,
    909 	  .default_str = "default",
    910 	  .flags = OPTIONS_TABLE_IS_STYLE,
    911 	  .separator = ",",
    912 	  .text = "Style of the right side of the status line."
    913 	},
    914 
    915 	{ .name = "status-style",
    916 	  .type = OPTIONS_TABLE_STRING,
    917 	  .scope = OPTIONS_TABLE_SESSION,
    918 	  .default_str = "bg=green,fg=black",
    919 	  .flags = OPTIONS_TABLE_IS_STYLE,
    920 	  .separator = ",",
    921 	  .text = "Style of the status line."
    922 	},
    923 
    924 	{ .name = "pane-status-current-style",
    925 	  .type = OPTIONS_TABLE_STRING,
    926 	  .scope = OPTIONS_TABLE_WINDOW,
    927 	  .default_str = "default",
    928 	  .flags = OPTIONS_TABLE_IS_STYLE,
    929 	  .separator = ",",
    930 	  .text = "Style of the current pane in the status line."
    931 	},
    932 
    933 	{ .name = "pane-status-style",
    934 	  .type = OPTIONS_TABLE_STRING,
    935 	  .scope = OPTIONS_TABLE_WINDOW,
    936 	  .default_str = "default",
    937 	  .flags = OPTIONS_TABLE_IS_STYLE,
    938 	  .separator = ",",
    939 	  .text = "Style of panes in the status line, except the current "
    940 		  "pane."
    941 	},
    942 
    943 	{ .name = "prompt-cursor-colour",
    944 	  .type = OPTIONS_TABLE_COLOUR,
    945 	  .scope = OPTIONS_TABLE_SESSION,
    946 	  .default_num = 6,
    947 	  .text = "Colour of the cursor when in the command prompt."
    948 	},
    949 
    950 	{ .name = "prompt-cursor-style",
    951 	  .type = OPTIONS_TABLE_CHOICE,
    952 	  .scope = OPTIONS_TABLE_SESSION,
    953 	  .choices = options_table_cursor_style_list,
    954 	  .default_num = 0,
    955 	  .text = "Style of the cursor when in the command prompt."
    956 	},
    957 
    958 	{ .name = "session-status-current-style",
    959 	  .type = OPTIONS_TABLE_STRING,
    960 	  .scope = OPTIONS_TABLE_WINDOW,
    961 	  .default_str = "default",
    962 	  .flags = OPTIONS_TABLE_IS_STYLE,
    963 	  .separator = ",",
    964 	  .text = "Style of the current session in the status line."
    965 	},
    966 
    967 	{ .name = "session-status-style",
    968 	  .type = OPTIONS_TABLE_STRING,
    969 	  .scope = OPTIONS_TABLE_WINDOW,
    970 	  .default_str = "default",
    971 	  .flags = OPTIONS_TABLE_IS_STYLE,
    972 	  .separator = ",",
    973 	  .text = "Style of sessions in the status line, except the current "
    974 		  "session."
    975 	},
    976 
    977 	{ .name = "update-environment",
    978 	  .type = OPTIONS_TABLE_STRING,
    979 	  .scope = OPTIONS_TABLE_SESSION,
    980 	  .flags = OPTIONS_TABLE_IS_ARRAY,
    981 	  .default_str = "DISPLAY KRB5CCNAME MSYSTEM SSH_ASKPASS SSH_AUTH_SOCK "
    982 			 "SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY",
    983 	  .text = "List of environment variables to update in the session "
    984 		  "environment when a client is attached."
    985 	},
    986 
    987 	{ .name = "visual-activity",
    988 	  .type = OPTIONS_TABLE_CHOICE,
    989 	  .scope = OPTIONS_TABLE_SESSION,
    990 	  .choices = options_table_visual_bell_list,
    991 	  .default_num = VISUAL_OFF,
    992 	  .text = "How activity alerts should be shown: a message ('on'), "
    993 		  "a message and a bell ('both') or nothing ('off')."
    994 	},
    995 
    996 	{ .name = "visual-bell",
    997 	  .type = OPTIONS_TABLE_CHOICE,
    998 	  .scope = OPTIONS_TABLE_SESSION,
    999 	  .choices = options_table_visual_bell_list,
   1000 	  .default_num = VISUAL_OFF,
   1001 	  .text = "How bell alerts should be shown: a message ('on'), "
   1002 		  "a message and a bell ('both') or nothing ('off')."
   1003 	},
   1004 
   1005 	{ .name = "visual-silence",
   1006 	  .type = OPTIONS_TABLE_CHOICE,
   1007 	  .scope = OPTIONS_TABLE_SESSION,
   1008 	  .choices = options_table_visual_bell_list,
   1009 	  .default_num = VISUAL_OFF,
   1010 	  .text = "How silence alerts should be shown: a message ('on'), "
   1011 		  "a message and a bell ('both') or nothing ('off')."
   1012 	},
   1013 
   1014 	{ .name = "word-separators",
   1015 	  .type = OPTIONS_TABLE_STRING,
   1016 	  .scope = OPTIONS_TABLE_SESSION,
   1017 	  /*
   1018 	   * The set of non-alphanumeric printable ASCII characters minus the
   1019 	   * underscore.
   1020 	   */
   1021 	  .default_str = "!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~",
   1022 	  .text = "Characters considered to separate words."
   1023 	},
   1024 
   1025 	/* Window options. */
   1026 	{ .name = "aggressive-resize",
   1027 	  .type = OPTIONS_TABLE_FLAG,
   1028 	  .scope = OPTIONS_TABLE_WINDOW,
   1029 	  .default_num = 0,
   1030 	  .text = "When 'window-size' is 'smallest', whether the maximum size "
   1031 		  "of a window is the smallest attached session where it is "
   1032 		  "the current window ('on') or the smallest session it is "
   1033 		  "linked to ('off')."
   1034 	},
   1035 
   1036 	{ .name = "allow-passthrough",
   1037 	  .type = OPTIONS_TABLE_CHOICE,
   1038 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1039 	  .choices = options_table_allow_passthrough_list,
   1040 	  .default_num = 0,
   1041 	  .text = "Whether applications are allowed to use the escape sequence "
   1042 		  "to bypass tmux. Can be 'off' (disallowed), 'on' (allowed "
   1043 		  "if the pane is visible), or 'all' (allowed even if the pane "
   1044 		  "is invisible)."
   1045 	},
   1046 
   1047 	{ .name = "allow-rename",
   1048 	  .type = OPTIONS_TABLE_FLAG,
   1049 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1050 	  .default_num = 0,
   1051 	  .text = "Whether applications are allowed to use the escape sequence "
   1052 		  "to rename windows."
   1053 	},
   1054 
   1055 	{ .name = "allow-set-title",
   1056 	  .type = OPTIONS_TABLE_FLAG,
   1057 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1058 	  .default_num = 1,
   1059 	  .text = "Whether applications are allowed to use the escape sequence "
   1060 		  "to set the pane title."
   1061 	},
   1062 
   1063 	{ .name = "alternate-screen",
   1064 	  .type = OPTIONS_TABLE_FLAG,
   1065 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1066 	  .default_num = 1,
   1067 	  .text = "Whether applications are allowed to use the alternate "
   1068 		  "screen."
   1069 	},
   1070 
   1071 	{ .name = "automatic-rename",
   1072 	  .type = OPTIONS_TABLE_FLAG,
   1073 	  .scope = OPTIONS_TABLE_WINDOW,
   1074 	  .default_num = 1,
   1075 	  .text = "Whether windows are automatically renamed."
   1076 	},
   1077 
   1078 	{ .name = "automatic-rename-format",
   1079 	  .type = OPTIONS_TABLE_STRING,
   1080 	  .scope = OPTIONS_TABLE_WINDOW,
   1081 	  .default_str = "#{?pane_in_mode,[tmux],#{pane_current_command}}"
   1082 			 "#{?pane_dead,[dead],}",
   1083 	  .text = "Format used to automatically rename windows."
   1084 	},
   1085 
   1086 	{ .name = "clock-mode-colour",
   1087 	  .type = OPTIONS_TABLE_COLOUR,
   1088 	  .scope = OPTIONS_TABLE_WINDOW,
   1089 	  .default_num = 4,
   1090 	  .text = "Colour of the clock in clock mode."
   1091 	},
   1092 
   1093 	{ .name = "clock-mode-style",
   1094 	  .type = OPTIONS_TABLE_CHOICE,
   1095 	  .scope = OPTIONS_TABLE_WINDOW,
   1096 	  .choices = options_table_clock_mode_style_list,
   1097 	  .default_num = 1,
   1098 	  .text = "Time format of the clock in clock mode."
   1099 	},
   1100 
   1101 	{ .name = "copy-mode-match-style",
   1102 	  .type = OPTIONS_TABLE_STRING,
   1103 	  .scope = OPTIONS_TABLE_WINDOW,
   1104 	  .default_str = "bg=cyan,fg=black",
   1105 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1106 	  .separator = ",",
   1107 	  .text = "Style of search matches in copy mode."
   1108 	},
   1109 
   1110 	{ .name = "copy-mode-current-match-style",
   1111 	  .type = OPTIONS_TABLE_STRING,
   1112 	  .scope = OPTIONS_TABLE_WINDOW,
   1113 	  .default_str = "bg=magenta,fg=black",
   1114 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1115 	  .separator = ",",
   1116 	  .text = "Style of the current search match in copy mode."
   1117 	},
   1118 
   1119 	{ .name = "copy-mode-mark-style",
   1120 	  .type = OPTIONS_TABLE_STRING,
   1121 	  .scope = OPTIONS_TABLE_WINDOW,
   1122 	  .default_str = "bg=red,fg=black",
   1123 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1124 	  .separator = ",",
   1125 	  .text = "Style of the marked line in copy mode."
   1126 	},
   1127 
   1128 	{ .name = "copy-mode-position-format",
   1129 	  .type = OPTIONS_TABLE_STRING,
   1130 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1131 	  .default_str = "#[align=right]"
   1132 			 "#{t/p:top_line_time}#{?#{e|>:#{top_line_time},0}, ,}"
   1133 			 "[#{scroll_position}/#{history_size}]"
   1134 			 "#{?search_timed_out, (timed out),"
   1135 			 "#{?search_count, (#{search_count}"
   1136 			 "#{?search_count_partial,+,} results),}}",
   1137 	  .text = "Format of the position indicator in copy mode."
   1138 	},
   1139 
   1140 	{ .name = "copy-mode-position-style",
   1141 	  .type = OPTIONS_TABLE_STRING,
   1142 	  .scope = OPTIONS_TABLE_WINDOW,
   1143 	  .default_str = "#{E:mode-style}",
   1144 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1145 	  .separator = ",",
   1146 	  .text = "Style of position indicator in copy mode."
   1147 	},
   1148 
   1149 	{ .name = "copy-mode-selection-style",
   1150 	  .type = OPTIONS_TABLE_STRING,
   1151 	  .scope = OPTIONS_TABLE_WINDOW,
   1152 	  .default_str = "#{E:mode-style}",
   1153 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1154 	  .separator = ",",
   1155 	  .text = "Style of selection in copy mode."
   1156 	},
   1157 
   1158 	{ .name = "fill-character",
   1159 	  .type = OPTIONS_TABLE_STRING,
   1160 	  .scope = OPTIONS_TABLE_WINDOW,
   1161 	  .default_str = "",
   1162 	  .text = "Character used to fill unused parts of window."
   1163 	},
   1164 
   1165 	{ .name = "main-pane-height",
   1166 	  .type = OPTIONS_TABLE_STRING,
   1167 	  .scope = OPTIONS_TABLE_WINDOW,
   1168 	  .default_str = "24",
   1169 	  .text = "Height of the main pane in the 'main-horizontal' layout. "
   1170 		  "This may be a percentage, for example '10%'."
   1171 	},
   1172 
   1173 	{ .name = "main-pane-width",
   1174 	  .type = OPTIONS_TABLE_STRING,
   1175 	  .scope = OPTIONS_TABLE_WINDOW,
   1176 	  .default_str = "80",
   1177 	  .text = "Width of the main pane in the 'main-vertical' layout. "
   1178 		  "This may be a percentage, for example '10%'."
   1179 	},
   1180 
   1181 	{ .name = "mode-keys",
   1182 	  .type = OPTIONS_TABLE_CHOICE,
   1183 	  .scope = OPTIONS_TABLE_WINDOW,
   1184 	  .choices = options_table_mode_keys_list,
   1185 	  .default_num = MODEKEY_EMACS,
   1186 	  .text = "Key set used in copy mode."
   1187 	},
   1188 
   1189 	{ .name = "mode-style",
   1190 	  .type = OPTIONS_TABLE_STRING,
   1191 	  .scope = OPTIONS_TABLE_WINDOW,
   1192 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1193 	  .default_str = "noattr,bg=yellow,fg=black",
   1194 	  .separator = ",",
   1195 	  .text = "Style of indicators and highlighting in modes."
   1196 	},
   1197 
   1198 	{ .name = "monitor-activity",
   1199 	  .type = OPTIONS_TABLE_FLAG,
   1200 	  .scope = OPTIONS_TABLE_WINDOW,
   1201 	  .default_num = 0,
   1202 	  .text = "Whether an alert is triggered by activity."
   1203 	},
   1204 
   1205 	{ .name = "monitor-bell",
   1206 	  .type = OPTIONS_TABLE_FLAG,
   1207 	  .scope = OPTIONS_TABLE_WINDOW,
   1208 	  .default_num = 1,
   1209 	  .text = "Whether an alert is triggered by a bell."
   1210 	},
   1211 
   1212 	{ .name = "monitor-silence",
   1213 	  .type = OPTIONS_TABLE_NUMBER,
   1214 	  .scope = OPTIONS_TABLE_WINDOW,
   1215 	  .minimum = 0,
   1216 	  .maximum = INT_MAX,
   1217 	  .default_num = 0,
   1218 	  .text = "Time after which an alert is triggered by silence. "
   1219 		  "Zero means no alert."
   1220 
   1221 	},
   1222 
   1223 	{ .name = "other-pane-height",
   1224 	  .type = OPTIONS_TABLE_STRING,
   1225 	  .scope = OPTIONS_TABLE_WINDOW,
   1226 	  .default_str = "0",
   1227 	  .text = "Height of the other panes in the 'main-horizontal' layout. "
   1228 		  "This may be a percentage, for example '10%'."
   1229 	},
   1230 
   1231 	{ .name = "other-pane-width",
   1232 	  .type = OPTIONS_TABLE_STRING,
   1233 	  .scope = OPTIONS_TABLE_WINDOW,
   1234 	  .default_str = "0",
   1235 	  .text = "Height of the other panes in the 'main-vertical' layout. "
   1236 		  "This may be a percentage, for example '10%'."
   1237 	},
   1238 
   1239 	{ .name = "pane-active-border-style",
   1240 	  .type = OPTIONS_TABLE_STRING,
   1241 	  .scope = OPTIONS_TABLE_WINDOW,
   1242 	  .default_str = "#{?pane_in_mode,fg=yellow,#{?synchronize-panes,fg=red,fg=green}}",
   1243 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1244 	  .separator = ",",
   1245 	  .text = "Style of the active pane border."
   1246 	},
   1247 
   1248 	{ .name = "pane-base-index",
   1249 	  .type = OPTIONS_TABLE_NUMBER,
   1250 	  .scope = OPTIONS_TABLE_WINDOW,
   1251 	  .minimum = 0,
   1252 	  .maximum = USHRT_MAX,
   1253 	  .default_num = 0,
   1254 	  .text = "Index of the first pane in each window."
   1255 	},
   1256 
   1257 	{ .name = "pane-border-format",
   1258 	  .type = OPTIONS_TABLE_STRING,
   1259 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1260 	  .default_str = "#{?pane_active,#[reverse],}#{pane_index}#[default] "
   1261 			 "\"#{pane_title}\"",
   1262 	  .text = "Format of text in the pane status lines."
   1263 	},
   1264 
   1265 	{ .name = "pane-border-indicators",
   1266 	  .type = OPTIONS_TABLE_CHOICE,
   1267 	  .scope = OPTIONS_TABLE_WINDOW,
   1268 	  .choices = options_table_pane_border_indicators_list,
   1269 	  .default_num = PANE_BORDER_COLOUR,
   1270 	  .text = "Whether to indicate the active pane by colouring border or "
   1271 		  "displaying arrow markers."
   1272 	},
   1273 
   1274 	{ .name = "pane-border-lines",
   1275 	  .type = OPTIONS_TABLE_CHOICE,
   1276 	  .scope = OPTIONS_TABLE_WINDOW,
   1277 	  .choices = options_table_pane_border_lines_list,
   1278 	  .default_num = PANE_LINES_SINGLE,
   1279 	  .text = "Type of characters used to draw pane border lines. Some of "
   1280 		  "these are only supported on terminals with UTF-8 support."
   1281 	},
   1282 
   1283 	{ .name = "pane-border-status",
   1284 	  .type = OPTIONS_TABLE_CHOICE,
   1285 	  .scope = OPTIONS_TABLE_WINDOW,
   1286 	  .choices = options_table_pane_status_list,
   1287 	  .default_num = PANE_STATUS_OFF,
   1288 	  .text = "Position of the pane status lines."
   1289 	},
   1290 
   1291 	{ .name = "pane-border-style",
   1292 	  .type = OPTIONS_TABLE_STRING,
   1293 	  .scope = OPTIONS_TABLE_WINDOW,
   1294 	  .default_str = "default",
   1295 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1296 	  .separator = ",",
   1297 	  .text = "Style of the pane status lines."
   1298 	},
   1299 
   1300 	{ .name = "pane-colours",
   1301 	  .type = OPTIONS_TABLE_COLOUR,
   1302 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1303 	  .default_str = "",
   1304 	  .flags = OPTIONS_TABLE_IS_ARRAY,
   1305 	  .text = "The default colour palette for colours zero to 255."
   1306 	},
   1307 
   1308 	{ .name = "pane-scrollbars",
   1309 	  .type = OPTIONS_TABLE_CHOICE,
   1310 	  .scope = OPTIONS_TABLE_WINDOW,
   1311 	  .choices = options_table_pane_scrollbars_list,
   1312 	  .default_num = PANE_SCROLLBARS_OFF,
   1313 	  .text = "Pane scrollbar state."
   1314 	},
   1315 
   1316 	{ .name = "pane-scrollbars-style",
   1317 	  .type = OPTIONS_TABLE_STRING,
   1318 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1319 	  .default_str = "bg=black,fg=white,width=1,pad=0",
   1320 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1321 	  .separator = ",",
   1322 	  .text = "Style of the pane scrollbar."
   1323 	},
   1324 
   1325 	{ .name = "pane-scrollbars-position",
   1326 	  .type = OPTIONS_TABLE_CHOICE,
   1327 	  .scope = OPTIONS_TABLE_WINDOW,
   1328 	  .choices = options_table_pane_scrollbars_position_list,
   1329 	  .default_num = PANE_SCROLLBARS_RIGHT,
   1330 	  .text = "Pane scrollbar position."
   1331 	},
   1332 
   1333 	{ .name = "popup-style",
   1334 	  .type = OPTIONS_TABLE_STRING,
   1335 	  .scope = OPTIONS_TABLE_WINDOW,
   1336 	  .default_str = "default",
   1337 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1338 	  .separator = ",",
   1339 	  .text = "Default style of popups."
   1340 	},
   1341 
   1342 	{ .name = "popup-border-style",
   1343 	  .type = OPTIONS_TABLE_STRING,
   1344 	  .scope = OPTIONS_TABLE_WINDOW,
   1345 	  .default_str = "default",
   1346 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1347 	  .separator = ",",
   1348 	  .text = "Default style of popup borders."
   1349 	},
   1350 
   1351 	{ .name = "popup-border-lines",
   1352 	  .type = OPTIONS_TABLE_CHOICE,
   1353 	  .scope = OPTIONS_TABLE_WINDOW,
   1354 	  .choices = options_table_popup_border_lines_list,
   1355 	  .default_num = BOX_LINES_SINGLE,
   1356 	  .text = "Type of characters used to draw popup border lines. Some of "
   1357 		  "these are only supported on terminals with UTF-8 support."
   1358 	},
   1359 
   1360 	{ .name = "remain-on-exit",
   1361 	  .type = OPTIONS_TABLE_CHOICE,
   1362 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1363 	  .choices = options_table_remain_on_exit_list,
   1364 	  .default_num = 0,
   1365 	  .text = "Whether panes should remain ('on') or be automatically "
   1366 		  "killed ('off' or 'failed') when the program inside exits."
   1367 	},
   1368 
   1369 	{ .name = "remain-on-exit-format",
   1370 	  .type = OPTIONS_TABLE_STRING,
   1371 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1372 	  .default_str = "Pane is dead ("
   1373 			 "#{?#{!=:#{pane_dead_status},},"
   1374 			 "status #{pane_dead_status},}"
   1375 			 "#{?#{!=:#{pane_dead_signal},},"
   1376 			 "signal #{pane_dead_signal},}, "
   1377 			 "#{t:pane_dead_time})",
   1378 	  .text = "Message shown after the program in a pane has exited, if "
   1379 		  "remain-on-exit is enabled."
   1380 	},
   1381 
   1382 	{ .name = "scroll-on-clear",
   1383 	  .type = OPTIONS_TABLE_FLAG,
   1384 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1385 	  .default_num = 1,
   1386 	  .text = "Whether the contents of the screen should be scrolled into"
   1387 		  "history when clearing the whole screen."
   1388 	},
   1389 
   1390 	{ .name = "synchronize-panes",
   1391 	  .type = OPTIONS_TABLE_FLAG,
   1392 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1393 	  .default_num = 0,
   1394 	  .text = "Whether typing should be sent to all panes simultaneously."
   1395 	},
   1396 
   1397 	{ .name = "tiled-layout-max-columns",
   1398 	  .type = OPTIONS_TABLE_NUMBER,
   1399 	  .scope = OPTIONS_TABLE_WINDOW,
   1400 	  .minimum = 0,
   1401 	  .maximum = USHRT_MAX,
   1402 	  .default_num = 0,
   1403 	  .text = "Maximum number of columns in the 'tiled' layout. "
   1404 		  "A value of 0 means no limit."
   1405 	},
   1406 
   1407 	{ .name = "window-active-style",
   1408 	  .type = OPTIONS_TABLE_STRING,
   1409 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1410 	  .default_str = "default",
   1411 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1412 	  .separator = ",",
   1413 	  .text = "Default style of the active pane."
   1414 	},
   1415 
   1416 	{ .name = "window-size",
   1417 	  .type = OPTIONS_TABLE_CHOICE,
   1418 	  .scope = OPTIONS_TABLE_WINDOW,
   1419 	  .choices = options_table_window_size_list,
   1420 	  .default_num = WINDOW_SIZE_LATEST,
   1421 	  .text = "How window size is calculated. "
   1422 		  "'latest' uses the size of the most recently used client, "
   1423 		  "'largest' the largest client, 'smallest' the smallest "
   1424 		  "client and 'manual' a size set by the 'resize-window' "
   1425 		  "command."
   1426 	},
   1427 
   1428 	{ .name = "window-style",
   1429 	  .type = OPTIONS_TABLE_STRING,
   1430 	  .scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
   1431 	  .default_str = "default",
   1432 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1433 	  .separator = ",",
   1434 	  .text = "Default style of panes that are not the active pane."
   1435 	},
   1436 
   1437 	{ .name = "window-status-activity-style",
   1438 	  .type = OPTIONS_TABLE_STRING,
   1439 	  .scope = OPTIONS_TABLE_WINDOW,
   1440 	  .default_str = "reverse",
   1441 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1442 	  .separator = ",",
   1443 	  .text = "Style of windows in the status line with an activity alert."
   1444 	},
   1445 
   1446 	{ .name = "window-status-bell-style",
   1447 	  .type = OPTIONS_TABLE_STRING,
   1448 	  .scope = OPTIONS_TABLE_WINDOW,
   1449 	  .default_str = "reverse",
   1450 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1451 	  .separator = ",",
   1452 	  .text = "Style of windows in the status line with a bell alert."
   1453 	},
   1454 
   1455 	{ .name = "window-status-current-format",
   1456 	  .type = OPTIONS_TABLE_STRING,
   1457 	  .scope = OPTIONS_TABLE_WINDOW,
   1458 	  .default_str = "#I:#W#{?window_flags,#{window_flags}, }",
   1459 	  .text = "Format of the current window in the status line."
   1460 	},
   1461 
   1462 	{ .name = "window-status-current-style",
   1463 	  .type = OPTIONS_TABLE_STRING,
   1464 	  .scope = OPTIONS_TABLE_WINDOW,
   1465 	  .default_str = "default",
   1466 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1467 	  .separator = ",",
   1468 	  .text = "Style of the current window in the status line."
   1469 	},
   1470 
   1471 	{ .name = "window-status-format",
   1472 	  .type = OPTIONS_TABLE_STRING,
   1473 	  .scope = OPTIONS_TABLE_WINDOW,
   1474 	  .default_str = "#I:#W#{?window_flags,#{window_flags}, }",
   1475 	  .text = "Format of windows in the status line, except the current "
   1476 		  "window."
   1477 	},
   1478 
   1479 	{ .name = "window-status-last-style",
   1480 	  .type = OPTIONS_TABLE_STRING,
   1481 	  .scope = OPTIONS_TABLE_WINDOW,
   1482 	  .default_str = "default",
   1483 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1484 	  .separator = ",",
   1485 	  .text = "Style of the last window in the status line."
   1486 	},
   1487 
   1488 	{ .name = "window-status-separator",
   1489 	  .type = OPTIONS_TABLE_STRING,
   1490 	  .scope = OPTIONS_TABLE_WINDOW,
   1491 	  .default_str = " ",
   1492 	  .text = "Separator between windows in the status line."
   1493 	},
   1494 
   1495 	{ .name = "window-status-style",
   1496 	  .type = OPTIONS_TABLE_STRING,
   1497 	  .scope = OPTIONS_TABLE_WINDOW,
   1498 	  .default_str = "default",
   1499 	  .flags = OPTIONS_TABLE_IS_STYLE,
   1500 	  .separator = ",",
   1501 	  .text = "Style of windows in the status line, except the current and "
   1502 		  "last windows."
   1503 	},
   1504 
   1505 	{ .name = "wrap-search",
   1506 	  .type = OPTIONS_TABLE_FLAG,
   1507 	  .scope = OPTIONS_TABLE_WINDOW,
   1508 	  .default_num = 1,
   1509 	  .text = "Whether searching in copy mode should wrap at the top or "
   1510 		  "bottom."
   1511 	},
   1512 
   1513 	{ .name = "xterm-keys", /* no longer used */
   1514 	  .type = OPTIONS_TABLE_FLAG,
   1515 	  .scope = OPTIONS_TABLE_WINDOW,
   1516 	  .default_num = 1,
   1517 	  .text = "Whether xterm-style function key sequences should be sent. "
   1518 		  "This option is no longer used."
   1519 	},
   1520 
   1521 	/* Hook options. */
   1522 	OPTIONS_TABLE_HOOK("after-bind-key", ""),
   1523 	OPTIONS_TABLE_HOOK("after-capture-pane", ""),
   1524 	OPTIONS_TABLE_HOOK("after-copy-mode", ""),
   1525 	OPTIONS_TABLE_HOOK("after-display-message", ""),
   1526 	OPTIONS_TABLE_HOOK("after-display-panes", ""),
   1527 	OPTIONS_TABLE_HOOK("after-kill-pane", ""),
   1528 	OPTIONS_TABLE_HOOK("after-list-buffers", ""),
   1529 	OPTIONS_TABLE_HOOK("after-list-clients", ""),
   1530 	OPTIONS_TABLE_HOOK("after-list-keys", ""),
   1531 	OPTIONS_TABLE_HOOK("after-list-panes", ""),
   1532 	OPTIONS_TABLE_HOOK("after-list-sessions", ""),
   1533 	OPTIONS_TABLE_HOOK("after-list-windows", ""),
   1534 	OPTIONS_TABLE_HOOK("after-load-buffer", ""),
   1535 	OPTIONS_TABLE_HOOK("after-lock-server", ""),
   1536 	OPTIONS_TABLE_HOOK("after-new-session", ""),
   1537 	OPTIONS_TABLE_HOOK("after-new-window", ""),
   1538 	OPTIONS_TABLE_HOOK("after-paste-buffer", ""),
   1539 	OPTIONS_TABLE_HOOK("after-pipe-pane", ""),
   1540 	OPTIONS_TABLE_HOOK("after-queue", ""),
   1541 	OPTIONS_TABLE_HOOK("after-refresh-client", ""),
   1542 	OPTIONS_TABLE_HOOK("after-rename-session", ""),
   1543 	OPTIONS_TABLE_HOOK("after-rename-window", ""),
   1544 	OPTIONS_TABLE_HOOK("after-resize-pane", ""),
   1545 	OPTIONS_TABLE_HOOK("after-resize-window", ""),
   1546 	OPTIONS_TABLE_HOOK("after-save-buffer", ""),
   1547 	OPTIONS_TABLE_HOOK("after-select-layout", ""),
   1548 	OPTIONS_TABLE_HOOK("after-select-pane", ""),
   1549 	OPTIONS_TABLE_HOOK("after-select-window", ""),
   1550 	OPTIONS_TABLE_HOOK("after-send-keys", ""),
   1551 	OPTIONS_TABLE_HOOK("after-set-buffer", ""),
   1552 	OPTIONS_TABLE_HOOK("after-set-environment", ""),
   1553 	OPTIONS_TABLE_HOOK("after-set-hook", ""),
   1554 	OPTIONS_TABLE_HOOK("after-set-option", ""),
   1555 	OPTIONS_TABLE_HOOK("after-show-environment", ""),
   1556 	OPTIONS_TABLE_HOOK("after-show-messages", ""),
   1557 	OPTIONS_TABLE_HOOK("after-show-options", ""),
   1558 	OPTIONS_TABLE_HOOK("after-split-window", ""),
   1559 	OPTIONS_TABLE_HOOK("after-unbind-key", ""),
   1560 	OPTIONS_TABLE_HOOK("alert-activity", ""),
   1561 	OPTIONS_TABLE_HOOK("alert-bell", ""),
   1562 	OPTIONS_TABLE_HOOK("alert-silence", ""),
   1563 	OPTIONS_TABLE_HOOK("client-active", ""),
   1564 	OPTIONS_TABLE_HOOK("client-attached", ""),
   1565 	OPTIONS_TABLE_HOOK("client-detached", ""),
   1566 	OPTIONS_TABLE_HOOK("client-focus-in", ""),
   1567 	OPTIONS_TABLE_HOOK("client-focus-out", ""),
   1568 	OPTIONS_TABLE_HOOK("client-resized", ""),
   1569 	OPTIONS_TABLE_HOOK("client-session-changed", ""),
   1570 	OPTIONS_TABLE_HOOK("client-light-theme", ""),
   1571 	OPTIONS_TABLE_HOOK("client-dark-theme", ""),
   1572 	OPTIONS_TABLE_HOOK("command-error", ""),
   1573 	OPTIONS_TABLE_PANE_HOOK("pane-died", ""),
   1574 	OPTIONS_TABLE_PANE_HOOK("pane-exited", ""),
   1575 	OPTIONS_TABLE_PANE_HOOK("pane-focus-in", ""),
   1576 	OPTIONS_TABLE_PANE_HOOK("pane-focus-out", ""),
   1577 	OPTIONS_TABLE_PANE_HOOK("pane-mode-changed", ""),
   1578 	OPTIONS_TABLE_PANE_HOOK("pane-set-clipboard", ""),
   1579 	OPTIONS_TABLE_PANE_HOOK("pane-title-changed", ""),
   1580 	OPTIONS_TABLE_HOOK("session-closed", ""),
   1581 	OPTIONS_TABLE_HOOK("session-created", ""),
   1582 	OPTIONS_TABLE_HOOK("session-renamed", ""),
   1583 	OPTIONS_TABLE_HOOK("session-window-changed", ""),
   1584 	OPTIONS_TABLE_WINDOW_HOOK("window-layout-changed", ""),
   1585 	OPTIONS_TABLE_HOOK("window-linked", ""),
   1586 	OPTIONS_TABLE_WINDOW_HOOK("window-pane-changed", ""),
   1587 	OPTIONS_TABLE_WINDOW_HOOK("window-renamed", ""),
   1588 	OPTIONS_TABLE_WINDOW_HOOK("window-resized", ""),
   1589 	OPTIONS_TABLE_HOOK("window-unlinked", ""),
   1590 
   1591 	{ .name = NULL }
   1592 };
   1593