aboutsummaryrefslogtreecommitdiff
path: root/tmux.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmux.h')
-rw-r--r--tmux.h462
1 files changed, 224 insertions, 238 deletions
diff --git a/tmux.h b/tmux.h
index 7d5f230b..e296ac7c 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1,4 +1,4 @@
-/* $Id$ */
+/* $OpenBSD$ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -21,17 +21,19 @@
#define PROTOCOL_VERSION 8
-#include <sys/param.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <event.h>
#include <limits.h>
-#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <termios.h>
+#ifdef HAVE_UTEMPTER
+#include <utempter.h>
+#endif
+
#include "array.h"
#include "compat.h"
@@ -65,88 +67,13 @@ extern char **environ;
#define unused __attribute__ ((unused))
/* Attribute to make gcc check printf-like arguments. */
-#define printflike1 __attribute__ ((format (printf, 1, 2)))
-#define printflike2 __attribute__ ((format (printf, 2, 3)))
-#define printflike3 __attribute__ ((format (printf, 3, 4)))
-#define printflike4 __attribute__ ((format (printf, 4, 5)))
-#define printflike5 __attribute__ ((format (printf, 5, 6)))
+#define printflike(a, b) __attribute__ ((format (printf, a, b)))
/* Number of items in array. */
#ifndef nitems
#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
#endif
-/* Default template for choose-buffer. */
-#define CHOOSE_BUFFER_TEMPLATE \
- "#{line}: #{buffer_size} bytes: \"#{buffer_sample}\""
-
-/* Default template for choose-client. */
-#define CHOOSE_CLIENT_TEMPLATE \
- "#{client_tty}: #{session_name} " \
- "[#{client_width}x#{client_height} #{client_termname}]" \
- "#{?client_utf8, (utf8),}#{?client_readonly, (ro),} " \
- "(last used #{client_activity_string})"
-
-/* Default templates for choose-tree. */
-#define CHOOSE_TREE_SESSION_TEMPLATE \
- "#{session_name}: #{session_windows} windows" \
- "#{?session_grouped, (group ,}" \
- "#{session_group}#{?session_grouped,),}" \
- "#{?session_attached, (attached),}"
-#define CHOOSE_TREE_WINDOW_TEMPLATE \
- "#{window_index}: #{window_name}#{window_flags} " \
- "\"#{pane_title}\""
-
-/* Default template for display-message. */
-#define DISPLAY_MESSAGE_TEMPLATE \
- "[#{session_name}] #{window_index}:" \
- "#{window_name}, current pane #{pane_index} " \
- "- (%H:%M %d-%b-%y)"
-
-/* Default template for find-window. */
-#define FIND_WINDOW_TEMPLATE \
- "#{window_index}: #{window_name} " \
- "[#{window_width}x#{window_height}] " \
- "(#{window_panes} panes) #{window_find_matches}"
-
-/* Default template for list-buffers. */
-#define LIST_BUFFERS_TEMPLATE \
- "#{line}: #{buffer_size} bytes: \"#{buffer_sample}\""
-
-/* Default template for list-clients. */
-#define LIST_CLIENTS_TEMPLATE \
- "#{client_tty}: #{session_name} " \
- "[#{client_width}x#{client_height} #{client_termname}]" \
- "#{?client_utf8, (utf8),} #{?client_readonly, (ro),}"
-
-/* Default template for list-sessions. */
-#define LIST_SESSIONS_TEMPLATE \
- "#{session_name}: #{session_windows} windows " \
- "(created #{session_created_string}) " \
- "[#{session_width}x#{session_height}]" \
- "#{?session_grouped, (group ,}" \
- "#{session_group}#{?session_grouped,),}" \
- "#{?session_attached, (attached),}"
-
-/* Default templates for list-windows. */
-#define LIST_WINDOWS_TEMPLATE \
- "#{window_index}: #{window_name}#{window_flags} " \
- "(#{window_panes} panes) " \
- "[#{window_width}x#{window_height}] " \
- "[layout #{window_layout}] #{window_id}" \
- "#{?window_active, (active),}";
-#define LIST_WINDOWS_WITH_SESSION_TEMPLATE \
- "#{session_name}:" \
- "#{window_index}: #{window_name}#{window_flags} " \
- "(#{window_panes} panes) " \
- "[#{window_width}x#{window_height}] "
-
-/* Default templates for break-pane, new-window and split-window. */
-#define BREAK_PANE_TEMPLATE "#{session_name}:#{window_index}.#{pane_index}"
-#define NEW_SESSION_TEMPLATE "#{session_name}:"
-#define NEW_WINDOW_TEMPLATE BREAK_PANE_TEMPLATE
-#define SPLIT_WINDOW_TEMPLATE BREAK_PANE_TEMPLATE
-
/* Bell option values. */
#define BELL_NONE 0
#define BELL_ANY 1
@@ -187,14 +114,6 @@ enum key_code {
KEYC_F10,
KEYC_F11,
KEYC_F12,
- KEYC_F13,
- KEYC_F14,
- KEYC_F15,
- KEYC_F16,
- KEYC_F17,
- KEYC_F18,
- KEYC_F19,
- KEYC_F20,
KEYC_IC,
KEYC_DC,
KEYC_HOME,
@@ -254,6 +173,7 @@ enum tty_code_code {
TTYC_CUP, /* cursor_address, cm */
TTYC_CUU, /* parm_up_cursor, UP */
TTYC_CUU1, /* cursor_up, up */
+ TTYC_CVVIS, /* cursor_visible, vs */
TTYC_DCH, /* parm_dch, DC */
TTYC_DCH1, /* delete_character, dc */
TTYC_DIM, /* enter_dim_mode, mh */
@@ -300,26 +220,69 @@ enum tty_code_code {
TTYC_KEND5,
TTYC_KEND6,
TTYC_KEND7,
- TTYC_KF1, /* key_f1, k1 */
- TTYC_KF10, /* key_f10, k; */
- TTYC_KF11, /* key_f11, F1 */
- TTYC_KF12, /* key_f12, F2 */
- TTYC_KF13, /* key_f13, F3 */
- TTYC_KF14, /* key_f14, F4 */
- TTYC_KF15, /* key_f15, F5 */
- TTYC_KF16, /* key_f16, F6 */
- TTYC_KF17, /* key_f17, F7 */
- TTYC_KF18, /* key_f18, F8 */
- TTYC_KF19, /* key_f19, F9 */
- TTYC_KF2, /* key_f2, k2 */
- TTYC_KF20, /* key_f20, F10 */
- TTYC_KF3, /* key_f3, k3 */
- TTYC_KF4, /* key_f4, k4 */
- TTYC_KF5, /* key_f5, k5 */
- TTYC_KF6, /* key_f6, k6 */
- TTYC_KF7, /* key_f7, k7 */
- TTYC_KF8, /* key_f8, k8 */
- TTYC_KF9, /* key_f9, k9 */
+ TTYC_KF1,
+ TTYC_KF10,
+ TTYC_KF11,
+ TTYC_KF12,
+ TTYC_KF13,
+ TTYC_KF14,
+ TTYC_KF15,
+ TTYC_KF16,
+ TTYC_KF17,
+ TTYC_KF18,
+ TTYC_KF19,
+ TTYC_KF2,
+ TTYC_KF20,
+ TTYC_KF21,
+ TTYC_KF22,
+ TTYC_KF23,
+ TTYC_KF24,
+ TTYC_KF25,
+ TTYC_KF26,
+ TTYC_KF27,
+ TTYC_KF28,
+ TTYC_KF29,
+ TTYC_KF3,
+ TTYC_KF30,
+ TTYC_KF31,
+ TTYC_KF32,
+ TTYC_KF33,
+ TTYC_KF34,
+ TTYC_KF35,
+ TTYC_KF36,
+ TTYC_KF37,
+ TTYC_KF38,
+ TTYC_KF39,
+ TTYC_KF4,
+ TTYC_KF40,
+ TTYC_KF41,
+ TTYC_KF42,
+ TTYC_KF43,
+ TTYC_KF44,
+ TTYC_KF45,
+ TTYC_KF46,
+ TTYC_KF47,
+ TTYC_KF48,
+ TTYC_KF49,
+ TTYC_KF5,
+ TTYC_KF50,
+ TTYC_KF51,
+ TTYC_KF52,
+ TTYC_KF53,
+ TTYC_KF54,
+ TTYC_KF55,
+ TTYC_KF56,
+ TTYC_KF57,
+ TTYC_KF58,
+ TTYC_KF59,
+ TTYC_KF6,
+ TTYC_KF60,
+ TTYC_KF61,
+ TTYC_KF62,
+ TTYC_KF63,
+ TTYC_KF7,
+ TTYC_KF8,
+ TTYC_KF9,
TTYC_KHOM2,
TTYC_KHOM3,
TTYC_KHOM4,
@@ -417,9 +380,6 @@ struct tty_term_code_entry {
const char *name;
};
-/* List of error causes. */
-ARRAY_DECL(causelist, char *);
-
/* Message codes. */
enum msgtype {
MSG_VERSION = 12,
@@ -513,14 +473,18 @@ enum mode_key_cmd {
/* Menu (choice) keys. */
MODEKEYCHOICE_BACKSPACE,
+ MODEKEYCHOICE_BOTTOMLINE,
MODEKEYCHOICE_CANCEL,
MODEKEYCHOICE_CHOOSE,
MODEKEYCHOICE_DOWN,
+ MODEKEYCHOICE_ENDOFLIST,
MODEKEYCHOICE_PAGEDOWN,
MODEKEYCHOICE_PAGEUP,
MODEKEYCHOICE_SCROLLDOWN,
MODEKEYCHOICE_SCROLLUP,
MODEKEYCHOICE_STARTNUMBERPREFIX,
+ MODEKEYCHOICE_STARTOFLIST,
+ MODEKEYCHOICE_TOPLINE,
MODEKEYCHOICE_TREE_COLLAPSE,
MODEKEYCHOICE_TREE_COLLAPSE_ALL,
MODEKEYCHOICE_TREE_EXPAND,
@@ -529,6 +493,7 @@ enum mode_key_cmd {
MODEKEYCHOICE_UP,
/* Copy keys. */
+ MODEKEYCOPY_APPENDSELECTION,
MODEKEYCOPY_BACKTOINDENTATION,
MODEKEYCOPY_BOTTOMLINE,
MODEKEYCOPY_CANCEL,
@@ -570,6 +535,7 @@ enum mode_key_cmd {
MODEKEYCOPY_SEARCHREVERSE,
MODEKEYCOPY_SEARCHUP,
MODEKEYCOPY_SELECTLINE,
+ MODEKEYCOPY_STARTNAMEDBUFFER,
MODEKEYCOPY_STARTNUMBERPREFIX,
MODEKEYCOPY_STARTOFLINE,
MODEKEYCOPY_STARTSELECTION,
@@ -633,13 +599,13 @@ struct mode_key_table {
#define MODE_WRAP 0x10 /* whether lines wrap */
#define MODE_MOUSE_STANDARD 0x20
#define MODE_MOUSE_BUTTON 0x40
-#define MODE_MOUSE_ANY 0x80
+#define MODE_BLINKING 0x80
#define MODE_MOUSE_UTF8 0x100
#define MODE_MOUSE_SGR 0x200
#define MODE_BRACKETPASTE 0x400
#define MODE_FOCUSON 0x800
-#define ALL_MOUSE_MODES (MODE_MOUSE_STANDARD|MODE_MOUSE_BUTTON|MODE_MOUSE_ANY)
+#define ALL_MOUSE_MODES (MODE_MOUSE_STANDARD|MODE_MOUSE_BUTTON)
/* A single UTF-8 character. */
struct utf8_data {
@@ -651,16 +617,6 @@ struct utf8_data {
u_int width;
};
-/* Grid output. */
-#if defined(DEBUG) && \
- ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
- (defined(__GNUC__) && __GNUC__ >= 3))
-#define GRID_DEBUG(gd, fmt, ...) log_debug2("%s: (sx=%u, sy=%u, hsize=%u) " \
- fmt, __func__, (gd)->sx, (gd)->sy, (gd)->hsize, ## __VA_ARGS__)
-#else
-#define GRID_DEBUG(...)
-#endif
-
/* Grid attributes. */
#define GRID_ATTR_BRIGHT 0x1
#define GRID_ATTR_DIM 0x2
@@ -755,6 +711,13 @@ LIST_HEAD(joblist, job);
struct screen_sel {
int flag;
int rectflag;
+ enum {
+ LINE_SEL_NONE,
+ LINE_SEL_LEFT_RIGHT,
+ LINE_SEL_RIGHT_LEFT,
+ } lineflag;
+
+ int modekeys;
u_int sx;
u_int sy;
@@ -799,14 +762,22 @@ struct screen_write_ctx {
#define screen_hsize(s) ((s)->grid->hsize)
#define screen_hlimit(s) ((s)->grid->hlimit)
+/* Input parser cell. */
+struct input_cell {
+ struct grid_cell cell;
+ int set;
+ int g0set; /* 1 if ACS */
+ int g1set; /* 1 if ACS */
+};
+
/* Input parser context. */
struct input_ctx {
struct window_pane *wp;
struct screen_write_ctx ctx;
- struct grid_cell cell;
+ struct input_cell cell;
- struct grid_cell old_cell;
+ struct input_cell old_cell;
u_int old_cx;
u_int old_cy;
@@ -816,8 +787,11 @@ struct input_ctx {
u_char param_buf[64];
size_t param_len;
- u_char input_buf[256];
+#define INPUT_BUF_START 32
+#define INPUT_BUF_LIMIT 1048576
+ u_char *input_buf;
size_t input_len;
+ size_t input_space;
int param_list[24]; /* -1 not present */
u_int param_list_len;
@@ -887,6 +861,7 @@ struct window_choose_mode_item {
/* Child window structure. */
struct window_pane {
u_int id;
+ u_int active_point;
struct window *window;
@@ -905,13 +880,16 @@ struct window_pane {
#define PANE_FOCUSED 0x4
#define PANE_RESIZE 0x8
#define PANE_FOCUSPUSH 0x10
+#define PANE_INPUTOFF 0x20
- char *cmd;
+ int argc;
+ char **argv;
char *shell;
int cwd;
pid_t pid;
char tty[TTY_NAME_MAX];
+ int status;
u_int changes;
struct event changes_timer;
@@ -943,6 +921,7 @@ struct window_pane {
};
TAILQ_HEAD(window_panes, window_pane);
RB_HEAD(window_pane_tree, window_pane);
+ARRAY_DECL(window_pane_list, struct window_pane *);
/* Window structure. */
struct window {
@@ -967,7 +946,9 @@ struct window {
#define WINDOW_ACTIVITY 0x2
#define WINDOW_REDRAW 0x4
#define WINDOW_SILENCE 0x8
-#define WINDOW_ZOOMED 0x10
+#define WINDOW_ZOOMED 0x1000
+#define WINDOW_FORCEWIDTH 0x2000
+#define WINDOW_FORCEHEIGHT 0x4000
#define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE)
struct options options;
@@ -988,10 +969,8 @@ struct winlink {
int flags;
#define WINLINK_BELL 0x1
#define WINLINK_ACTIVITY 0x2
-#define WINLINK_CONTENT 0x4
-#define WINLINK_SILENCE 0x8
-#define WINLINK_ALERTFLAGS \
- (WINLINK_BELL|WINLINK_ACTIVITY|WINLINK_CONTENT|WINLINK_SILENCE)
+#define WINLINK_SILENCE 0x4
+#define WINLINK_ALERTFLAGS (WINLINK_BELL|WINLINK_ACTIVITY|WINLINK_SILENCE)
RB_ENTRY(winlink) entry;
TAILQ_ENTRY(winlink) sentry;
@@ -1022,8 +1001,6 @@ struct layout_cell {
u_int yoff;
struct window_pane *wp;
- struct window_pane *lastwp;
-
struct layout_cells cells;
TAILQ_ENTRY(layout_cell) entry;
@@ -1033,8 +1010,14 @@ struct layout_cell {
struct paste_buffer {
char *data;
size_t size;
+
+ char *name;
+ int automatic;
+ u_int order;
+
+ RB_ENTRY(paste_buffer) name_entry;
+ RB_ENTRY(paste_buffer) time_entry;
};
-ARRAY_DECL(paste_stack, struct paste_buffer *);
/* Environment variable. */
struct environ_entry {
@@ -1075,6 +1058,8 @@ struct session {
#define SESSION_UNATTACHED 0x1 /* not attached to any clients */
int flags;
+ u_int attached;
+
struct termios *tio;
struct environ environ;
@@ -1114,19 +1099,30 @@ struct tty_term {
};
LIST_HEAD(tty_terms, tty_term);
+/* Mouse button masks. */
+#define MOUSE_MASK_BUTTONS 3
+#define MOUSE_MASK_SHIFT 4
+#define MOUSE_MASK_META 8
+#define MOUSE_MASK_CTRL 16
+#define MOUSE_MASK_DRAG 32
+#define MOUSE_MASK_WHEEL 64
+
/* Mouse wheel states. */
#define MOUSE_WHEEL_UP 0
#define MOUSE_WHEEL_DOWN 1
-/* Mouse events. */
-#define MOUSE_EVENT_DOWN (1 << 0)
-#define MOUSE_EVENT_DRAG (1 << 1)
-#define MOUSE_EVENT_UP (1 << 2)
-#define MOUSE_EVENT_CLICK (1 << 3)
-#define MOUSE_EVENT_WHEEL (1 << 4)
+/* Mouse wheel multipler. */
+#define MOUSE_WHEEL_SCALE 3
+
+/* Mouse event bits. */
+#define MOUSE_EVENT_DOWN 0x1
+#define MOUSE_EVENT_DRAG 0x2
+#define MOUSE_EVENT_UP 0x4
+#define MOUSE_EVENT_CLICK 0x8
+#define MOUSE_EVENT_WHEEL 0x10
-/* Mouse flags. */
-#define MOUSE_RESIZE_PANE (1 << 0)
+/* Mouse flag bits. */
+#define MOUSE_RESIZE_PANE 0x1
/*
* Mouse input. When sent by xterm:
@@ -1156,6 +1152,7 @@ struct mouse_event {
u_int button;
u_int clicks;
+ u_int scroll;
int wheel;
int event;
@@ -1421,7 +1418,6 @@ struct cmd_entry {
#define CMD_READONLY 0x4
int flags;
- void (*key_binding)(struct cmd *, int);
enum cmd_retval (*exec)(struct cmd *, struct cmd_q *);
};
@@ -1465,15 +1461,6 @@ struct options_table_entry {
const char *style;
};
-/* Tree of format entries. */
-struct format_entry {
- char *key;
- char *value;
-
- RB_ENTRY(format_entry) entry;
-};
-RB_HEAD(format_tree, format_entry);
-
/* Common command usages. */
#define CMD_TARGET_PANE_USAGE "[-t target-pane]"
#define CMD_TARGET_WINDOW_USAGE "[-t target-window]"
@@ -1483,7 +1470,7 @@ RB_HEAD(format_tree, format_entry);
#define CMD_SRCDST_WINDOW_USAGE "[-s src-window] [-t dst-window]"
#define CMD_SRCDST_SESSION_USAGE "[-s src-session] [-t dst-session]"
#define CMD_SRCDST_CLIENT_USAGE "[-s src-client] [-t dst-client]"
-#define CMD_BUFFER_USAGE "[-b buffer-index]"
+#define CMD_BUFFER_USAGE "[-b buffer-name]"
/* tmux.c */
extern struct options global_options;
@@ -1495,7 +1482,7 @@ extern char *cfg_file;
extern char *shell_cmd;
extern int debug_level;
extern time_t start_time;
-extern char socket_path[MAXPATHLEN];
+extern char socket_path[PATH_MAX];
extern int login_shell;
extern char *environ_path;
void logfile(const char *);
@@ -1509,30 +1496,29 @@ __dead void shell_exec(const char *, const char *);
extern struct cmd_q *cfg_cmd_q;
extern int cfg_finished;
extern int cfg_references;
-extern struct causelist cfg_causes;
extern struct client *cfg_client;
int load_cfg(const char *, struct cmd_q *, char **);
void cfg_default_done(struct cmd_q *);
+void cfg_add_cause(const char *, ...);
+void cfg_print_causes(struct cmd_q *);
void cfg_show_causes(struct session *);
/* format.c */
-int format_cmp(struct format_entry *, struct format_entry *);
-RB_PROTOTYPE(format_tree, format_entry, entry, format_cmp);
+struct format_tree;
struct format_tree *format_create(void);
void format_free(struct format_tree *);
-void printflike3 format_add(struct format_tree *, const char *, const char *,
- ...);
+void printflike(3, 4) format_add(struct format_tree *, const char *,
+ const char *, ...);
const char *format_find(struct format_tree *, const char *);
+char *format_expand_time(struct format_tree *, const char *, time_t);
char *format_expand(struct format_tree *, const char *);
-void format_session(struct format_tree *, struct session *);
-void format_client(struct format_tree *, struct client *);
-void format_window(struct format_tree *, struct window *);
-void format_winlink(struct format_tree *, struct session *,
- struct winlink *);
-void format_window_pane(struct format_tree *,
+void format_defaults(struct format_tree *, struct client *,
+ struct session *, struct winlink *, struct window_pane *);
+void format_defaults_window(struct format_tree *, struct window *);
+void format_defaults_pane(struct format_tree *,
struct window_pane *);
-void format_paste_buffer(struct format_tree *,
- struct paste_buffer *);
+void format_defaults_paste_buffer(struct format_tree *,
+ struct paste_buffer *, int);
/* mode-key.c */
extern const struct mode_key_table mode_key_tables[];
@@ -1574,7 +1560,7 @@ void options_free(struct options *);
struct options_entry *options_find1(struct options *, const char *);
struct options_entry *options_find(struct options *, const char *);
void options_remove(struct options *, const char *);
-struct options_entry *printflike3 options_set_string(struct options *,
+struct options_entry *printflike(3, 4) options_set_string(struct options *,
const char *, const char *, ...);
char *options_get_string(struct options *, const char *);
struct options_entry *options_set_number(struct options *, const char *,
@@ -1643,7 +1629,7 @@ void tty_set_title(struct tty *, const char *);
void tty_update_mode(struct tty *, int, struct screen *);
void tty_force_cursor_colour(struct tty *, const char *);
void tty_draw_line(struct tty *, struct screen *, u_int, u_int, u_int);
-int tty_open(struct tty *, const char *, char **);
+int tty_open(struct tty *, char **);
void tty_close(struct tty *);
void tty_free(struct tty *);
void tty_write(
@@ -1672,7 +1658,7 @@ void tty_bell(struct tty *);
/* tty-term.c */
extern struct tty_terms tty_terms;
extern const struct tty_term_code_entry tty_term_codes[NTTYCODE];
-struct tty_term *tty_term_find(char *, int, const char *, char **);
+struct tty_term *tty_term_find(char *, int, char **);
void tty_term_free(struct tty_term *);
int tty_term_has(struct tty_term *, enum tty_code_code);
const char *tty_term_string(struct tty_term *, enum tty_code_code);
@@ -1695,21 +1681,18 @@ void tty_keys_free(struct tty *);
int tty_keys_next(struct tty *);
/* paste.c */
-struct paste_buffer *paste_walk_stack(struct paste_stack *, u_int *);
-struct paste_buffer *paste_get_top(struct paste_stack *);
-struct paste_buffer *paste_get_index(struct paste_stack *, u_int);
-int paste_free_top(struct paste_stack *);
-int paste_free_index(struct paste_stack *, u_int);
-void paste_add(struct paste_stack *, char *, size_t, u_int);
-int paste_replace(struct paste_stack *, u_int, char *, size_t);
-char *paste_print(struct paste_buffer *, size_t);
+struct paste_buffer *paste_walk(struct paste_buffer *);
+struct paste_buffer *paste_get_top(void);
+struct paste_buffer *paste_get_name(const char *);
+int paste_free_top(void);
+int paste_free_name(const char *);
+void paste_add(char *, size_t);
+int paste_rename(const char *, const char *, char **);
+int paste_set(char *, size_t, const char *, char **);
+char *paste_make_sample(struct paste_buffer *, int);
void paste_send_pane(struct paste_buffer *, struct window_pane *,
const char *, int);
-/* clock.c */
-extern const char clock_table[14][5][5];
-void clock_draw(struct screen_write_ctx *, int, int);
-
/* arguments.c */
int args_cmp(struct args_entry *, struct args_entry *);
RB_PROTOTYPE(args_tree, args_entry, entry, args_cmp);
@@ -1726,8 +1709,9 @@ long long args_strtonum(
/* cmd.c */
int cmd_pack_argv(int, char **, char *, size_t);
int cmd_unpack_argv(char *, size_t, int, char ***);
-char **cmd_copy_argv(int, char *const *);
+char **cmd_copy_argv(int, char **);
void cmd_free_argv(int, char **);
+char *cmd_stringify_argv(int, char **);
struct cmd *cmd_parse(int, char **, const char *, u_int, char **);
size_t cmd_print(struct cmd *, char *, size_t);
struct session *cmd_current_session(struct cmd_q *, int);
@@ -1750,7 +1734,6 @@ extern const struct cmd_entry cmd_break_pane_entry;
extern const struct cmd_entry cmd_capture_pane_entry;
extern const struct cmd_entry cmd_choose_buffer_entry;
extern const struct cmd_entry cmd_choose_client_entry;
-extern const struct cmd_entry cmd_choose_list_entry;
extern const struct cmd_entry cmd_choose_session_entry;
extern const struct cmd_entry cmd_choose_tree_entry;
extern const struct cmd_entry cmd_choose_window_entry;
@@ -1844,10 +1827,9 @@ size_t cmd_list_print(struct cmd_list *, char *, size_t);
/* cmd-queue.c */
struct cmd_q *cmdq_new(struct client *);
int cmdq_free(struct cmd_q *);
-void printflike2 cmdq_print(struct cmd_q *, const char *, ...);
-void printflike2 cmdq_info(struct cmd_q *, const char *, ...);
-void printflike2 cmdq_error(struct cmd_q *, const char *, ...);
-int cmdq_guard(struct cmd_q *, const char *, int);
+void printflike(2, 3) cmdq_print(struct cmd_q *, const char *, ...);
+void printflike(2, 3) cmdq_error(struct cmd_q *, const char *, ...);
+void cmdq_guard(struct cmd_q *, const char *, int);
void cmdq_run(struct cmd_q *, struct cmd_list *);
void cmdq_append(struct cmd_q *, struct cmd_list *);
int cmdq_continue(struct cmd_q *);
@@ -1857,6 +1839,9 @@ void cmdq_flush(struct cmd_q *);
int cmd_string_parse(const char *, struct cmd_list **, const char *,
u_int, char **);
+/* cmd-wait-for.c */
+void cmd_wait_for_flush(void);
+
/* client.c */
int client_main(int, char **, int);
@@ -1867,7 +1852,6 @@ RB_PROTOTYPE(key_bindings, key_binding, entry, key_bindings_cmp);
struct key_binding *key_bindings_lookup(int);
void key_bindings_add(int, int, struct cmd_list *);
void key_bindings_remove(int);
-void key_bindings_clean(void);
void key_bindings_init(void);
void key_bindings_dispatch(struct key_binding *, struct client *);
@@ -1878,7 +1862,6 @@ const char *key_string_lookup_key(int);
/* server.c */
extern struct clients clients;
extern struct clients dead_clients;
-extern struct paste_stack global_buffers;
int server_start(int, char *);
void server_update_socket(void);
void server_add_accept(int);
@@ -1886,7 +1869,7 @@ void server_add_accept(int);
/* server-client.c */
void server_client_handle_key(struct client *, int);
void server_client_create(int);
-int server_client_open(struct client *, struct session *, char **);
+int server_client_open(struct client *, char **);
void server_client_lost(struct client *);
void server_client_callback(int, short, void *);
void server_client_status_timer(void);
@@ -1940,9 +1923,7 @@ void status_free_jobs(struct status_out_tree *);
void status_update_jobs(struct client *);
void status_set_window_at(struct client *, u_int);
int status_redraw(struct client *);
-char *status_replace(struct client *, struct session *,
- struct winlink *, struct window_pane *, const char *, time_t, int);
-void printflike2 status_message_set(struct client *, const char *, ...);
+void printflike(2, 3) status_message_set(struct client *, const char *, ...);
void status_message_clear(struct client *);
int status_message_redraw(struct client *);
void status_prompt_set(struct client *, const char *, const char *,
@@ -2032,13 +2013,13 @@ void screen_write_start(
struct screen_write_ctx *, struct window_pane *, struct screen *);
void screen_write_stop(struct screen_write_ctx *);
void screen_write_reset(struct screen_write_ctx *);
-size_t printflike2 screen_write_cstrlen(int, const char *, ...);
-void printflike5 screen_write_cnputs(struct screen_write_ctx *,
+size_t printflike(2, 3) screen_write_cstrlen(int, const char *, ...);
+void printflike(5, 6) screen_write_cnputs(struct screen_write_ctx *,
ssize_t, struct grid_cell *, int, const char *, ...);
-size_t printflike2 screen_write_strlen(int, const char *, ...);
-void printflike3 screen_write_puts(struct screen_write_ctx *,
+size_t printflike(2, 3) screen_write_strlen(int, const char *, ...);
+void printflike(3, 4) screen_write_puts(struct screen_write_ctx *,
struct grid_cell *, const char *, ...);
-void printflike5 screen_write_nputs(struct screen_write_ctx *,
+void printflike(5, 6) screen_write_nputs(struct screen_write_ctx *,
ssize_t, struct grid_cell *, int, const char *, ...);
void screen_write_vnputs(struct screen_write_ctx *,
ssize_t, struct grid_cell *, int, const char *, va_list);
@@ -2121,18 +2102,19 @@ void winlink_stack_remove(struct winlink_stack *, struct winlink *);
int window_index(struct window *, u_int *);
struct window *window_find_by_id(u_int);
struct window *window_create1(u_int, u_int);
-struct window *window_create(const char *, const char *, const char *, int,
- struct environ *, struct termios *, u_int, u_int, u_int,
- char **);
+struct window *window_create(const char *, int, char **, const char *,
+ const char *, int, struct environ *, struct termios *,
+ u_int, u_int, u_int, char **);
void window_destroy(struct window *);
struct window_pane *window_get_active_at(struct window *, u_int, u_int);
void window_set_active_at(struct window *, u_int, u_int);
struct window_pane *window_find_string(struct window *, const char *);
-void window_set_active_pane(struct window *, struct window_pane *);
+int window_set_active_pane(struct window *, struct window_pane *);
struct window_pane *window_add_pane(struct window *, u_int);
void window_resize(struct window *, u_int, u_int);
int window_zoom(struct window_pane *);
int window_unzoom(struct window *);
+void window_lost_pane(struct window *, struct window_pane *);
void window_remove_pane(struct window *, struct window_pane *);
struct window_pane *window_pane_at_index(struct window *, u_int);
struct window_pane *window_pane_next_by_number(struct window *,
@@ -2146,9 +2128,9 @@ struct window_pane *window_pane_find_by_id(u_int);
struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int);
void window_pane_destroy(struct window_pane *);
void window_pane_timer_start(struct window_pane *);
-int window_pane_spawn(struct window_pane *, const char *,
- const char *, int, struct environ *, struct termios *,
- char **);
+int window_pane_spawn(struct window_pane *, int, char **,
+ const char *, const char *, int, struct environ *,
+ struct termios *, char **);
void window_pane_resize(struct window_pane *, u_int, u_int);
void window_pane_alternate_on(struct window_pane *,
struct grid_cell *, int);
@@ -2215,12 +2197,13 @@ void layout_set_active_changed(struct window *);
/* window-clock.c */
extern const struct window_mode window_clock_mode;
+extern const char window_clock_table[14][5][5];
/* window-copy.c */
extern const struct window_mode window_copy_mode;
void window_copy_init_from_pane(struct window_pane *);
void window_copy_init_for_output(struct window_pane *);
-void printflike2 window_copy_add(struct window_pane *, const char *, ...);
+void printflike(2, 3) window_copy_add(struct window_pane *, const char *, ...);
void window_copy_vadd(struct window_pane *, const char *, va_list);
void window_copy_pageup(struct window_pane *);
@@ -2240,9 +2223,6 @@ struct window_choose_data *window_choose_add_window(struct window_pane *,
struct window_choose_data *window_choose_add_session(struct window_pane *,
struct client *, struct session *, const char *,
const char *, u_int);
-struct window_choose_data *window_choose_add_item(struct window_pane *,
- struct client *, struct winlink *, const char *,
- const char *, u_int);
void window_choose_expand_all(struct window_pane *);
void window_choose_collapse_all(struct window_pane *);
void window_choose_set_current(struct window_pane *, u_int);
@@ -2258,8 +2238,8 @@ void set_signals(void(*)(int, short, void *));
void clear_signals(int);
/* control.c */
-void control_callback(struct client *, int, void*);
-void printflike2 control_write(struct client *, const char *, ...);
+void control_callback(struct client *, int, void *);
+void printflike(2, 3) control_write(struct client *, const char *, ...);
void control_write_buffer(struct client *, struct evbuffer *);
/* control-notify.c */
@@ -2283,20 +2263,20 @@ RB_PROTOTYPE(sessions, session, entry, session_cmp);
int session_alive(struct session *);
struct session *session_find(const char *);
struct session *session_find_by_id(u_int);
-struct session *session_create(const char *, const char *, int,
- struct environ *, struct termios *, int, u_int, u_int,
- char **);
+struct session *session_create(const char *, int, char **, const char *,
+ int, struct environ *, struct termios *, int, u_int,
+ u_int, char **);
void session_destroy(struct session *);
int session_check_name(const char *);
void session_update_activity(struct session *);
struct session *session_next_session(struct session *);
struct session *session_previous_session(struct session *);
-struct winlink *session_new(struct session *, const char *, const char *, int,
- int, char **);
-struct winlink *session_attach(
- struct session *, struct window *, int, char **);
+struct winlink *session_new(struct session *, const char *, int, char **,
+ const char *, int, int, char **);
+struct winlink *session_attach(struct session *, struct window *, int,
+ char **);
int session_detach(struct session *, struct winlink *);
-struct winlink* session_has(struct session *, struct window *);
+struct winlink *session_has(struct session *, struct window *);
int session_next(struct session *, int);
int session_previous(struct session *, int);
int session_select(struct session *, int);
@@ -2306,17 +2286,24 @@ struct session_group *session_group_find(struct session *);
u_int session_group_index(struct session_group *);
void session_group_add(struct session *, struct session *);
void session_group_remove(struct session *);
+u_int session_group_count(struct session_group *);
void session_group_synchronize_to(struct session *);
void session_group_synchronize_from(struct session *);
void session_group_synchronize1(struct session *, struct session *);
void session_renumber_windows(struct session *);
/* utf8.c */
-void utf8_build(void);
-int utf8_open(struct utf8_data *, u_char);
-int utf8_append(struct utf8_data *, u_char);
-u_int utf8_combine(const struct utf8_data *);
-u_int utf8_split2(u_int, u_char *);
+void utf8_build(void);
+void utf8_set(struct utf8_data *, u_char);
+int utf8_open(struct utf8_data *, u_char);
+int utf8_append(struct utf8_data *, u_char);
+u_int utf8_combine(const struct utf8_data *);
+u_int utf8_split2(u_int, u_char *);
+int utf8_strvis(char *, const char *, size_t, int);
+struct utf8_data *utf8_fromcstr(const char *);
+char *utf8_tocstr(struct utf8_data *);
+u_int utf8_cstrwidth(const char *);
+char *utf8_trimcstr(const char *, u_int);
/* osdep-*.c */
char *osdep_get_name(int, char *);
@@ -2324,24 +2311,21 @@ char *osdep_get_cwd(int);
struct event_base *osdep_event_init(void);
/* log.c */
-void log_open(int, const char *);
+void log_open(const char *);
void log_close(void);
-void printflike1 log_warn(const char *, ...);
-void printflike1 log_warnx(const char *, ...);
-void printflike1 log_info(const char *, ...);
-void printflike1 log_debug(const char *, ...);
-void printflike1 log_debug2(const char *, ...);
-__dead void printflike1 log_fatal(const char *, ...);
-__dead void printflike1 log_fatalx(const char *, ...);
+void printflike(1, 2) log_debug(const char *, ...);
+__dead void printflike(1, 2) log_fatal(const char *, ...);
+__dead void printflike(1, 2) log_fatalx(const char *, ...);
/* xmalloc.c */
char *xstrdup(const char *);
void *xcalloc(size_t, size_t);
void *xmalloc(size_t);
-void *xrealloc(void *, size_t, size_t);
-int printflike2 xasprintf(char **, const char *, ...);
+void *xrealloc(void *, size_t);
+void *xreallocarray(void *, size_t, size_t);
+int printflike(2, 3) xasprintf(char **, const char *, ...);
int xvasprintf(char **, const char *, va_list);
-int printflike3 xsnprintf(char *, size_t, const char *, ...);
+int printflike(3, 4) xsnprintf(char *, size_t, const char *, ...);
int xvsnprintf(char *, size_t, const char *, va_list);
/* style.c */
@@ -2351,7 +2335,9 @@ const char *style_tostring(struct grid_cell *);
void style_update_new(struct options *, const char *, const char *);
void style_update_old(struct options *, const char *,
struct grid_cell *);
-void style_apply(struct grid_cell *, struct options *, const char *);
-void style_apply_update(struct grid_cell *, struct options *, const char *);
+void style_apply(struct grid_cell *, struct options *,
+ const char *);
+void style_apply_update(struct grid_cell *, struct options *,
+ const char *);
#endif /* TMUX_H */