summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2014-04-23 11:26:11 +0100
committerThomas Adam <thomas@xteddy.org>2014-04-23 11:26:11 +0100
commit953c3ef47a1933d38308075c1bacc7ea8d38301b (patch)
tree6484bdd51ecedbb5888717db271c151257ec87f5
parent12e9c974fadc5ed6f0e7db10c40d5a0d55e0da8a (diff)
parent64613b9d411a7c76a50a2f9c66df345f082fce25 (diff)
Merge branch 'obsd-master'
Conflicts: Makefile tmux.1 window.c
-rw-r--r--Makefile.am1
-rw-r--r--arguments.c12
-rw-r--r--cfg.c1
-rw-r--r--client.c2
-rw-r--r--cmd-break-pane.c11
-rw-r--r--cmd-choose-list.c97
-rw-r--r--cmd-find-window.c3
-rw-r--r--cmd-join-pane.c6
-rw-r--r--cmd-list.c10
-rw-r--r--cmd-lock-server.c4
-rw-r--r--cmd-new-session.c14
-rw-r--r--cmd-new-window.c16
-rw-r--r--cmd-queue.c31
-rw-r--r--cmd-respawn-pane.c15
-rw-r--r--cmd-respawn-window.c15
-rw-r--r--cmd-run-shell.c10
-rw-r--r--cmd-save-buffer.c3
-rw-r--r--cmd-select-layout.c3
-rw-r--r--cmd-set-option.c62
-rw-r--r--cmd-show-options.c20
-rw-r--r--cmd-split-window.c14
-rw-r--r--cmd-switch-client.c7
-rw-r--r--cmd.c1
-rw-r--r--environ.c3
-rw-r--r--format.c15
-rw-r--r--grid-view.c6
-rw-r--r--grid.c2
-rw-r--r--input.c55
-rw-r--r--job.c2
-rw-r--r--key-bindings.c2
-rw-r--r--layout-set.c4
-rw-r--r--options-table.c42
-rw-r--r--osdep-openbsd.c2
-rw-r--r--screen-write.c3
-rw-r--r--server-client.c5
-rw-r--r--server-fn.c3
-rw-r--r--server-window.c55
-rw-r--r--server.c2
-rw-r--r--session.c15
-rw-r--r--status.c2
-rw-r--r--tmux.177
-rw-r--r--tmux.c9
-rw-r--r--tmux.h55
-rw-r--r--tty-term.c3
-rw-r--r--tty.c7
-rw-r--r--utf8.c122
-rw-r--r--window-choose.c20
-rw-r--r--window-copy.c20
-rw-r--r--window.c31
49 files changed, 431 insertions, 489 deletions
diff --git a/Makefile.am b/Makefile.am
index d305db9c..dd6756b9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -73,7 +73,6 @@ dist_tmux_SOURCES = \
cmd-capture-pane.c \
cmd-choose-buffer.c \
cmd-choose-client.c \
- cmd-choose-list.c \
cmd-choose-tree.c \
cmd-clear-history.c \
cmd-clock-mode.c \
diff --git a/arguments.c b/arguments.c
index d4e5e53f..fd656b14 100644
--- a/arguments.c
+++ b/arguments.c
@@ -125,7 +125,7 @@ args_free(struct args *args)
size_t
args_print(struct args *args, char *buf, size_t len)
{
- size_t off;
+ size_t off, used;
int i;
const char *quotes;
struct args_entry *entry;
@@ -165,9 +165,12 @@ args_print(struct args *args, char *buf, size_t len)
quotes = "\"";
else
quotes = "";
- off += xsnprintf(buf + off, len - off, "%s-%c %s%s%s",
+ used = xsnprintf(buf + off, len - off, "%s-%c %s%s%s",
off != 0 ? " " : "", entry->flag, quotes, entry->value,
quotes);
+ if (used > len - off)
+ used = len - off;
+ off += used;
}
/* And finally the argument vector. */
@@ -181,8 +184,11 @@ args_print(struct args *args, char *buf, size_t len)
quotes = "\"";
else
quotes = "";
- off += xsnprintf(buf + off, len - off, "%s%s%s%s",
+ used = xsnprintf(buf + off, len - off, "%s%s%s%s",
off != 0 ? " " : "", quotes, args->argv[i], quotes);
+ if (used > len - off)
+ used = len - off;
+ off += used;
}
return (off);
diff --git a/cfg.c b/cfg.c
index bfcdaea4..d12af67d 100644
--- a/cfg.c
+++ b/cfg.c
@@ -17,7 +17,6 @@
*/
#include <sys/types.h>
-#include <sys/stat.h>
#include <ctype.h>
#include <errno.h>
diff --git a/client.c b/client.c
index 277efb65..2d4a93b5 100644
--- a/client.c
+++ b/client.c
@@ -25,8 +25,6 @@
#include <errno.h>
#include <event.h>
-#include <fcntl.h>
-#include <pwd.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/cmd-break-pane.c b/cmd-break-pane.c
index d0a5a450..fe7891e9 100644
--- a/cmd-break-pane.c
+++ b/cmd-break-pane.c
@@ -65,16 +65,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq)
server_unzoom_window(w);
TAILQ_REMOVE(&w->panes, wp, entry);
- if (wp == w->active) {
- w->active = w->last;
- w->last = NULL;
- if (w->active == NULL) {
- w->active = TAILQ_PREV(wp, window_panes, entry);
- if (w->active == NULL)
- w->active = TAILQ_NEXT(wp, entry);
- }
- } else if (wp == w->last)
- w->last = NULL;
+ window_lost_pane(w, wp);
layout_close_pane(wp);
w = wp->window = window_create1(s->sx, s->sy);
diff --git a/cmd-choose-list.c b/cmd-choose-list.c
deleted file mode 100644
index c3caabba..00000000
--- a/cmd-choose-list.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* $Id$ */
-
-/*
- * Copyright (c) 2012 Thomas Adam <thomas@xteddy.org>
- *
- * 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 <ctype.h>
-#include <stdlib.h>
-
-#include <string.h>
-
-#include "tmux.h"
-
-#define CMD_CHOOSE_LIST_DEFAULT_TEMPLATE "run-shell '%%'"
-
-/*
- * Enter choose mode to choose a custom list.
- */
-
-enum cmd_retval cmd_choose_list_exec(struct cmd *, struct cmd_q *);
-
-const struct cmd_entry cmd_choose_list_entry = {
- "choose-list", NULL,
- "l:t:", 0, 1,
- "[-l items] " CMD_TARGET_WINDOW_USAGE "[template]",
- 0,
- NULL,
- cmd_choose_list_exec
-};
-
-enum cmd_retval
-cmd_choose_list_exec(struct cmd *self, struct cmd_q *cmdq)
-{
- struct args *args = self->args;
- struct client *c;
- struct winlink *wl;
- const char *list1;
- char *template, *item, *copy, *list;
- u_int idx;
-
- if ((c = cmd_current_client(cmdq)) == NULL) {
- cmdq_error(cmdq, "no client available");
- return (CMD_RETURN_ERROR);
- }
-
- if ((list1 = args_get(args, 'l')) == NULL)
- return (CMD_RETURN_ERROR);
-
- if ((wl = cmd_find_window(cmdq, args_get(args, 't'), NULL)) == NULL)
- return (CMD_RETURN_ERROR);
-
- if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0)
- return (CMD_RETURN_NORMAL);
-
- if (args->argc != 0)
- template = xstrdup(args->argv[0]);
- else
- template = xstrdup(CMD_CHOOSE_LIST_DEFAULT_TEMPLATE);
-
- copy = list = xstrdup(list1);
- idx = 0;
- while ((item = strsep(&list, ",")) != NULL)
- {
- if (*item == '\0') /* no empty entries */
- continue;
- window_choose_add_item(wl->window->active, c, wl, item,
- template, idx);
- idx++;
- }
- free(copy);
-
- if (idx == 0) {
- free(template);
- window_pane_reset_mode(wl->window->active);
- return (CMD_RETURN_ERROR);
- }
-
- window_choose_ready(wl->window->active, 0, NULL);
-
- free(template);
-
- return (CMD_RETURN_NORMAL);
-}
diff --git a/cmd-find-window.c b/cmd-find-window.c
index 647cc8fb..bef9afee 100644
--- a/cmd-find-window.c
+++ b/cmd-find-window.c
@@ -84,7 +84,8 @@ cmd_find_window_match_flags(struct args *args)
void
cmd_find_window_match(struct cmd_find_window_data_list *find_list,
- int match_flags, struct winlink *wl, const char *str, const char *searchstr)
+ int match_flags, struct winlink *wl, const char *str,
+ const char *searchstr)
{
struct cmd_find_window_data find_data;
struct window_pane *wp;
diff --git a/cmd-join-pane.c b/cmd-join-pane.c
index 1a710cec..000fdba9 100644
--- a/cmd-join-pane.c
+++ b/cmd-join-pane.c
@@ -138,11 +138,7 @@ join_pane(struct cmd *self, struct cmd_q *cmdq, int not_same_window)
layout_close_pane(src_wp);
- if (src_w->active == src_wp) {
- src_w->active = TAILQ_PREV(src_wp, window_panes, entry);
- if (src_w->active == NULL)
- src_w->active = TAILQ_NEXT(src_wp, entry);
- }
+ window_lost_pane(src_w, src_wp);
TAILQ_REMOVE(&src_w->panes, src_wp, entry);
if (window_count_panes(src_w) == 0)
diff --git a/cmd-list.c b/cmd-list.c
index 08e2067c..7ef8d1c5 100644
--- a/cmd-list.c
+++ b/cmd-list.c
@@ -103,7 +103,7 @@ size_t
cmd_list_print(struct cmd_list *cmdlist, char *buf, size_t len)
{
struct cmd *cmd;
- size_t off;
+ size_t off, used;
off = 0;
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
@@ -112,8 +112,12 @@ cmd_list_print(struct cmd_list *cmdlist, char *buf, size_t len)
off += cmd_print(cmd, buf + off, len - off);
if (off >= len)
break;
- if (TAILQ_NEXT(cmd, qentry) != NULL)
- off += xsnprintf(buf + off, len - off, " ; ");
+ if (TAILQ_NEXT(cmd, qentry) != NULL) {
+ used = xsnprintf(buf + off, len - off, " ; ");
+ if (used > len - off)
+ used = len - off;
+ off += used;
+ }
}
return (off);
}
diff --git a/cmd-lock-server.c b/cmd-lock-server.c
index 2b591ecf..5e0f6e0f 100644
--- a/cmd-lock-server.c
+++ b/cmd-lock-server.c
@@ -18,10 +18,6 @@
#include <sys/types.h>
-#include <pwd.h>
-#include <string.h>
-#include <unistd.h>
-
#include "tmux.h"
/*
diff --git a/cmd-new-session.c b/cmd-new-session.c
index c190e972..3071bd64 100644
--- a/cmd-new-session.c
+++ b/cmd-new-session.c
@@ -20,7 +20,6 @@
#include <errno.h>
#include <fcntl.h>
-#include <pwd.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
@@ -55,10 +54,12 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
struct environ env;
struct termios tio, *tiop;
const char *newname, *target, *update, *errstr, *template;
+ const char *path;
char *cmd, *cause, *cp;
int detached, already_attached, idx, cwd, fd = -1;
u_int sx, sy;
struct format_tree *ft;
+ struct environ_entry *envent;
if (args_has(args, 't') && (args->argc != 0 || args_has(args, 'n'))) {
cmdq_error(cmdq, "command or window name given with target");
@@ -189,6 +190,14 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
else
cmd = options_get_string(&global_s_options, "default-command");
+ path = NULL;
+ if (c != NULL && c->session == NULL)
+ envent = environ_find(&c->environ, "PATH");
+ else
+ envent = environ_find(&global_environ, "PATH");
+ if (envent != NULL)
+ path = envent->value;
+
/* Construct the environment. */
environ_init(&env);
update = options_get_string(&global_s_options, "update-environment");
@@ -197,7 +206,8 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq)
/* Create the new session. */
idx = -1 - options_get_number(&global_s_options, "base-index");
- s = session_create(newname, cmd, cwd, &env, tiop, idx, sx, sy, &cause);
+ s = session_create(newname, cmd, path, cwd, &env, tiop, idx, sx, sy,
+ &cause);
if (s == NULL) {
cmdq_error(cmdq, "create session failed: %s", cause);
free(cause);
diff --git a/cmd-new-window.c b/cmd-new-window.c
index 58a5eb65..6e9fea50 100644
--- a/cmd-new-window.c
+++ b/cmd-new-window.c
@@ -49,10 +49,11 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
struct session *s;
struct winlink *wl;
struct client *c;
- const char *cmd, *template;
+ const char *cmd, *path, *template;
char *cause, *cp;
int idx, last, detached, cwd, fd = -1;
struct format_tree *ft;
+ struct environ_entry *envent;
if (args_has(args, 'a')) {
wl = cmd_find_window(cmdq, args_get(args, 't'), &s);
@@ -77,7 +78,8 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
server_unlink_window(s, wl);
}
} else {
- if ((idx = cmd_find_index(cmdq, args_get(args, 't'), &s)) == -2)
+ idx = cmd_find_index(cmdq, args_get(args, 't'), &s);
+ if (idx == -2)
return (CMD_RETURN_ERROR);
}
detached = args_has(args, 'd');
@@ -87,6 +89,14 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
else
cmd = args->argv[0];
+ path = NULL;
+ if (cmdq->client != NULL && cmdq->client->session == NULL)
+ envent = environ_find(&cmdq->client->environ, "PATH");
+ else
+ envent = environ_find(&s->environ, "PATH");
+ if (envent != NULL)
+ path = envent->value;
+
if (args_has(args, 'c')) {
ft = format_create();
if ((c = cmd_find_client(cmdq, NULL, 1)) != NULL)
@@ -135,7 +145,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
if (idx == -1)
idx = -1 - options_get_number(&s->options, "base-index");
- wl = session_new(s, args_get(args, 'n'), cmd, cwd, idx, &cause);
+ wl = session_new(s, args_get(args, 'n'), cmd, path, cwd, idx, &cause);
if (wl == NULL) {
cmdq_error(cmdq, "create window failed: %s", cause);
free(cause);
diff --git a/cmd-queue.c b/cmd-queue.c
index 17955b82..f4b3b97c 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -86,37 +86,6 @@ cmdq_print(struct cmd_q *cmdq, const char *fmt, ...)
va_end(ap);
}
-/* Show info from command. */
-void printflike2
-cmdq_info(struct cmd_q *cmdq, const char *fmt, ...)
-{
- struct client *c = cmdq->client;
- va_list ap;
- char *msg;
-
- if (options_get_number(&global_options, "quiet"))
- return;
-
- va_start(ap, fmt);
-
- if (c == NULL)
- /* nothing */;
- else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) {
- evbuffer_add_vprintf(c->stdout_data, fmt, ap);
-
- evbuffer_add(c->stdout_data, "\n", 1);
- server_push_stdout(c);
- } else {
- xvasprintf(&msg, fmt, ap);
- *msg = toupper((u_char) *msg);
- status_message_set(c, "%s", msg);
- free(msg);
- }
-
- va_end(ap);
-
-}
-
/* Show error from command. */
void printflike2
cmdq_error(struct cmd_q *cmdq, const char *fmt, ...)
diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c
index bcde2754..9ac5b0b8 100644
--- a/cmd-respawn-pane.c
+++ b/cmd-respawn-pane.c
@@ -48,9 +48,10 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_q *cmdq)
struct window_pane *wp;
struct session *s;
struct environ env;
- const char *cmd;
+ const char *cmd, *path;
char *cause;
u_int idx;
+ struct environ_entry *envent;
if ((wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp)) == NULL)
return (CMD_RETURN_ERROR);
@@ -77,7 +78,17 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_q *cmdq)
cmd = args->argv[0];
else
cmd = NULL;
- if (window_pane_spawn(wp, cmd, NULL, -1, &env, s->tio, &cause) != 0) {
+
+ path = NULL;
+ if (cmdq->client != NULL && cmdq->client->session == NULL)
+ envent = environ_find(&cmdq->client->environ, "PATH");
+ else
+ envent = environ_find(&s->environ, "PATH");
+ if (envent != NULL)
+ path = envent->value;
+
+ if (window_pane_spawn(wp, cmd, path, NULL, -1, &env, s->tio,
+ &cause) != 0) {
cmdq_error(cmdq, "respawn pane failed: %s", cause);
free(cause);
environ_free(&env);
diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c
index e6d913cf..d891eff3 100644
--- a/cmd-respawn-window.c
+++ b/cmd-respawn-window.c
@@ -47,8 +47,9 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_q *cmdq)
struct window_pane *wp;
struct session *s;
struct environ env;
- const char *cmd;
+ const char *cmd, *path;
char *cause;
+ struct environ_entry *envent;
if ((wl = cmd_find_window(cmdq, args_get(args, 't'), &s)) == NULL)
return (CMD_RETURN_ERROR);
@@ -79,7 +80,17 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_q *cmdq)
cmd = args->argv[0];
else
cmd = NULL;
- if (window_pane_spawn(wp, cmd, NULL, -1, &env, s->tio, &cause) != 0) {
+
+ path = NULL;
+ if (cmdq->client != NULL && cmdq->client->session == NULL)
+ envent = environ_find(&cmdq->client->environ, "PATH");
+ else
+ envent = environ_find(&s->environ, "PATH");
+ if (envent != NULL)
+ path = envent->value;
+
+ if (window_pane_spawn(wp, cmd, path, NULL, -1, &env, s->tio,
+ &cause) != 0) {
cmdq_error(cmdq, "respawn window failed: %s", cause);
free(cause);
environ_free(&env);
diff --git a/cmd-run-shell.c b/cmd-run-shell.c
index f5231814..a91968d0 100644
--- a/cmd-run-shell.c
+++ b/cmd-run-shell.c
@@ -161,13 +161,9 @@ cmd_run_shell_callback(struct job *job)
retcode = WTERMSIG(job->status);
xasprintf(&msg, "'%s' terminated by signal %d", cmd, retcode);
}
- if (msg != NULL) {
- if (lines == 0)
- cmdq_info(cmdq, "%s", msg);
- else
- cmd_run_shell_print(job, msg);
- free(msg);
- }
+ if (msg != NULL)
+ cmd_run_shell_print(job, msg);
+ free(msg);
}
void
diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c
index 3788fc22..f08f80c7 100644
--- a/cmd-save-buffer.c
+++ b/cmd-save-buffer.c
@@ -111,7 +111,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
if (fd != -1)
f = fdopen(fd, "ab");
} else {
- fd = openat(cwd, path, O_CREAT|O_RDWR, 0600);
+ fd = openat(cwd, path, O_CREAT|O_RDWR|O_TRUNC, 0600);
if (fd != -1)
f = fdopen(fd, "wb");
}
@@ -141,7 +141,6 @@ do_print:
return (CMD_RETURN_ERROR);
}
msg = NULL;
- msglen = 0;
used = 0;
while (used != pb->size) {
diff --git a/cmd-select-layout.c b/cmd-select-layout.c
index 053f3e40..37cd22c2 100644
--- a/cmd-select-layout.c
+++ b/cmd-select-layout.c
@@ -104,7 +104,6 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_q *cmdq)
else
layout = layout_set_previous(wl->window);
server_redraw_window(wl->window);
- cmdq_info(cmdq, "arranging in: %s", layout_set_name(layout));
return (CMD_RETURN_NORMAL);
}
@@ -115,7 +114,6 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_q *cmdq)
if (layout != -1) {
layout = layout_set_select(wl->window, layout);
server_redraw_window(wl->window);
- cmdq_info(cmdq, "arranging in: %s", layout_set_name(layout));
return (CMD_RETURN_NORMAL);
}
@@ -126,7 +124,6 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_ERROR);
}
server_redraw_window(wl->window);
- cmdq_info(cmdq, "arranging in: %s", layoutname);
}
return (CMD_RETURN_NORMAL);
}
diff --git a/cmd-set-option.c b/cmd-set-option.c
index 5ae4e5c3..f55b0d30 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -117,8 +117,11 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_ERROR);
}
if (oe == NULL) {
- cmdq_error(cmdq, "unknown option: %s", optstr);
- return (CMD_RETURN_ERROR);
+ if (!args_has(args, 'q')) {
+ cmdq_error(cmdq, "unknown option: %s", optstr);
+ return (CMD_RETURN_ERROR);
+ }
+ return (CMD_RETURN_NORMAL);
}
/* Work out the tree from the table. */
@@ -163,8 +166,10 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_ERROR);
} else {
if (args_has(args, 'o') && options_find1(oo, optstr) != NULL) {
- if (!args_has(args, 'q'))
- cmdq_print(cmdq, "already set: %s", optstr);
+ if (!args_has(args, 'q')) {
+ cmdq_error(cmdq, "already set: %s", optstr);
+ return (CMD_RETURN_ERROR);
+ }
return (CMD_RETURN_NORMAL);
}
if (cmd_set_option_set(self, cmdq, oe, oo, valstr) != 0)
@@ -229,8 +234,11 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char* optstr,
if (args_has(args, 'u')) {
if (options_find1(oo, optstr) == NULL) {
- cmdq_error(cmdq, "unknown option: %s", optstr);
- return (CMD_RETURN_ERROR);
+ if (!args_has(args, 'q')) {
+ cmdq_error(cmdq, "unknown option: %s", optstr);
+ return (CMD_RETURN_ERROR);
+ }
+ return (CMD_RETURN_NORMAL);
}
if (valstr != NULL) {
cmdq_error(cmdq, "value passed to unset option: %s",
@@ -244,15 +252,13 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char* optstr,
return (CMD_RETURN_ERROR);
}
if (args_has(args, 'o') && options_find1(oo, optstr) != NULL) {
- if (!args_has(args, 'q'))
- cmdq_print(cmdq, "already set: %s", optstr);
+ if (!args_has(args, 'q')) {
+ cmdq_error(cmdq, "already set: %s", optstr);
+ return CMD_RETURN_ERROR;
+ }
return (CMD_RETURN_NORMAL);
}
options_set_string(oo, optstr, "%s", valstr);
- if (!args_has(args, 'q')) {
- cmdq_info(cmdq, "set option: %s -> %s", optstr,
- valstr);
- }
}
return (CMD_RETURN_NORMAL);
}
@@ -261,7 +267,8 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char* optstr,
/* Unset an option. */
int
cmd_set_option_unset(struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
struct args *args = self->args;
@@ -275,19 +282,16 @@ cmd_set_option_unset(struct cmd *self, struct cmd_q *cmdq,
}
options_remove(oo, oe->name);
- if (!args_has(args, 'q'))
- cmdq_info(cmdq, "unset option: %s", oe->name);
return (0);
}
/* Set an option. */
int
cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
- struct args *args = self->args;
struct options_entry *o;
- const char *s;
if (oe->type != OPTIONS_TABLE_FLAG && value == NULL) {
cmdq_error(cmdq, "empty value");
@@ -327,17 +331,14 @@ cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
}
if (o == NULL)
return (-1);
-
- s = options_table_print_entry(oe, o, 0);
- if (!args_has(args, 'q'))
- cmdq_info(cmdq, "set option: %s -> %s", oe->name, s);
return (0);
}
/* Set a string option. */
struct options_entry *
cmd_set_option_string(struct cmd *self, unused struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
struct args *args = self->args;
struct options_entry *o;
@@ -358,7 +359,8 @@ cmd_set_option_string(struct cmd *self, unused struct cmd_q *cmdq,
/* Set a number option. */
struct options_entry *
cmd_set_option_number(unused struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
long long ll;
const char *errstr;
@@ -375,7 +377,8 @@ cmd_set_option_number(unused struct cmd *self, struct cmd_q *cmdq,
/* Set a key option. */
struct options_entry *
cmd_set_option_key(unused struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
int key;
@@ -390,7 +393,8 @@ cmd_set_option_key(unused struct cmd *self, struct cmd_q *cmdq,
/* Set a colour option. */
struct options_entry *
cmd_set_option_colour(unused struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
int colour;
@@ -405,7 +409,8 @@ cmd_set_option_colour(unused struct cmd *self, struct cmd_q *cmdq,
/* Set an attributes option. */
struct options_entry *
cmd_set_option_attributes(unused struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
int attr;
@@ -420,7 +425,8 @@ cmd_set_option_attributes(unused struct cmd *self, struct cmd_q *cmdq,
/* Set a flag option. */
struct options_entry *
cmd_set_option_flag(unused struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *oe, struct options *oo, const char *value)
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
{
int flag;
diff --git a/cmd-show-options.c b/cmd-show-options.c
index 943353f6..bf3cfef5 100644
--- a/cmd-show-options.c
+++ b/cmd-show-options.c
@@ -100,15 +100,17 @@ cmd_show_options_one(struct cmd *self, struct cmd_q *cmdq,
struct options *oo, int quiet)
{
struct args *args = self->args;
+ const char *name = args->argv[0];
const struct o