Move struct options into options.c.
authornicm <nicm@openbsd.org>
Tue, 27 Oct 2015 15:58:42 +0000 (15:58 +0000)
committernicm <nicm@openbsd.org>
Tue, 27 Oct 2015 15:58:42 +0000 (15:58 +0000)
37 files changed:
usr.bin/tmux/alerts.c
usr.bin/tmux/client.c
usr.bin/tmux/cmd-attach-session.c
usr.bin/tmux/cmd-break-pane.c
usr.bin/tmux/cmd-choose-buffer.c
usr.bin/tmux/cmd-move-window.c
usr.bin/tmux/cmd-new-session.c
usr.bin/tmux/cmd-new-window.c
usr.bin/tmux/cmd-rename-window.c
usr.bin/tmux/cmd-send-keys.c
usr.bin/tmux/cmd-set-option.c
usr.bin/tmux/cmd-show-options.c
usr.bin/tmux/cmd-split-window.c
usr.bin/tmux/cmd-switch-client.c
usr.bin/tmux/format.c
usr.bin/tmux/input-keys.c
usr.bin/tmux/input.c
usr.bin/tmux/layout-set.c
usr.bin/tmux/names.c
usr.bin/tmux/options.c
usr.bin/tmux/paste.c
usr.bin/tmux/resize.c
usr.bin/tmux/screen-redraw.c
usr.bin/tmux/server-client.c
usr.bin/tmux/server-fn.c
usr.bin/tmux/server.c
usr.bin/tmux/session.c
usr.bin/tmux/status.c
usr.bin/tmux/tmux.c
usr.bin/tmux/tmux.h
usr.bin/tmux/tty-keys.c
usr.bin/tmux/tty-term.c
usr.bin/tmux/tty.c
usr.bin/tmux/window-choose.c
usr.bin/tmux/window-clock.c
usr.bin/tmux/window-copy.c
usr.bin/tmux/window.c

index 7d4436b..90281b1 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: alerts.c,v 1.3 2015/09/21 09:34:52 nicm Exp $ */
+/* $OpenBSD: alerts.c,v 1.4 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2015 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -80,11 +80,11 @@ alerts_enabled(struct window *w, int flags)
        struct session  *s;
 
        if (flags & WINDOW_ACTIVITY) {
-               if (options_get_number(&w->options, "monitor-activity"))
+               if (options_get_number(w->options, "monitor-activity"))
                        return (1);
        }
        if (flags & WINDOW_SILENCE) {
-               if (options_get_number(&w->options, "monitor-silence") != 0)
+               if (options_get_number(w->options, "monitor-silence") != 0)
                        return (1);
        }
        if (~flags & WINDOW_BELL)
@@ -92,7 +92,7 @@ alerts_enabled(struct window *w, int flags)
        RB_FOREACH(s, sessions, &sessions) {
                if (!session_has(s, w))
                        continue;
-               if (options_get_number(&s->options, "bell-action") != BELL_NONE)
+               if (options_get_number(s->options, "bell-action") != BELL_NONE)
                        return (1);
        }
        return (0);
@@ -116,7 +116,7 @@ alerts_reset(struct window *w)
        event_del(&w->alerts_timer);
 
        timerclear(&tv);
-       tv.tv_sec = options_get_number(&w->options, "monitor-silence");
+       tv.tv_sec = options_get_number(w->options, "monitor-silence");
 
        log_debug("@%u alerts timer reset %u", w->id, (u_int)tv.tv_sec);
        if (tv.tv_sec != 0)
@@ -160,11 +160,11 @@ alerts_check_bell(struct session *s, struct winlink *wl)
        if (s->curw->window == w)
                w->flags &= ~WINDOW_BELL;
 
-       action = options_get_number(&s->options, "bell-action");
+       action = options_get_number(s->options, "bell-action");
        if (action == BELL_NONE)
                return (0);
 
-       visual = options_get_number(&s->options, "visual-bell");
+       visual = options_get_number(s->options, "visual-bell");
        TAILQ_FOREACH(c, &clients, entry) {
                if (c->session != s || c->flags & CLIENT_CONTROL)
                        continue;
@@ -201,14 +201,14 @@ alerts_check_activity(struct session *s, struct winlink *wl)
        if (s->curw == wl && !(s->flags & SESSION_UNATTACHED))
                return (0);
 
-       if (!options_get_number(&w->options, "monitor-activity"))
+       if (!options_get_number(w->options, "monitor-activity"))
                return (0);
 
-       if (options_get_number(&s->options, "bell-on-alert"))
+       if (options_get_number(s->options, "bell-on-alert"))
                alerts_ring_bell(s);
        wl->flags |= WINLINK_ACTIVITY;
 
-       if (options_get_number(&s->options, "visual-activity")) {
+       if (options_get_number(s->options, "visual-activity")) {
                TAILQ_FOREACH(c, &clients, entry) {
                        if (c->session != s)
                                continue;
@@ -233,14 +233,14 @@ alerts_check_silence(struct session *s, struct winlink *wl)
        if (s->curw == wl && !(s->flags & SESSION_UNATTACHED))
                return (0);
 
-       if (options_get_number(&w->options, "monitor-silence") == 0)
+       if (options_get_number(w->options, "monitor-silence") == 0)
                return (0);
 
-       if (options_get_number(&s->options, "bell-on-alert"))
+       if (options_get_number(s->options, "bell-on-alert"))
                alerts_ring_bell(s);
        wl->flags |= WINLINK_SILENCE;
 
-       if (options_get_number(&s->options, "visual-silence")) {
+       if (options_get_number(s->options, "visual-silence")) {
                TAILQ_FOREACH(c, &clients, entry) {
                        if (c->session != s)
                                continue;
index b6e6042..17ac92c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: client.c,v 1.99 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: client.c,v 1.100 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -291,9 +291,9 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
                fatal("pledge failed");
 
        /* Free stuff that is not used in the client. */
-       options_free(&global_options);
-       options_free(&global_s_options);
-       options_free(&global_w_options);
+       options_free(global_options);
+       options_free(global_s_options);
+       options_free(global_w_options);
        environ_free(&global_environ);
 
        /* Create stdin handler. */
index 27cb69a..2e3c641 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-attach-session.c,v 1.43 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: cmd-attach-session.c,v 1.44 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -121,7 +121,7 @@ cmd_attach_session(struct cmd_q *cmdq, const char *tflag, int dflag, int rflag,
                }
 
                if (!Eflag) {
-                       update = options_get_string(&s->options,
+                       update = options_get_string(s->options,
                            "update-environment");
                        environ_update(update, &c->environ, &s->environ);
                }
@@ -152,7 +152,7 @@ cmd_attach_session(struct cmd_q *cmdq, const char *tflag, int dflag, int rflag,
                }
 
                if (!Eflag) {
-                       update = options_get_string(&s->options,
+                       update = options_get_string(s->options,
                            "update-environment");
                        environ_update(update, &c->environ, &s->environ);
                }
index 22655a9..482dd25 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-break-pane.c,v 1.28 2015/09/17 14:11:55 nicm Exp $ */
+/* $OpenBSD: cmd-break-pane.c,v 1.29 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -84,7 +84,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq)
        layout_init(w, wp);
 
        if (idx == -1)
-               idx = -1 - options_get_number(&dst_s->options, "base-index");
+               idx = -1 - options_get_number(dst_s->options, "base-index");
        wl = session_attach(dst_s, w, idx, &cause); /* can't fail */
        if (!args_has(self->args, 'd'))
                session_select(dst_s, wl->idx);
index 386f68a..7865181 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-choose-buffer.c,v 1.23 2015/08/29 09:25:00 nicm Exp $ */
+/* $OpenBSD: cmd-choose-buffer.c,v 1.24 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2010 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -63,7 +63,7 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 
        if ((wl = cmd_find_window(cmdq, args_get(args, 't'), NULL)) == NULL)
                return (CMD_RETURN_ERROR);
-       utf8flag = options_get_number(&wl->window->options, "utf8");
+       utf8flag = options_get_number(wl->window->options, "utf8");
 
        if (paste_get_top(NULL) == NULL)
                return (CMD_RETURN_NORMAL);
index ecb0857..1bbc79c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-move-window.c,v 1.20 2015/06/17 16:50:28 nicm Exp $ */
+/* $OpenBSD: cmd-move-window.c,v 1.21 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -95,7 +95,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_q *cmdq)
         * session already has the correct winlink id to us, either
         * automatically or specified by -s.
         */
-       if (!sflag && options_get_number(&src->options, "renumber-windows"))
+       if (!sflag && options_get_number(src->options, "renumber-windows"))
                session_renumber_windows(src);
 
        recalculate_sizes();
index 9061449..33bdea9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-new-session.c,v 1.73 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: cmd-new-session.c,v 1.74 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -197,7 +197,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
                        goto error;
                }
        }
-       if (sy > 0 && options_get_number(&global_s_options, "status"))
+       if (sy > 0 && options_get_number(global_s_options, "status"))
                sy--;
        if (sx == 0)
                sx = 1;
@@ -211,7 +211,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
                argc = args->argc;
                argv = args->argv;
        } else if (target == NULL) {
-               cmd = options_get_string(&global_s_options, "default-command");
+               cmd = options_get_string(global_s_options, "default-command");
                if (cmd != NULL && *cmd != '\0') {
                        argc = 1;
                        argv = &cmd;
@@ -232,13 +232,13 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
        /* Construct the environment. */
        environ_init(&env);
        if (c != NULL && !args_has(args, 'E')) {
-               update = options_get_string(&global_s_options,
+               update = options_get_string(global_s_options,
                    "update-environment");
                environ_update(update, &c->environ, &env);
        }
 
        /* Create the new session. */
-       idx = -1 - options_get_number(&global_s_options, "base-index");
+       idx = -1 - options_get_number(global_s_options, "base-index");
        s = session_create(newname, argc, argv, path, cwd, &env, tiop, idx, sx,
            sy, &cause);
        if (s == NULL) {
@@ -252,7 +252,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
        if (argc >= 0 && args_has(args, 'n')) {
                w = s->curw->window;
                window_set_name(w, args_get(args, 'n'));
-               options_set_number(&w->options, "automatic-rename", 0);
+               options_set_number(w->options, "automatic-rename", 0);
        }
 
        /*
index 1c7653e..7c4de1d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-new-window.c,v 1.47 2015/10/23 16:30:15 nicm Exp $ */
+/* $OpenBSD: cmd-new-window.c,v 1.48 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -71,7 +71,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
        detached = args_has(args, 'd');
 
        if (args->argc == 0) {
-               cmd = options_get_string(&s->options, "default-command");
+               cmd = options_get_string(s->options, "default-command");
                if (cmd != NULL && *cmd != '\0') {
                        argc = 1;
                        argv = (char **)&cmd;
@@ -136,7 +136,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
        }
 
        if (idx == -1)
-               idx = -1 - options_get_number(&s->options, "base-index");
+               idx = -1 - options_get_number(s->options, "base-index");
        wl = session_new(s, args_get(args, 'n'), argc, argv, path, cwd, idx,
                &cause);
        if (wl == NULL) {
index ebc7050..0b4cbb2 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-rename-window.c,v 1.11 2014/10/20 22:29:25 nicm Exp $ */
+/* $OpenBSD: cmd-rename-window.c,v 1.12 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -47,7 +47,7 @@ cmd_rename_window_exec(struct cmd *self, struct cmd_q *cmdq)
                return (CMD_RETURN_ERROR);
 
        window_set_name(wl->window, args->argv[0]);
-       options_set_number(&wl->window->options, "automatic-rename", 0);
+       options_set_number(wl->window->options, "automatic-rename", 0);
 
        server_status_window(wl->window);
 
index fefa616..a123e38 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-send-keys.c,v 1.20 2015/05/08 16:18:04 nicm Exp $ */
+/* $OpenBSD: cmd-send-keys.c,v 1.21 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -70,9 +70,9 @@ cmd_send_keys_exec(struct cmd *self, struct cmd_q *cmdq)
 
        if (self->entry == &cmd_send_prefix_entry) {
                if (args_has(args, '2'))
-                       key = options_get_number(&s->options, "prefix2");
+                       key = options_get_number(s->options, "prefix2");
                else
-                       key = options_get_number(&s->options, "prefix");
+                       key = options_get_number(s->options, "prefix");
                window_pane_key(wp, NULL, s, key, NULL);
                return (CMD_RETURN_NORMAL);
        }
index 93efc24..2f4eeec 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-set-option.c,v 1.83 2015/09/14 13:22:02 nicm Exp $ */
+/* $OpenBSD: cmd-set-option.c,v 1.84 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -126,10 +126,10 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
 
        /* Work out the tree from the table. */
        if (table == server_options_table)
-               oo = &global_options;
+               oo = global_options;
        else if (table == window_options_table) {
                if (args_has(self->args, 'g'))
-                       oo = &global_w_options;
+                       oo = global_w_options;
                else {
                        wl = cmd_find_window(cmdq, args_get(args, 't'), NULL);
                        if (wl == NULL) {
@@ -139,11 +139,11 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
                                    'g')) ? " need target window or -g" : "");
                                return (CMD_RETURN_ERROR);
                        }
-                       oo = &wl->window->options;
+                       oo = wl->window->options;
                }
        } else if (table == session_options_table) {
                if (args_has(self->args, 'g'))
-                       oo = &global_s_options;
+                       oo = global_s_options;
                else {
                        s = cmd_find_session(cmdq, args_get(args, 't'), 0);
                        if (s == NULL) {
@@ -153,7 +153,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
                                    'g')) ? " need target session or -g" : "");
                                return (CMD_RETURN_ERROR);
                        }
-                       oo = &s->options;
+                       oo = s->options;
                }
        } else {
                cmdq_error(cmdq, "unknown table");
@@ -179,7 +179,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
        /* Start or stop timers if necessary. */
        if (strcmp(oe->name, "automatic-rename") == 0) {
                RB_FOREACH(w, windows, &windows) {
-                       if (options_get_number(&w->options, "automatic-rename"))
+                       if (options_get_number(w->options, "automatic-rename"))
                                w->active->flags |= PANE_CHANGED;
                }
        }
@@ -210,25 +210,25 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char *optstr,
        struct options  *oo;
 
        if (args_has(args, 's'))
-               oo = &global_options;
+               oo = global_options;
        else if (args_has(self->args, 'w') ||
            self->entry == &cmd_set_window_option_entry) {
                if (args_has(self->args, 'g'))
-                       oo = &global_w_options;
+                       oo = global_w_options;
                else {
                        wl = cmd_find_window(cmdq, args_get(args, 't'), NULL);
                        if (wl == NULL)
                                return (CMD_RETURN_ERROR);
-                       oo = &wl->window->options;
+                       oo = wl->window->options;
                }
        } else {
                if (args_has(self->args, 'g'))
-                       oo = &global_s_options;
+                       oo = global_s_options;
                else {
                        s = cmd_find_session(cmdq, args_get(args, 't'), 0);
                        if (s == NULL)
                                return (CMD_RETURN_ERROR);
-                       oo = &s->options;
+                       oo = s->options;
                }
        }
 
@@ -276,7 +276,7 @@ cmd_set_option_unset(struct cmd *self, struct cmd_q *cmdq,
                return (-1);
        }
 
-       if (args_has(args, 'g') || oo == &global_options) {
+       if (args_has(args, 'g') || oo == global_options) {
                switch (oe->type) {
                case OPTIONS_TABLE_STRING:
                        options_set_string(oo, oe->name, "%s", oe->default_str);
index 9d73acb..4a8b2cb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-show-options.c,v 1.23 2014/10/20 22:29:25 nicm Exp $ */
+/* $OpenBSD: cmd-show-options.c,v 1.24 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -61,28 +61,28 @@ cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
        int                                      quiet;
 
        if (args_has(self->args, 's')) {
-               oo = &global_options;
+               oo = global_options;
                table = server_options_table;
        } else if (args_has(self->args, 'w') ||
            self->entry == &cmd_show_window_options_entry) {
                table = window_options_table;
                if (args_has(self->args, 'g'))
-                       oo = &global_w_options;
+                       oo = global_w_options;
                else {
                        wl = cmd_find_window(cmdq, args_get(args, 't'), NULL);
                        if (wl == NULL)
                                return (CMD_RETURN_ERROR);
-                       oo = &wl->window->options;
+                       oo = wl->window->options;
                }
        } else {
                table = session_options_table;
                if (args_has(self->args, 'g'))
-                       oo = &global_s_options;
+                       oo = global_s_options;
                else {
                        s = cmd_find_session(cmdq, args_get(args, 't'), 0);
                        if (s == NULL)
                                return (CMD_RETURN_ERROR);
-                       oo = &s->options;
+                       oo = s->options;
                }
        }
 
@@ -151,13 +151,15 @@ cmd_show_options_all(struct cmd *self, struct cmd_q *cmdq,
        struct options_entry                    *o;
        const char                              *optval;
 
-       RB_FOREACH(o, options_tree, &oo->tree) {
+       o = options_first(oo);
+       while (o != NULL) {
                if (*o->name == '@') {
                        if (args_has(self->args, 'v'))
                                cmdq_print(cmdq, "%s", o->str);
                        else
                                cmdq_print(cmdq, "%s \"%s\"", o->name, o->str);
                }
+               o = options_next(o);
        }
 
        for (oe = table; oe->name != NULL; oe++) {
index 9bc8278..9fc55df 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-split-window.c,v 1.58 2015/10/23 16:30:15 nicm Exp $ */
+/* $OpenBSD: cmd-split-window.c,v 1.59 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -73,7 +73,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_q *cmdq)
        server_fill_environ(s, &env);
 
        if (args->argc == 0) {
-               cmd = options_get_string(&s->options, "default-command");
+               cmd = options_get_string(s->options, "default-command");
                if (cmd != NULL && *cmd != '\0') {
                        argc = 1;
                        argv = (char **)&cmd;
@@ -135,9 +135,9 @@ cmd_split_window_exec(struct cmd *self, struct cmd_q *cmdq)
                else
                        size = (wp->sx * percentage) / 100;
        }
-       hlimit = options_get_number(&s->options, "history-limit");
+       hlimit = options_get_number(s->options, "history-limit");
 
-       shell = options_get_string(&s->options, "default-shell");
+       shell = options_get_string(s->options, "default-shell");
        if (*shell == '\0' || areshell(shell))
                shell = _PATH_BSHELL;
 
index 53581ee..4c6034d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-switch-client.c,v 1.31 2015/09/22 21:56:16 nicm Exp $ */
+/* $OpenBSD: cmd-switch-client.c,v 1.32 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -120,7 +120,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q *cmdq)
        }
 
        if (c != NULL && !args_has(args, 'E')) {
-               update = options_get_string(&s->options, "update-environment");
+               update = options_get_string(s->options, "update-environment");
                environ_update(update, &c->environ, &s->environ);
        }
 
index 98398a7..7e71419 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: format.c,v 1.89 2015/10/27 09:28:31 nicm Exp $ */
+/* $OpenBSD: format.c,v 1.90 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -581,15 +581,15 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
        found = NULL;
 
        if (~modifiers & FORMAT_TIMESTRING) {
-               o = options_find(&global_options, key);
+               o = options_find(global_options, key);
                if (o == NULL && ft->w != NULL)
-                       o = options_find(&ft->w->options, key);
+                       o = options_find(ft->w->options, key);
                if (o == NULL)
-                       o = options_find(&global_w_options, key);
+                       o = options_find(global_w_options, key);
                if (o == NULL && ft->s != NULL)
-                       o = options_find(&ft->s->options, key);
+                       o = options_find(ft->s->options, key);
                if (o == NULL)
-                       o = options_find(&global_s_options, key);
+                       o = options_find(global_s_options, key);
                if (o != NULL) {
                        switch (o->type) {
                        case OPTIONS_STRING:
@@ -1101,7 +1101,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
 
        format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base);
        format_add(ft, "pane_synchronized", "%d",
-           !!options_get_number(&wp->window->options, "synchronize-panes"));
+           !!options_get_number(wp->window->options, "synchronize-panes"));
 
        format_add(ft, "pane_tty", "%s", wp->tty);
        format_add(ft, "pane_pid", "%ld", (long) wp->pid);
index 46f657d..02b650a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: input-keys.c,v 1.44 2015/10/26 17:17:06 nicm Exp $ */
+/* $OpenBSD: input-keys.c,v 1.45 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -171,7 +171,7 @@ input_key(struct window_pane *wp, int key, struct mouse_event *m)
         * Then try to look this up as an xterm key, if the flag to output them
         * is set.
         */
-       if (options_get_number(&wp->window->options, "xterm-keys")) {
+       if (options_get_number(wp->window->options, "xterm-keys")) {
                if ((out = xterm_keys_lookup(key)) != NULL) {
                        bufferevent_write(wp->event, out, strlen(out));
                        free(out);
index 8ef18ab..511b6fb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: input.c,v 1.86 2015/09/02 17:52:57 nicm Exp $ */
+/* $OpenBSD: input.c,v 1.87 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1907,12 +1907,12 @@ input_exit_rename(struct input_ctx *ictx)
 {
        if (ictx->flags & INPUT_DISCARD)
                return;
-       if (!options_get_number(&ictx->wp->window->options, "allow-rename"))
+       if (!options_get_number(ictx->wp->window->options, "allow-rename"))
                return;
        log_debug("%s: \"%s\"", __func__, ictx->input_buf);
 
        window_set_name(ictx->wp->window, ictx->input_buf);
-       options_set_number(&ictx->wp->window->options, "automatic-rename", 0);
+       options_set_number(ictx->wp->window->options, "automatic-rename", 0);
 
        server_status_window(ictx->wp->window);
 }
@@ -1921,7 +1921,7 @@ input_exit_rename(struct input_ctx *ictx)
 int
 input_utf8_open(struct input_ctx *ictx)
 {
-       if (!options_get_number(&ictx->wp->window->options, "utf8")) {
+       if (!options_get_number(ictx->wp->window->options, "utf8")) {
                /* Print, and do not switch state. */
                input_print(ictx);
                return (-1);
index 5e396b3..f45b803 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: layout-set.c,v 1.12 2015/08/29 23:55:55 nicm Exp $ */
+/* $OpenBSD: layout-set.c,v 1.13 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -245,10 +245,10 @@ layout_set_main_h(struct window *w)
        width = (w->sx - (n - 1)) / columns;
 
        /* Get the main pane height and add one for separator line. */
-       mainheight = options_get_number(&w->options, "main-pane-height") + 1;
+       mainheight = options_get_number(w->options, "main-pane-height") + 1;
 
        /* Get the optional other pane height and add one for separator line. */
-       otherheight = options_get_number(&w->options, "other-pane-height") + 1;
+       otherheight = options_get_number(w->options, "other-pane-height") + 1;
 
        /*
         * If an other pane height was specified, honour it so long as it
@@ -366,10 +366,10 @@ layout_set_main_v(struct window *w)
        height = (w->sy - (n - 1)) / rows;
 
        /* Get the main pane width and add one for separator line. */
-       mainwidth = options_get_number(&w->options, "main-pane-width") + 1;
+       mainwidth = options_get_number(w->options, "main-pane-width") + 1;
 
        /* Get the optional other pane width and add one for separator line. */
-       otherwidth = options_get_number(&w->options, "other-pane-width") + 1;
+       otherwidth = options_get_number(w->options, "other-pane-width") + 1;
 
        /*
         * If an other pane width was specified, honour it so long as it
index 398e691..a4ccb19 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: names.c,v 1.29 2015/08/29 00:29:15 nicm Exp $ */
+/* $OpenBSD: names.c,v 1.30 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -58,7 +58,7 @@ check_window_name(struct window *w)
        if (w->active == NULL)
                return;
 
-       if (!options_get_number(&w->options, "automatic-rename"))
+       if (!options_get_number(w->options, "automatic-rename"))
                return;
 
        if (~w->active->flags & PANE_CHANGED) {
@@ -122,7 +122,7 @@ format_window_name(struct window *w)
        format_defaults_window(ft, w);
        format_defaults_pane(ft, w->active);
 
-       fmt = options_get_string(&w->options, "automatic-rename-format");
+       fmt = options_get_string(w->options, "automatic-rename-format");
        name = format_expand(ft, fmt);
 
        format_free(ft);
index 506a819..59494c1 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: options.c,v 1.12 2015/02/18 15:32:37 nicm Exp $ */
+/* $OpenBSD: options.c,v 1.13 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
  * a red-black tree.
  */
 
+struct options {
+       RB_HEAD(options_tree, options_entry) tree;
+       struct options  *parent;
+};
+
+int    options_cmp(struct options_entry *, struct options_entry *);
+RB_PROTOTYPE(options_tree, options_entry, entry, options_cmp);
 RB_GENERATE(options_tree, options_entry, entry, options_cmp);
 
 int
@@ -37,11 +44,15 @@ options_cmp(struct options_entry *o1, struct options_entry *o2)
        return (strcmp(o1->name, o2->name));
 }
 
-void
-options_init(struct options *oo, struct options *parent)
+struct options *
+options_create(struct options *parent)
 {
+       struct options *oo;
+
+       oo = xcalloc(1, sizeof *oo);
        RB_INIT(&oo->tree);
        oo->parent = parent;
+       return (oo);
 }
 
 void
@@ -57,6 +68,19 @@ options_free(struct options *oo)
                        free(o->str);
                free(o);
        }
+       free(oo);
+}
+
+struct options_entry *
+options_first(struct options *oo)
+{
+       return (RB_MIN(options_tree, &oo->tree));
+}
+
+struct options_entry *
+options_next(struct options_entry *o)
+{
+       return (RB_NEXT(options_tree, &oo->tree, o));
 }
 
 struct options_entry *
index d3f5dd7..c500a47 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: paste.c,v 1.31 2015/09/14 13:22:02 nicm Exp $ */
+/* $OpenBSD: paste.c,v 1.32 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -151,7 +151,7 @@ paste_add(char *data, size_t size)
        if (size == 0)
                return;
 
-       limit = options_get_number(&global_options, "buffer-limit");
+       limit = options_get_number(global_options, "buffer-limit");
        RB_FOREACH_REVERSE_SAFE(pb, paste_time_tree, &paste_by_time, pb1) {
                if (paste_num_automatic < limit)
                        break;
index de40d21..c5e1950 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: resize.c,v 1.17 2015/04/24 23:17:11 nicm Exp $ */
+/* $OpenBSD: resize.c,v 1.18 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -53,7 +53,7 @@ recalculate_sizes(void)
        int                      flag, has_status, is_zoomed, forced;
 
        RB_FOREACH(s, sessions, &sessions) {
-               has_status = options_get_number(&s->options, "status");
+               has_status = options_get_number(s->options, "status");
 
                s->attached = 0;
                ssx = ssy = UINT_MAX;
@@ -94,7 +94,7 @@ recalculate_sizes(void)
        RB_FOREACH(w, windows, &windows) {
                if (w->active == NULL)
                        continue;
-               flag = options_get_number(&w->options, "aggressive-resize");
+               flag = options_get_number(w->options, "aggressive-resize");
 
                ssx = ssy = UINT_MAX;
                RB_FOREACH(s, sessions, &sessions) {
@@ -115,12 +115,12 @@ recalculate_sizes(void)
                        continue;
 
                forced = 0;
-               limit = options_get_number(&w->options, "force-width");
+               limit = options_get_number(w->options, "force-width");
                if (limit >= PANE_MINIMUM && ssx > limit) {
                        ssx = limit;
                        forced |= WINDOW_FORCEWIDTH;
                }
-               limit = options_get_number(&w->options, "force-height");
+               limit = options_get_number(w->options, "force-height");
                if (limit >= PANE_MINIMUM && ssy > limit) {
                        ssy = limit;
                        forced |= WINDOW_FORCEHEIGHT;
index 1f86a2d..f19d81c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-redraw.c,v 1.32 2015/06/04 11:43:51 nicm Exp $ */
+/* $OpenBSD: screen-redraw.c,v 1.33 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -222,7 +222,7 @@ void
 screen_redraw_screen(struct client *c, int draw_panes, int draw_status,
     int draw_borders)
 {
-       struct options  *oo = &c->session->options;
+       struct options  *oo = c->session->options;
        struct tty      *tty = &c->tty;
        u_int            top;
        int              status, spos;
@@ -276,7 +276,7 @@ screen_redraw_draw_borders(struct client *c, int status, u_int top)
 {
        struct session          *s = c->session;
        struct window           *w = s->curw->window;
-       struct options          *oo = &w->options;
+       struct options          *oo = w->options;
        struct tty              *tty = &c->tty;
        struct window_pane      *wp;
        struct grid_cell         m_active_gc, active_gc, m_other_gc, other_gc;
@@ -392,7 +392,7 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top)
 {
        struct tty              *tty = &c->tty;
        struct session          *s = c->session;
-       struct options          *oo = &s->options;
+       struct options          *oo = s->options;
        struct window           *w = wp->window;
        struct grid_cell         gc;
        u_int                    idx, px, py, i, j, xoff, yoff;
index b1bc87a..01c8f0e 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.162 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.163 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -490,7 +490,7 @@ server_client_assume_paste(struct session *s)
        struct timeval  tv;
        int             t;
 
-       if ((t = options_get_number(&s->options, "assume-paste-time")) == 0)
+       if ((t = options_get_number(s->options, "assume-paste-time")) == 0)
                return (0);
 
        timersub(&s->activity_time, &s->last_activity_time, &tv);
@@ -556,7 +556,7 @@ server_client_handle_key(struct client *c, int key)
                m->valid = 1;
                m->key = key;
 
-               if (!options_get_number(&s->options, "mouse"))
+               if (!options_get_number(s->options, "mouse"))
                        goto forward;
        } else
                m->valid = 0;
@@ -593,7 +593,7 @@ retry:
                 * If this is a repeating key, start the timer. Otherwise reset
                 * the client back to the root table.
                 */
-               xtimeout = options_get_number(&s->options, "repeat-time");
+               xtimeout = options_get_number(s->options, "repeat-time");
                if (xtimeout != 0 && bd->can_repeat) {
                        c->flags |= CLIENT_REPEAT;
 
@@ -635,8 +635,8 @@ retry:
         * No match, but in the root table. Prefix switches to the prefix table
         * and everything else is passed through.
         */
-       if (key == options_get_number(&s->options, "prefix") ||
-           key == options_get_number(&s->options, "prefix2")) {
+       if (key == options_get_number(s->options, "prefix") ||
+           key == options_get_number(s->options, "prefix2")) {
                server_client_key_table(c, "prefix");
                server_status_client(c);
                return;
@@ -713,7 +713,7 @@ server_client_check_focus(struct window_pane *wp)
        int              push;
 
        /* Are focus events off? */
-       if (!options_get_number(&global_options, "focus-events"))
+       if (!options_get_number(global_options, "focus-events"))
                return;
 
        /* Do we need to push the focus state? */
@@ -773,7 +773,7 @@ server_client_reset_state(struct client *c)
        struct window           *w = c->session->curw->window;
        struct window_pane      *wp = w->active;
        struct screen           *s = wp->screen;
-       struct options          *oo = &c->session->options;
+       struct options          *oo = c->session->options;
        int                      status, mode, o;
 
        if (c->flags & CLIENT_SUSPENDED)
@@ -862,7 +862,7 @@ server_client_check_redraw(struct client *c)
                return;
 
        if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) {
-               if (options_get_number(&s->options, "set-titles"))
+               if (options_get_number(s->options, "set-titles"))
                        server_client_set_title(c);
 
                if (c->message_string != NULL)
@@ -922,7 +922,7 @@ server_client_set_title(struct client *c)
        char                    *title;
        struct format_tree      *ft;
 
-       template = options_get_string(&s->options, "set-titles-string");
+       template = options_get_string(s->options, "set-titles-string");
 
        ft = format_create();
        format_defaults(ft, c, NULL, NULL, NULL);
@@ -1206,7 +1206,7 @@ server_client_dispatch_shell(struct client *c)
 {
        const char      *shell;
 
-       shell = options_get_string(&global_s_options, "default-shell");
+       shell = options_get_string(global_s_options, "default-shell");
        if (*shell == '\0' || areshell(shell))
                shell = _PATH_BSHELL;
        proc_send_s(c->peer, MSG_SHELL, shell);
index bbfaaa5..d4ba54d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-fn.c,v 1.90 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: server-fn.c,v 1.91 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -39,7 +39,7 @@ server_fill_environ(struct session *s, struct environ *env)
        long    pid;
 
        if (s != NULL) {
-               term = options_get_string(&global_options, "default-terminal");
+               term = options_get_string(global_options, "default-terminal");
                environ_set(env, "TERM", term);
 
                idx = s->id;
@@ -183,7 +183,7 @@ server_lock_client(struct client *c)
        if (c->flags & CLIENT_SUSPENDED)
                return;
 
-       cmd = options_get_string(&c->session->options, "lock-command");
+       cmd = options_get_string(c->session->options, "lock-command");
        if (strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
                return;
 
@@ -219,7 +219,7 @@ server_kill_window(struct window *w)
                                server_redraw_session_group(s);
                }
 
-               if (options_get_number(&s->options, "renumber-windows")) {
+               if (options_get_number(s->options, "renumber-windows")) {
                        if ((sg = session_group_find(s)) != NULL) {
                                TAILQ_FOREACH(target_s, &sg->sessions, gentry)
                                        session_renumber_windows(target_s);
@@ -272,7 +272,7 @@ server_link_window(struct session *src, struct winlink *srcwl,
        }
 
        if (dstidx == -1)
-               dstidx = -1 - options_get_number(&dst->options, "base-index");
+               dstidx = -1 - options_get_number(dst->options, "base-index");
        dstwl = session_attach(dst, srcwl->window, dstidx, cause);
        if (dstwl == NULL)
                return (-1);
@@ -308,7 +308,7 @@ server_destroy_pane(struct window_pane *wp)
                wp->fd = -1;
        }
 
-       if (options_get_number(&w->options, "remain-on-exit")) {
+       if (options_get_number(w->options, "remain-on-exit")) {
                if (old_fd == -1)
                        return;
                screen_write_start(&ctx, wp, &wp->base);
@@ -371,7 +371,7 @@ server_destroy_session(struct session *s)
        struct client   *c;
        struct session  *s_new;
 
-       if (!options_get_number(&s->options, "detach-on-destroy"))
+       if (!options_get_number(s->options, "detach-on-destroy"))
                s_new = server_next_session(s);
        else
                s_new = NULL;
@@ -407,7 +407,7 @@ server_check_unattached(void)
        RB_FOREACH(s, sessions, &sessions) {
                if (!(s->flags & SESSION_UNATTACHED))
                        continue;
-               if (options_get_number (&s->options, "destroy-unattached"))
+               if (options_get_number (s->options, "destroy-unattached"))
                        session_destroy(s);
        }
 }
@@ -418,7 +418,7 @@ server_set_identify(struct client *c)
        struct timeval  tv;
        int             delay;
 
-       delay = options_get_number(&c->session->options, "display-panes-time");
+       delay = options_get_number(c->session->options, "display-panes-time");
        tv.tv_sec = delay / 1000;
        tv.tv_usec = (delay % 1000) * 1000L;
 
index 93b32f0..df145a1 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.144 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.145 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -217,7 +217,7 @@ server_loop(void)
 
        server_client_loop();
 
-       if (!options_get_number(&global_options, "exit-unattached")) {
+       if (!options_get_number(global_options, "exit-unattached")) {
                if (!RB_EMPTY(&sessions))
                        return (0);
        }
index f150a2a..9df9075 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: session.c,v 1.55 2015/09/01 18:50:16 nicm Exp $ */
+/* $OpenBSD: session.c,v 1.56 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -120,10 +120,10 @@ session_create(const char *name, int argc, char **argv, const char *path,
        TAILQ_INIT(&s->lastw);
        RB_INIT(&s->windows);
 
-       options_init(&s->options, &global_s_options);
        environ_init(&s->environ);
        if (env != NULL)
                environ_copy(env, &s->environ);
+       s->options = options_create(global_s_options);
 
        s->tio = NULL;
        if (tio != NULL) {
@@ -190,6 +190,9 @@ session_free(unused int fd, unused short events, void *arg)
        log_debug("session %s freed (%d references)", s->name, s->references);
 
        if (s->references == 0) {
+               environ_free(&s->environ);
+               options_free(s->options);
+
                free(s->name);
                free(s);
        }
@@ -212,8 +215,6 @@ session_destroy(struct session *s)
                event_del(&s->lock_timer);
 
        session_group_remove(s);
-       environ_free(&s->environ);
-       options_free(&s->options);
 
        while (!TAILQ_EMPTY(&s->lastw))
                winlink_stack_remove(&s->lastw, TAILQ_FIRST(&s->lastw));
@@ -271,7 +272,7 @@ session_update_activity(struct session *s, struct timeval *from)
 
        if (~s->flags & SESSION_UNATTACHED) {
                timerclear(&tv);
-               tv.tv_sec = options_get_number(&s->options, "lock-after-time");
+               tv.tv_sec = options_get_number(s->options, "lock-after-time");
                if (tv.tv_sec != 0)
                        evtimer_add(&s->lock_timer, &tv);
        }
@@ -332,11 +333,11 @@ session_new(struct session *s, const char *name, int argc, char **argv,
        environ_copy(&s->environ, &env);
        server_fill_environ(s, &env);
 
-       shell = options_get_string(&s->options, "default-shell");
+       shell = options_get_string(s->options, "default-shell");
        if (*shell == '\0' || areshell(shell))
                shell = _PATH_BSHELL;
 
-       hlimit = options_get_number(&s->options, "history-limit");
+       hlimit = options_get_number(s->options, "history-limit");
        w = window_create(name, argc, argv, path, shell, cwd, &env, s->tio,
            s->sx, s->sy, hlimit, cause);
        if (w == NULL) {
@@ -348,8 +349,8 @@ session_new(struct session *s, const char *name, int argc, char **argv,
        notify_window_linked(s, w);
        environ_free(&env);
 
-       if (options_get_number(&s->options, "set-remain-on-exit"))
-               options_set_number(&w->options, "remain-on-exit", 1);
+       if (options_get_number(s->options, "set-remain-on-exit"))
+               options_set_number(w->options, "remain-on-exit", 1);
 
        session_group_synchronize_from(s);
        return (wl);
@@ -712,7 +713,7 @@ session_renumber_windows(struct session *s)
        RB_INIT(&s->windows);
 
        /* Start renumbering from the base-index if it's set. */
-       new_idx = options_get_number(&s->options, "base-index");
+       new_idx = options_get_number(s->options, "base-index");
        new_curw_idx = 0;
 
        /* Go through the winlinks and assign new indexes. */
index d462881..1c90d1d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: status.c,v 1.136 2015/10/20 21:12:09 nicm Exp $ */
+/* $OpenBSD: status.c,v 1.137 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -61,7 +61,7 @@ status_prompt_find_history_file(void)
        const char      *home, *history_file;
        char            *path;
 
-       history_file = options_get_string(&global_options, "history-file");
+       history_file = options_get_string(global_options, "history-file");
        if (*history_file == '\0')
                return (NULL);
        if (*history_file == '/')
@@ -160,7 +160,7 @@ status_timer_callback(unused int fd, unused short events, void *arg)
                c->flags |= CLIENT_STATUS;
 
        timerclear(&tv);
-       tv.tv_sec = options_get_number(&s->options, "status-interval");
+       tv.tv_sec = options_get_number(s->options, "status-interval");
 
        if (tv.tv_sec != 0)
                evtimer_add(&c->status_timer, &tv);
@@ -178,7 +178,7 @@ status_timer_start(struct client *c)
        else
                evtimer_set(&c->status_timer, status_timer_callback, c);
 
-       if (s != NULL && options_get_number(&s->options, "status"))
+       if (s != NULL && options_get_number(s->options, "status"))
                status_timer_callback(-1, 0, c);
 }
 
@@ -198,10 +198,10 @@ status_at_line(struct client *c)
 {
        struct session  *s = c->session;
 
-       if (!options_get_number(&s->options, "status"))
+       if (!options_get_number(s->options, "status"))
                return (-1);
 
-       if (options_get_number(&s->options, "status-position") == 0)
+       if (options_get_number(s->options, "status-position") == 0)
                return (0);
        return (c->tty.sy - 1);
 }
@@ -216,12 +216,12 @@ status_redraw_get_left(struct client *c, time_t t, int utf8flag,
        char            *left;
        size_t           leftlen;
 
-       style_apply_update(gc, &s->options, "status-left-style");
+       style_apply_update(gc, s->options, "status-left-style");
 
-       template = options_get_string(&s->options, "status-left");
+       template = options_get_string(s->options, "status-left");
        left = status_replace(c, NULL, template, t);
 
-       *size = options_get_number(&s->options, "status-left-length");
+       *size = options_get_number(s->options, "status-left-length");
        leftlen = screen_write_cstrlen(utf8flag, "%s", left);
        if (leftlen < *size)
                *size = leftlen;
@@ -238,12 +238,12 @@ status_redraw_get_right(struct client *c, time_t t, int utf8flag,
        char            *right;
        size_t           rightlen;
 
-       style_apply_update(gc, &s->options, "status-right-style");
+       style_apply_update(gc, s->options, "status-right-style");
 
-       template = options_get_string(&s->options, "status-right");
+       template = options_get_string(s->options, "status-right");
        right = status_replace(c, NULL, template, t);
 
-       *size = options_get_number(&s->options, "status-right-length");
+       *size = options_get_number(s->options, "status-right-length");
        rightlen = screen_write_cstrlen(utf8flag, "%s", right);
        if (rightlen < *size)
                *size = rightlen;
@@ -261,7 +261,7 @@ status_get_window_at(struct client *c, u_int x)
 
        x += c->wlmouse;
        RB_FOREACH(wl, winlinks, &s->windows) {
-               oo = &wl->window->options;
+               oo = wl->window->options;
                len = strlen(options_get_string(oo, "window-status-separator"));
 
                if (x < wl->status_width)
@@ -289,7 +289,7 @@ status_redraw(struct client *c)
        int                     larrow, rarrow, utf8flag;
 
        /* No status line? */
-       if (c->tty.sy == 0 || !options_get_number(&s->options, "status"))
+       if (c->tty.sy == 0 || !options_get_number(s->options, "status"))
                return (1);
        left = right = NULL;
        larrow = rarrow = 0;
@@ -298,7 +298,7 @@ status_redraw(struct client *c)
        t = time(NULL);
 
        /* Set up default colour. */
-       style_apply(&stdgc, &s->options, "status-style");
+       style_apply(&stdgc, s->options, "status-style");
 
        /* Create the target screen. */
        memcpy(&old_status, &c->status, sizeof old_status);
@@ -313,7 +313,7 @@ status_redraw(struct client *c)
                goto out;
 
        /* Get UTF-8 flag. */
-       utf8flag = options_get_number(&s->options, "status-utf8");
+       utf8flag = options_get_number(s->options, "status-utf8");
 
        /* Work out left and right strings. */
        memcpy(&lgc, &stdgc, sizeof lgc);
@@ -346,7 +346,7 @@ status_redraw(struct client *c)
                if (wl == s->curw)
                        wloffset = wlwidth;
 
-               oo = &wl->window->options;
+               oo = wl->window->options;
                sep = options_get_string(oo, "window-status-separator");
                seplen = screen_write_strlen(utf8flag, "%s", sep);
                wlwidth += wl->status_width + seplen;
@@ -361,7 +361,7 @@ status_redraw(struct client *c)
                screen_write_cnputs(&ctx,
                    -1, &wl->status_cell, utf8flag, "%s", wl->status_text);
 
-               oo = &wl->window->options;
+               oo = wl->window->options;
                sep = options_get_string(oo, "window-status-separator");
                screen_write_nputs(&ctx, -1, &stdgc, utf8flag, "%s", sep);
        }
@@ -461,7 +461,7 @@ draw:
        else
                wloffset = 0;
        if (wlwidth < wlavailable) {
-               switch (options_get_number(&s->options, "status-justify")) {
+               switch (options_get_number(s->options, "status-justify")) {
                case 1: /* centred */
                        wloffset += (wlavailable - wlwidth) / 2;
                        break;
@@ -520,7 +520,7 @@ char *
 status_print(struct client *c, struct winlink *wl, time_t t,
     struct grid_cell *gc)
 {
-       struct options  *oo = &wl->window->options;
+       struct options  *oo = wl->window->options;
        struct session  *s = c->session;
        const char      *fmt;
        char            *text;
@@ -553,7 +553,7 @@ status_message_set(struct client *c, const char *fmt, ...)
        int                      delay;
        u_int                    first, limit;
 
-       limit = options_get_number(&global_options, "message-limit");
+       limit = options_get_number(global_options, "message-limit");
 
        status_prompt_clear(c);
        status_message_clear(c);
@@ -577,7 +577,7 @@ status_message_set(struct client *c, const char *fmt, ...)
                free(msg);
        }
 
-       delay = options_get_number(&c->session->options, "display-time");
+       delay = options_get_number(c->session->options, "display-time");
        tv.tv_sec = delay / 1000;
        tv.tv_usec = (delay % 1000) * 1000L;
 
@@ -631,13 +631,13 @@ status_message_redraw(struct client *c)
        memcpy(&old_status, &c->status, sizeof old_status);
        screen_init(&c->status, c->tty.sx, 1, 0);
 
-       utf8flag = options_get_number(&s->options, "status-utf8");
+       utf8flag = options_get_number(s->options, "status-utf8");
 
        len = screen_write_strlen(utf8flag, "%s", c->message_string);
        if (len > c->tty.sx)
                len = c->tty.sx;
 
-       style_apply(&gc, &s->options, "message-style");
+       style_apply(&gc, s->options, "message-style");
 
        screen_write_start(&ctx, NULL, &c->status);
 
@@ -686,7 +686,7 @@ status_prompt_set(struct client *c, const char *msg, const char *input,
 
        c->prompt_flags = flags;
 
-       keys = options_get_number(&c->session->options, "status-keys");
+       keys = options_get_number(c->session->options, "status-keys");
        if (keys == MODEKEY_EMACS)
                mode_key_init(&c->prompt_mdata, &mode_key_tree_emacs_edit);
        else
@@ -761,7 +761,7 @@ status_prompt_redraw(struct client *c)
        memcpy(&old_status, &c->status, sizeof old_status);
        screen_init(&c->status, c->tty.sx, 1, 0);
 
-       utf8flag = options_get_number(&s->options, "status-utf8");
+       utf8flag = options_get_number(s->options, "status-utf8");
 
        len = screen_write_strlen(utf8flag, "%s", c->prompt_string);
        if (len > c->tty.sx)
@@ -770,9 +770,9 @@ status_prompt_redraw(struct client *c)
 
        /* Change colours for command mode. */
        if (c->prompt_mdata.mode == 1)
-               style_apply(&gc, &s->options, "message-command-style");
+               style_apply(&gc, s->options, "message-command-style");
        else
-               style_apply(&gc, &s->options, "message-style");
+               style_apply(&gc, s->options, "message-style");
 
        screen_write_start(&ctx, NULL, &c->status);
 
@@ -815,7 +815,7 @@ void
 status_prompt_key(struct client *c, int key)
 {
        struct session          *sess = c->session;
-       struct options          *oo = &sess->options;
+       struct options          *oo = sess->options;
        struct paste_buffer     *pb;
        char                    *s, *first, *last, word[64], swapc;
        const char              *histstr, *bufdata, *wsep = NULL;
index 9812265..10b9306 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.c,v 1.147 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: tmux.c,v 1.148 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -38,9 +38,9 @@
 extern char    *malloc_options;
 #endif
 
-struct options  global_options;        /* server options */
-struct options  global_s_options;      /* session options */
-struct options  global_w_options;      /* window options */
+struct options *global_options;        /* server options */
+struct options *global_s_options;      /* session options */
+struct options *global_w_options;      /* window options */
 struct environ  global_environ;
 
 char           *shell_cmd;
@@ -281,22 +281,21 @@ main(int argc, char **argv)
        if (getcwd(tmp, sizeof tmp) != NULL)
                environ_set(&global_environ, "PWD", tmp);
 
-       options_init(&global_options, NULL);
-       options_table_populate_tree(server_options_table, &global_options);
+       global_options = options_create(NULL);
+       options_table_populate_tree(server_options_table, global_options);
 
-       options_init(&global_s_options, NULL);
-       options_table_populate_tree(session_options_table, &global_s_options);
-       options_set_string(&global_s_options, "default-shell", "%s",
-           getshell());
+       global_s_options = options_create(NULL);
+       options_table_populate_tree(session_options_table, global_s_options);
+       options_set_string(global_s_options, "default-shell", "%s", getshell());
 
-       options_init(&global_w_options, NULL);
-       options_table_populate_tree(window_options_table, &global_w_options);
+       global_w_options = options_create(NULL);
+       options_table_populate_tree(window_options_table, global_w_options);
 
        /* Enable UTF-8 if the first client is on UTF-8 terminal. */
        if (flags & CLIENT_UTF8) {
-               options_set_number(&global_s_options, "status-utf8", 1);
-               options_set_number(&global_s_options, "mouse-utf8", 1);
-               options_set_number(&global_w_options, "utf8", 1);
+               options_set_number(global_s_options, "status-utf8", 1);
+               options_set_number(global_s_options, "mouse-utf8", 1);
+               options_set_number(global_w_options, "utf8", 1);
        }
 
        /* Override keys to vi if VISUAL or EDITOR are set. */
@@ -307,8 +306,8 @@ main(int argc, char **argv)
                        keys = MODEKEY_VI;
                else
                        keys = MODEKEY_EMACS;
-               options_set_number(&global_s_options, "status-keys", keys);
-               options_set_number(&global_w_options, "mode-keys", keys);
+               options_set_number(global_s_options, "status-keys", keys);
+               options_set_number(global_w_options, "mode-keys", keys);
        }
 
        /*
index eb3e293..89b141f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.566 2015/10/27 13:23:24 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.567 2015/10/27 15:58:42 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -680,11 +680,6 @@ struct options_entry {
        RB_ENTRY(options_entry) entry;
 };
 
-struct options {
-       RB_HEAD(options_tree, options_entry) tree;
-       struct options  *parent;
-};
-
 /* Scheduled job. */
 struct job {
        enum {
@@ -866,6 +861,7 @@ TAILQ_HEAD(window_panes, window_pane);
 RB_HEAD(window_pane_tree, window_pane);
 
 /* Window structure. */
+struct options;
 struct window {
        u_int            id;
 
@@ -899,7 +895,7 @@ struct window {
 #define WINDOW_FORCEHEIGHT 0x4000
 #define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE)
 
-       struct options   options;
+       struct options  *options;
 
        u_int            references;
 
@@ -993,7 +989,7 @@ struct session {
        struct winlink_stack lastw;
        struct winlinks  windows;
 
-       struct options   options;
+       struct options  *options;
 
 #define SESSION_UNATTACHED 0x1 /* not attached to any clients */
        int              flags;
@@ -1405,9 +1401,9 @@ struct options_table_entry {
 #define CMD_BUFFER_USAGE "[-b buffer-name]"
 
 /* tmux.c */
-extern struct options global_options;
-extern struct options global_s_options;
-extern struct options global_w_options;
+extern struct options *global_options;
+extern struct options *global_s_options;
+extern struct options *global_w_options;
 extern struct environ global_environ;
 extern char    *shell_cmd;
 extern int      debug_level;
@@ -1509,10 +1505,10 @@ void    notify_session_created(struct session *);
 void   notify_session_closed(struct session *);
 
 /* options.c */
-int    options_cmp(struct options_entry *, struct options_entry *);
-RB_PROTOTYPE(options_tree, options_entry, entry, options_cmp);
-void   options_init(struct options *, struct options *);
+struct options *options_create(struct options *);
 void   options_free(struct options *);
+struct options_entry *options_first(struct options *);
+struct options_entry *options_next(struct options_entry *);
 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 *);
index 8ffb16a..b1a8c0b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty-keys.c,v 1.74 2015/09/02 17:37:54 nicm Exp $ */
+/* $OpenBSD: tty-keys.c,v 1.75 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -564,7 +564,7 @@ partial_key:
        }
 
        /* Get the time period. */
-       delay = options_get_number(&global_options, "escape-time");
+       delay = options_get_number(global_options, "escape-time");
        tv.tv_sec = delay / 1000;
        tv.tv_usec = (delay % 1000) * 1000L;
 
index 77ca69f..555f0e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty-term.c,v 1.40 2015/09/24 07:02:18 nicm Exp $ */
+/* $OpenBSD: tty-term.c,v 1.41 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -457,7 +457,7 @@ tty_term_find(char *name, int fd, char **cause)
        }
 
        /* Apply terminal overrides. */
-       s = options_get_string(&global_options, "terminal-overrides");
+       s = options_get_string(global_options, "terminal-overrides");
        tty_term_override(term, s);
 
        /* Delete curses data. */
index 23d6278..acc33ea 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.190 2015/10/23 16:30:15 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.191 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -229,7 +229,7 @@ tty_start_tty(struct tty *tty)
                tty_puts(tty, "\033[?1000l\033[?1002l\033[?1006l\033[?1005l");
 
        if (tty_term_flag(tty->term, TTYC_XT)) {
-               if (options_get_number(&global_options, "focus-events")) {
+               if (options_get_number(global_options, "focus-events")) {
                        tty->flags |= TTY_FOCUS;
                        tty_puts(tty, "\033[?1004h");
                }
@@ -457,7 +457,7 @@ tty_set_italics(struct tty *tty)
        const char      *s;
 
        if (tty_term_has(tty->term, TTYC_SITM)) {
-               s = options_get_string(&global_options, "default-terminal");
+               s = options_get_string(global_options, "default-terminal");
                if (strcmp(s, "screen") != 0 && strncmp(s, "screen-", 7) != 0) {
                        tty_putcode(tty, TTYC_SITM);
                        return;
@@ -1686,8 +1686,8 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
                return;
 
        pgc = &wp->colgc;
-       agc = options_get_style(&wp->window->options, "window-active-style");
-       wgc = options_get_style(&wp->window->options, "window-style");
+       agc = options_get_style(wp->window->options, "window-active-style");
+       wgc = options_get_style(wp->window->options, "window-style");
 
        if (gc->fg == 8 && !(gc->flags & GRID_FLAG_FG256)) {
                if (pgc->fg != 8 || (pgc->flags & GRID_FLAG_FG256)) {
index f5b5e73..27034c1 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-choose.c,v 1.66 2015/08/28 12:25:42 nicm Exp $ */
+/* $OpenBSD: window-choose.c,v 1.67 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -169,7 +169,7 @@ window_choose_init(struct window_pane *wp)
        screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
        s->mode &= ~MODE_CURSOR;
 
-       keys = options_get_number(&wp->window->options, "mode-keys");
+       keys = options_get_number(wp->window->options, "mode-keys");
        if (keys == MODEKEY_EMACS)
                mode_key_init(&data->mdata, &mode_key_tree_emacs_choice);
        else
@@ -748,7 +748,7 @@ window_choose_write_line(
 {
        struct window_choose_mode_data  *data = wp->modedata;
        struct window_choose_mode_item  *item;
-       struct options                  *oo = &wp->window->options;
+       struct options                  *oo = wp->window->options;
        struct screen                   *s = &data->screen;
        struct grid_cell                 gc;
        size_t                           last, xoff = 0;
@@ -759,7 +759,7 @@ window_choose_write_line(
                fatalx("called before callback assigned");
 
        last = screen_size_y(s) - 1;
-       utf8flag = options_get_number(&wp->window->options, "utf8");
+       utf8flag = options_get_number(wp->window->options, "utf8");
        memcpy(&gc, &grid_default_cell, sizeof gc);
        if (data->selected == data->top + py)
                style_apply(&gc, oo, "mode-style");
index 8af673f..dfebb09 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-clock.c,v 1.13 2015/09/14 13:22:02 nicm Exp $ */
+/* $OpenBSD: window-clock.c,v 1.14 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -204,8 +204,8 @@ window_clock_draw_screen(struct window_pane *wp)
        struct tm                       *tm;
        u_int                            i, j, x, y, idx;
 
-       colour = options_get_number(&wp->window->options, "clock-mode-colour");
-       style = options_get_number(&wp->window->options, "clock-mode-style");
+       colour = options_get_number(wp->window->options, "clock-mode-colour");
+       style = options_get_number(wp->window->options, "clock-mode-style");
 
        screen_write_start(&ctx, NULL, s);
 
index 06521dc..01e6e1f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.135 2015/10/23 16:02:21 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.136 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -195,7 +195,7 @@ window_copy_init(struct window_pane *wp)
        s = &data->screen;
        screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
 
-       keys = options_get_number(&wp->window->options, "mode-keys");
+       keys = options_get_number(wp->window->options, "mode-keys");
        if (keys == MODEKEY_EMACS)
                mode_key_init(&data->mdata, &mode_key_tree_emacs_copy);
        else
@@ -286,7 +286,7 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap)
        if (backing == &wp->base)
                return;
 
-       utf8flag = options_get_number(&wp->window->options, "utf8");
+       utf8flag = options_get_number(wp->window->options, "utf8");
        memcpy(&gc, &grid_default_cell, sizeof gc);
 
        old_hsize = screen_hsize(data->backing);
@@ -629,13 +629,13 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
                break;
        case MODEKEYCOPY_NEXTWORD:
                word_separators =
-                   options_get_string(&sess->options, "word-separators");
+                   options_get_string(sess->options, "word-separators");
                for (; np != 0; np--)
                        window_copy_cursor_next_word(wp, word_separators);
                break;
        case MODEKEYCOPY_NEXTWORDEND:
                word_separators =
-                   options_get_string(&sess->options, "word-separators");
+                   options_get_string(sess->options, "word-separators");
                for (; np != 0; np--)
                        window_copy_cursor_next_word_end(wp, word_separators);
                break;
@@ -645,7 +645,7 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
                break;
        case MODEKEYCOPY_PREVIOUSWORD:
                word_separators =
-                   options_get_string(&sess->options, "word-separators");
+                   options_get_string(sess->options, "word-separators");
                for (; np != 0; np--)
                        window_copy_cursor_previous_word(wp, word_separators);
                break;
@@ -777,7 +777,7 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
        return;
 
 input_on:
-       keys = options_get_number(&wp->window->options, "mode-keys");
+       keys = options_get_number(wp->window->options, "mode-keys");
        if (keys == MODEKEY_EMACS)
                mode_key_init(&data->mdata, &mode_key_tree_emacs_edit);
        else
@@ -787,7 +787,7 @@ input_on:
        return;
 
 input_off:
-       keys = options_get_number(&wp->window->options, "mode-keys");
+       keys = options_get_number(wp->window->options, "mode-keys");
        if (keys == MODEKEY_EMACS)
                mode_key_init(&data->mdata, &mode_key_tree_emacs_copy);
        else
@@ -1026,8 +1026,8 @@ window_copy_search_up(struct window_pane *wp, const char *searchstr)
 
        if (*searchstr == '\0')
                return;
-       utf8flag = options_get_number(&wp->window->options, "utf8");
-       wrapflag = options_get_number(&wp->window->options, "wrap-search");
+       utf8flag = options_get_number(wp->window->options, "utf8");
+       wrapflag = options_get_number(wp->window->options, "wrap-search");
        searchlen = screen_write_strlen(utf8flag, "%s", searchstr);
 
        screen_init(&ss, searchlen, 1, 0);
@@ -1093,8 +1093,8 @@ window_copy_search_down(struct window_pane *wp, const char *searchstr)
 
        if (*searchstr == '\0')
                return;
-       utf8flag = options_get_number(&wp->window->options, "utf8");
-       wrapflag = options_get_number(&wp->window->options, "wrap-search");
+       utf8flag = options_get_number(wp->window->options, "utf8");
+       wrapflag = options_get_number(wp->window->options, "wrap-search");
        searchlen = screen_write_strlen(utf8flag, "%s", searchstr);
 
        screen_init(&ss, searchlen, 1, 0);
@@ -1168,7 +1168,7 @@ window_copy_write_line(struct window_pane *wp, struct screen_write_ctx *ctx,
 {
        struct window_copy_mode_data    *data = wp->modedata;
        struct screen                   *s = &data->screen;
-       struct options                  *oo = &wp->window->options;
+       struct options                  *oo = wp->window->options;
        struct grid_cell                 gc;
        char                             hdr[512];
        size_t                           last, xoff = 0, size = 0, limit;
@@ -1301,7 +1301,7 @@ window_copy_update_selection(struct window_pane *wp, int may_redraw)
 {
        struct window_copy_mode_data    *data = wp->modedata;
        struct screen                   *s = &data->screen;
-       struct options                  *oo = &wp->window->options;
+       struct options                  *oo = wp->window->options;
        struct grid_cell                 gc;
        u_int                            sx, sy, ty, cy;
 
@@ -1401,7 +1401,7 @@ window_copy_get_selection(struct window_pane *wp, size_t *len)
         * bottom-right-most, regardless of copy direction. If it is vi, also
         * keep bottom-right-most character.
         */
-       keys = options_get_number(&wp->window->options, "mode-keys");
+       keys = options_get_number(wp->window->options, "mode-keys");
        if (data->rectflag) {
                /*
                 * Need to ignore the column with the cursor in it, which for
@@ -1460,7 +1460,7 @@ window_copy_copy_buffer(struct window_pane *wp, const char *bufname, void *buf,
 {
        struct screen_write_ctx ctx;
 
-       if (options_get_number(&global_options, "set-clipboard")) {
+       if (options_get_number(global_options, "set-clipboard")) {
                screen_write_start(&ctx, wp, NULL);
                screen_write_setselection(&ctx, buf, len);
                screen_write_stop(&ctx);
@@ -1523,7 +1523,7 @@ window_copy_append_selection(struct window_pane *wp, const char *bufname)
        if (buf == NULL)
                return;
 
-       if (options_get_number(&global_options, "set-clipboard")) {
+       if (options_get_number(global_options, "set-clipboard")) {
                screen_write_start(&ctx, wp, NULL);
                screen_write_setselection(&ctx, buf, len);
                screen_write_stop(&ctx);
@@ -2074,7 +2074,7 @@ window_copy_cursor_next_word_end(struct window_pane *wp,
     const char *separators)
 {
        struct window_copy_mode_data    *data = wp->modedata;
-       struct options                  *oo = &wp->window->options;
+       struct options                  *oo = wp->window->options;
        struct screen                   *back_s = data->backing;
        u_int                            px, py, xx, yy;
        int                              keys, expected = 1;
index 242d3ec..9bef3b6 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window.c,v 1.145 2015/09/14 11:34:50 nicm Exp $ */
+/* $OpenBSD: window.c,v 1.146 2015/10/27 15:58:43 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -302,7 +302,7 @@ window_create1(u_int sx, u_int sy)
        w->sx = sx;
        w->sy = sy;
 
-       options_init(&w->options, &global_w_options);
+       w->options = options_create(global_w_options);
 
        w->references = 0;
 
@@ -335,7 +335,7 @@ window_create(const char *name, int argc, char **argv, const char *path,
        w->active = TAILQ_FIRST(&w->panes);
        if (name != NULL) {
                w->name = xstrdup(name);
-               options_set_number(&w->options, "automatic-rename", 0);
+               options_set_number(w->options, "automatic-rename", 0);
        } else
                w->name = default_window_name(w);
 
@@ -359,7 +359,7 @@ window_destroy(struct window *w)
        if (event_initialized(&w->alerts_timer))
                evtimer_del(&w->alerts_timer);
 
-       options_free(&w->options);
+       options_free(w->options);
 
        window_destroy_panes(w);
 
@@ -437,8 +437,8 @@ window_redraw_active_switch(struct window *w, struct window_pane *wp)
         * active or inactive pane do not have a custom style, they will need
         * to be redrawn.
         */
-       agc = options_get_style(&w->options, "window-active-style");
-       wgc = options_get_style(&w->options, "window-style");
+       agc = options_get_style(w->options, "window-active-style");
+       wgc = options_get_style(w->options, "window-style");
        if (style_equal(agc, wgc))
                return;
        if (style_equal(&grid_default_cell, &w->active->colgc))
@@ -598,7 +598,7 @@ window_pane_at_index(struct window *w, u_int idx)
        struct window_pane      *wp;
        u_int                    n;
 
-       n = options_get_number(&w->options, "pane-base-index");
+       n = options_get_number(w->options, "pane-base-index");
        TAILQ_FOREACH(wp, &w->panes, entry) {
                if (n == idx)
                        return (wp);
@@ -636,7 +636,7 @@ window_pane_index(struct window_pane *wp, u_int *i)
        struct window_pane      *wq;
        struct window           *w = wp->window;
 
-       *i = options_get_number(&w->options, "pane-base-index");
+       *i = options_get_number(w->options, "pane-base-index");
        TAILQ_FOREACH(wq, &w->panes, entry) {
                if (wp == wq) {
                        return (0);
@@ -1002,7 +1002,7 @@ window_pane_alternate_on(struct window_pane *wp, struct grid_cell *gc,
 
        if (wp->saved_grid != NULL)
                return;
-       if (!options_get_number(&wp->window->options, "alternate-screen"))
+       if (!options_get_number(wp->window->options, "alternate-screen"))
                return;
        sx = screen_size_x(s);
        sy = screen_size_y(s);
@@ -1032,7 +1032,7 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc,
 
        if (wp->saved_grid == NULL)
                return;
-       if (!options_get_number(&wp->window->options, "alternate-screen"))
+       if (!options_get_number(wp->window->options, "alternate-screen"))
                return;
        sx = screen_size_x(s);
        sy = screen_size_y(s);
@@ -1120,7 +1120,7 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s,
 
        if (KEYC_IS_MOUSE(key))
                return;
-       if (options_get_number(&wp->window->options, "synchronize-panes")) {
+       if (options_get_number(wp->window->options, "synchronize-panes")) {
                TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
                        if (wp2 == wp || wp2->mode != NULL)
                                continue;