summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile48
-rw-r--r--arg.c194
-rw-r--r--array.h119
-rw-r--r--attributes.c92
-rw-r--r--buffer-poll.c97
-rw-r--r--buffer.c227
-rw-r--r--cfg.c132
-rw-r--r--client-fn.c92
-rw-r--r--client-msg.c159
-rw-r--r--client.c226
-rw-r--r--clock.c161
-rw-r--r--cmd-attach-session.c80
-rw-r--r--cmd-bind-key.c157
-rw-r--r--cmd-break-pane.c92
-rw-r--r--cmd-choose-session.c107
-rw-r--r--cmd-choose-window.c106
-rw-r--r--cmd-clear-history.c68
-rw-r--r--cmd-clock-mode.c54
-rw-r--r--cmd-command-prompt.c178
-rw-r--r--cmd-confirm-before.c141
-rw-r--r--cmd-copy-buffer.c222
-rw-r--r--cmd-copy-mode.c56
-rw-r--r--cmd-delete-buffer.c61
-rw-r--r--cmd-detach-client.c54
-rw-r--r--cmd-down-pane.c61
-rw-r--r--cmd-find-window.c160
-rw-r--r--cmd-generic.c694
-rw-r--r--cmd-has-session.c51
-rw-r--r--cmd-kill-pane.c72
-rw-r--r--cmd-kill-server.c51
-rw-r--r--cmd-kill-session.c68
-rw-r--r--cmd-kill-window.c69
-rw-r--r--cmd-last-window.c60
-rw-r--r--cmd-link-window.c109
-rw-r--r--cmd-list-buffers.c91
-rw-r--r--cmd-list-clients.c67
-rw-r--r--cmd-list-commands.c51
-rw-r--r--cmd-list-keys.c59
-rw-r--r--cmd-list-sessions.c67
-rw-r--r--cmd-list-windows.c88
-rw-r--r--cmd-list.c154
-rw-r--r--cmd-load-buffer.c106
-rw-r--r--cmd-lock-server.c54
-rw-r--r--cmd-move-window.c123
-rw-r--r--cmd-new-session.c248
-rw-r--r--cmd-new-window.c241
-rw-r--r--cmd-next-layout.c55
-rw-r--r--cmd-next-window.c78
-rw-r--r--cmd-paste-buffer.c78
-rw-r--r--cmd-previous-layout.c55
-rw-r--r--cmd-previous-window.c78
-rw-r--r--cmd-refresh-client.c54
-rw-r--r--cmd-rename-session.c57
-rw-r--r--cmd-rename-window.c61
-rw-r--r--cmd-resize-pane.c105
-rw-r--r--cmd-respawn-window.c87
-rw-r--r--cmd-rotate-window.c111
-rw-r--r--cmd-save-buffer.c90
-rw-r--r--cmd-scroll-mode.c72
-rw-r--r--cmd-select-layout.c86
-rw-r--r--cmd-select-pane.c69
-rw-r--r--cmd-select-prompt.c93
-rw-r--r--cmd-select-window.c71
-rw-r--r--cmd-send-keys.c184
-rw-r--r--cmd-send-prefix.c57
-rw-r--r--cmd-server-info.c179
-rw-r--r--cmd-set-buffer.c64
-rw-r--r--cmd-set-option.c169
-rw-r--r--cmd-set-password.c169
-rw-r--r--cmd-set-window-option.c170
-rw-r--r--cmd-show-buffer.c89
-rw-r--r--cmd-show-options.c110
-rw-r--r--cmd-show-window-options.c110
-rw-r--r--cmd-source-file.c147
-rw-r--r--cmd-split-window.c235
-rw-r--r--cmd-start-server.c46
-rw-r--r--cmd-string.c309
-rw-r--r--cmd-suspend-client.c64
-rw-r--r--cmd-swap-pane.c285
-rw-r--r--cmd-swap-window.c75
-rw-r--r--cmd-switch-client.c161
-rw-r--r--cmd-unbind-key.c120
-rw-r--r--cmd-unlink-window.c74
-rw-r--r--cmd-up-pane.c61
-rw-r--r--cmd.c393
-rw-r--r--colour.c123
-rw-r--r--grid-view.c211
-rw-r--r--grid.c497
-rw-r--r--input-keys.c227
-rw-r--r--input.c1276
-rw-r--r--key-bindings.c237
-rw-r--r--key-string.c198
-rw-r--r--layout-manual.c183
-rw-r--r--layout.c373
-rw-r--r--log.c250
-rw-r--r--mode-key.c210
-rw-r--r--names.c110
-rw-r--r--options-cmd.c182
-rw-r--r--options.c160
-rw-r--r--paste.c131
-rw-r--r--procname.c130
-rw-r--r--resize.c138
-rw-r--r--screen-redraw.c171
-rw-r--r--screen-write.c684
-rw-r--r--screen.c240
-rw-r--r--server-fn.c242
-rw-r--r--server-msg.c304
-rw-r--r--server.c1105
-rw-r--r--session.c378
-rw-r--r--status.c960
-rw-r--r--tmux.11329
-rw-r--r--tmux.c487
-rw-r--r--tmux.cat1813
-rw-r--r--tmux.h1576
-rw-r--r--tty-keys.c412
-rw-r--r--tty-term.c393
-rw-r--r--tty-write.c91
-rw-r--r--tty.c1076
-rw-r--r--utf8.c317
-rw-r--r--util.c72
-rw-r--r--window-choose.c361
-rw-r--r--window-clock.c124
-rw-r--r--window-copy.c968
-rw-r--r--window-more.c252
-rw-r--r--window-scroll.c296
-rw-r--r--window.c625
-rw-r--r--xmalloc.c144
127 files changed, 28294 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..66204957
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,48 @@
+# $OpenBSD$
+
+.PATH: ${.CURDIR}/..
+
+PROG= tmux
+SRCS= arg.c attributes.c buffer-poll.c buffer.c cfg.c client-fn.c \
+ client-msg.c client.c clock.c cmd-attach-session.c cmd-bind-key.c \
+ cmd-break-pane.c cmd-choose-session.c cmd-choose-window.c \
+ cmd-clear-history.c cmd-clock-mode.c cmd-command-prompt.c \
+ cmd-confirm-before.c cmd-copy-buffer.c cmd-copy-mode.c \
+ cmd-delete-buffer.c cmd-detach-client.c cmd-down-pane.c \
+ cmd-find-window.c cmd-generic.c cmd-has-session.c cmd-kill-pane.c \
+ cmd-kill-server.c cmd-kill-session.c cmd-kill-window.c \
+ cmd-last-window.c cmd-link-window.c cmd-list-buffers.c \
+ cmd-list-clients.c cmd-list-commands.c cmd-list-keys.c \
+ cmd-list-sessions.c cmd-list-windows.c cmd-list.c cmd-load-buffer.c \
+ cmd-lock-server.c cmd-move-window.c cmd-new-session.c cmd-new-window.c \
+ cmd-next-layout.c cmd-next-window.c cmd-paste-buffer.c \
+ cmd-previous-layout.c cmd-previous-window.c cmd-refresh-client.c \
+ cmd-rename-session.c cmd-rename-window.c cmd-resize-pane.c \
+ cmd-respawn-window.c cmd-rotate-window.c cmd-save-buffer.c \
+ cmd-scroll-mode.c cmd-select-layout.c cmd-select-pane.c \
+ cmd-select-prompt.c cmd-select-window.c cmd-send-keys.c \
+ cmd-send-prefix.c cmd-server-info.c cmd-set-buffer.c cmd-set-option.c \
+ cmd-set-password.c cmd-set-window-option.c cmd-show-buffer.c \
+ cmd-show-options.c cmd-show-window-options.c cmd-source-file.c \
+ cmd-split-window.c cmd-start-server.c cmd-string.c \
+ cmd-suspend-client.c cmd-swap-pane.c cmd-swap-window.c \
+ cmd-switch-client.c cmd-unbind-key.c cmd-unlink-window.c \
+ cmd-up-pane.c cmd.c colour.c grid-view.c grid.c input-keys.c \
+ input.c key-bindings.c key-string.c layout-manual.c layout.c log.c \
+ mode-key.c names.c options-cmd.c options.c paste.c procname.c \
+ resize.c screen-redraw.c screen-write.c screen.c server-fn.c \
+ server-msg.c server.c session.c status.c tmux.c tty-keys.c tty-term.c \
+ tty-write.c tty.c utf8.c util.c window-choose.c window-clock.c \
+ window-copy.c window-more.c window-scroll.c window.c xmalloc.c
+
+CFLAGS+= -Wno-long-long -Wall -W -Wnested-externs -Wformat=2
+CFLAGS+= -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
+CFLAGS+= -Wwrite-strings -Wshadow -Wpointer-arith -Wsign-compare
+CFLAGS+= -Wundef -Wbad-function-cast -Winline -Wcast-align
+
+LDADD= -lutil -lncurses
+DPADD= ${LIBUTIL}
+
+MAN= tmux.1
+
+.include <bsd.prog.mk>
diff --git a/arg.c b/arg.c
new file mode 100644
index 00000000..c02b2663
--- /dev/null
+++ b/arg.c
@@ -0,0 +1,194 @@
+/* $OpenBSD$ */
+
+/*
+ * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+
+#include <fnmatch.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tmux.h"
+
+struct client *arg_lookup_client(const char *);
+struct session *arg_lookup_session(const char *);
+
+struct client *
+arg_lookup_client(const char *name)
+{
+ struct client *c;
+ u_int i;
+
+ for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
+ c = ARRAY_ITEM(&clients, i);
+ if (c != NULL && strcmp(name, c->tty.path) == 0)
+ return (c);
+ }
+
+ return (NULL);
+}
+
+struct session *
+arg_lookup_session(const char *name)
+{
+ struct session *s, *newest = NULL;
+ struct timeval *tv;
+ u_int i;
+
+ tv = NULL;
+ for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
+ s = ARRAY_ITEM(&sessions, i);
+ if (s == NULL || fnmatch(name, s->name, 0) != 0)
+ continue;
+
+ if (tv == NULL || timercmp(&s->tv, tv, >)) {
+ newest = s;
+ tv = &s->tv;
+ }
+ }
+
+ return (newest);
+}
+
+struct client *
+arg_parse_client(const char *arg)
+{
+ struct client *c;
+ char *arg2;
+ size_t n;
+
+ if (arg != NULL && (arg[0] != ':' || arg[1] != '\0')) {
+ arg2 = xstrdup(arg);
+
+ /* Trim a trailing : if any from the argument. */
+ n = strlen(arg2);
+ if (arg2[n - 1] == ':')
+ arg2[n - 1] = '\0';
+
+ /* Try and look up the client name. */
+ c = arg_lookup_client(arg2);
+ xfree(arg2);
+ return (c);
+ }
+
+ return (NULL);
+}
+
+struct session *
+arg_parse_session(const char *arg)
+{
+ struct session *s;
+ struct client *c;
+ char *arg2;
+ size_t n;
+
+ if (arg != NULL && (arg[0] != ':' || arg[1] != '\0')) {
+ arg2 = xstrdup(arg);
+
+ /* Trim a trailing : if any from the argument. */
+ n = strlen(arg2);
+ if (arg2[n - 1] == ':')
+ arg2[n - 1] = '\0';
+
+ /* See if the argument matches a session. */
+ if ((s = arg_lookup_session(arg2)) != NULL) {
+ xfree(arg2);
+ return (s);
+ }
+
+ /* If not try a client. */
+ if ((c = arg_lookup_client(arg2)) != NULL) {
+ xfree(arg2);
+ return (c->session);
+ }
+
+ xfree(arg2);
+ }
+
+ return (NULL);
+}
+
+int
+arg_parse_window(const char *arg, struct session **s, int *idx)
+{
+ char *arg2, *ptr;
+ const char *errstr;
+
+ *idx = -1;
+
+ /* Handle no argument or a single :. */
+ if (arg == NULL || (arg[0] == ':' && arg[1] == '\0')) {
+ *s = arg_parse_session(NULL);
+ return (0);
+ }
+
+ /* Find the separator if any. */
+ arg2 = xstrdup(arg);
+ ptr = strrchr(arg2, ':');
+
+ /*
+ * If it is first, this means no session name, so use current session
+ * and try to convert the rest as index.
+ */
+ if (ptr == arg2) {
+ *idx = strtonum(ptr + 1, 0, INT_MAX, &errstr);
<