From 55d5b83408de27485e6b2ecc311d9ff8eaae822b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Jun 2008 17:35:40 +0000 Subject: [PATCH] Informational messages on window option changes. --- CHANGES | 4 +++- TODO | 1 + cfg.c | 3 ++- cmd-set-window-option.c | 26 +++++++++++++++++++++++- key-bindings.c | 22 ++++++++++++++++++++- screen-redraw.c | 4 +--- server-fn.c | 26 +++++++++++++++--------- server-msg.c | 22 ++++++++++++++++++++- tmux.1 | 44 +++++++++++++++++++++++++++-------------- tmux.c | 8 ++++++-- tmux.h | 4 +++- 11 files changed, 129 insertions(+), 35 deletions(-) diff --git a/CHANGES b/CHANGES index 6202b345..47cb123e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ 16 June 2008 +* Add some information messages when window options are changed, suggested by + Mike Erdely. Also add a -q command-line option to suppress them. * show-window-options (showw) command. 15 June 2008 @@ -480,4 +482,4 @@ (including mutt, emacs). No status bar yet and no key remapping or other customisation. -$Id: CHANGES,v 1.121 2008-06-16 06:10:02 nicm Exp $ +$Id: CHANGES,v 1.122 2008-06-16 17:35:40 nicm Exp $ diff --git a/TODO b/TODO index 4ac30d4a..3100c3ec 100644 --- a/TODO +++ b/TODO @@ -66,6 +66,7 @@ - status bar customisation variables, show-activity, show-last-window - figure out Linux tcsetattr problem, remove header bodge if unnecessary - flags to centre screen in window +- get rid of DEFDATA etc -- For 0.3 -------------------------------------------------------------------- - clear EOL etc CANNOT rely on term using the current colour/attr and probably diff --git a/cfg.c b/cfg.c index 3586ea2a..a675a6aa 100644 --- a/cfg.c +++ b/cfg.c @@ -1,4 +1,4 @@ -/* $Id: cfg.c,v 1.7 2008-06-14 08:11:17 nicm Exp $ */ +/* $Id: cfg.c,v 1.8 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -123,6 +123,7 @@ load_cfg(const char *path, char **causep) ctx.error = cfg_error; ctx.print = cfg_print; + ctx.info = cfg_print; ctx.cmdclient = NULL; ctx.flags = 0; diff --git a/cmd-set-window-option.c b/cmd-set-window-option.c index c92deac3..f762c117 100644 --- a/cmd-set-window-option.c +++ b/cmd-set-window-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-window-option.c,v 1.7 2008-06-14 16:47:20 nicm Exp $ */ +/* $Id: cmd-set-window-option.c,v 1.8 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -145,6 +145,14 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) wl->window->flags &= ~WINDOW_MONITOR; } + if (wl->window->flags & WINDOW_MONITOR) { + ctx->info(ctx, "window %s:%d: set %s", + s->name, wl->idx, data->option); + } else { + ctx->info(ctx, "window %s:%d: cleared %s", + s->name, wl->idx, data->option); + } + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { s = ARRAY_ITEM(&sessions, i); if (s != NULL) @@ -165,6 +173,14 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) wl->window->flags &= ~WINDOW_AGGRESSIVE; } + if (wl->window->flags & WINDOW_AGGRESSIVE) { + ctx->info(ctx, "window %s:%d: set %s", + s->name, wl->idx, data->option); + } else { + ctx->info(ctx, "window %s:%d: cleared %s", + s->name, wl->idx, data->option); + } + recalculate_sizes(); } else if (strcmp(data->option, "force-width") == 0) { if (data->value == NULL || number == -1) { @@ -179,6 +195,10 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) wl->window->limitx = UINT_MAX; else wl->window->limitx = number; + + ctx->info(ctx, "window %s:%d: set force-width %u", + s->name, wl->idx, number); + recalculate_sizes(); } else if (strcmp(data->option, "force-height") == 0) { if (data->value == NULL || number == -1) { @@ -193,6 +213,10 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) wl->window->limity = UINT_MAX; else wl->window->limity = number; + + ctx->info(ctx, "window %s:%d: set force-height %u", + s->name, wl->idx, number); + recalculate_sizes(); } else { ctx->error(ctx, "unknown option: %s", data->option); diff --git a/key-bindings.c b/key-bindings.c index 1c936d20..f9413190 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -1,4 +1,4 @@ -/* $Id: key-bindings.c,v 1.30 2008-06-16 07:01:41 nicm Exp $ */ +/* $Id: key-bindings.c,v 1.31 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -28,6 +28,7 @@ struct bindings key_bindings; void printflike2 key_bindings_error(struct cmd_ctx *, const char *, ...); void printflike2 key_bindings_print(struct cmd_ctx *, const char *, ...); +void printflike2 key_bindings_info(struct cmd_ctx *, const char *, ...); void key_bindings_add(int key, struct cmd *cmd) @@ -172,6 +173,24 @@ key_bindings_print(struct cmd_ctx *ctx, const char *fmt, ...) va_end(ap); } +void printflike2 +key_bindings_info(struct cmd_ctx *ctx, const char *fmt, ...) +{ + va_list ap; + char *msg; + + if (be_quiet) + return; + + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end(ap); + + *msg = toupper((u_char) *msg); + server_write_message(ctx->curclient, "%s", msg); + xfree(msg); +} + void key_bindings_dispatch(int key, struct client *c) { @@ -194,6 +213,7 @@ key_bindings_dispatch(int key, struct client *c) ctx.error = key_bindings_error; ctx.print = key_bindings_print; + ctx.info = key_bindings_info; ctx.cmdclient = NULL; ctx.flags = CMD_KEY; diff --git a/screen-redraw.c b/screen-redraw.c index af1c319f..1c1c5474 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -1,4 +1,4 @@ -/* $Id: screen-redraw.c,v 1.7 2008-06-14 18:38:55 nicm Exp $ */ +/* $Id: screen-redraw.c,v 1.8 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -138,8 +138,6 @@ screen_redraw_write_string(struct screen_redraw_ctx *ctx, const char *fmt, ...) va_end(ap); for (ptr = msg; *ptr != '\0'; ptr++) { - if (ctx->s->cx > screen_last_x(s)) - break; if (*ptr < 0x20) continue; ctx->write(ctx->data, TTY_CHARACTER, *ptr); diff --git a/server-fn.c b/server-fn.c index 59813f65..8547fbf7 100644 --- a/server-fn.c +++ b/server-fn.c @@ -1,4 +1,4 @@ -/* $Id: server-fn.c,v 1.41 2008-06-14 16:47:20 nicm Exp $ */ +/* $Id: server-fn.c,v 1.42 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -159,25 +159,33 @@ server_write_message(struct client *c, const char *fmt, ...) slines = options_get_number(&c->session->options, "status-lines"); screen_redraw_start_client(&ctx, c); - screen_redraw_move_cursor(&ctx, 0, c->sy - 1); - screen_redraw_set_attributes(&ctx, ATTR_REVERSE, 0x88); va_start(ap, fmt); xvasprintf(&msg, fmt, ap); va_end(ap); + msg = xrealloc(msg, 1, c->sx + 1); + msg[c->sx] = '\0'; + size = strlen(msg); - if (size < c->sx - 1) { - msg = xrealloc(msg, 1, c->sx); - msg[c->sx - 1] = '\0'; - memset(msg + size, SCREEN_DEFDATA, (c->sx - 1) - size); - } + if (size < c->sx) + memset(msg + size, ' ', c->sx - size); + + screen_redraw_move_cursor(&ctx, 0, c->sy - 1); + screen_redraw_set_attributes(&ctx, ATTR_REVERSE, 0x88); screen_redraw_write_string(&ctx, "%s", msg); - xfree(msg); buffer_flush(c->tty.fd, c->tty.in, c->tty.out); usleep(750000); + memset(msg, ' ', c->sx); + + screen_redraw_move_cursor(&ctx, 0, c->sy - 1); + screen_redraw_set_attributes(&ctx, 0, 0x88); + screen_redraw_write_string(&ctx, "%s", msg); + + xfree(msg); + if (slines == 0) { screen_redraw_lines(&ctx, c->sy - 1, 1); screen_redraw_stop(&ctx); diff --git a/server-msg.c b/server-msg.c index d419e9f2..4b1ff441 100644 --- a/server-msg.c +++ b/server-msg.c @@ -1,4 +1,4 @@ -/* $Id: server-msg.c,v 1.45 2008-06-02 18:23:37 nicm Exp $ */ +/* $Id: server-msg.c,v 1.46 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -34,6 +34,8 @@ void printflike2 server_msg_fn_command_error( struct cmd_ctx *, const char *, ...); void printflike2 server_msg_fn_command_print( struct cmd_ctx *, const char *, ...); +void printflike2 server_msg_fn_command_info( + struct cmd_ctx *, const char *, ...); struct server_msg { enum hdrtype type; @@ -105,6 +107,23 @@ server_msg_fn_command_print(struct cmd_ctx *ctx, const char *fmt, ...) xfree(msg); } +void printflike2 +server_msg_fn_command_info(struct cmd_ctx *ctx, const char *fmt, ...) +{ + va_list ap; + char *msg; + + if (be_quiet) + return; + + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end(ap); + + server_write_client(ctx->cmdclient, MSG_PRINT, msg, strlen(msg)); + xfree(msg); +} + int server_msg_fn_command(struct hdr *hdr, struct client *c) { @@ -121,6 +140,7 @@ server_msg_fn_command(struct hdr *hdr, struct client *c) ctx.error = server_msg_fn_command_error; ctx.print = server_msg_fn_command_print; + ctx.info = server_msg_fn_command_info; ctx.msgdata = &data; ctx.curclient = NULL; diff --git a/tmux.1 b/tmux.1 index b05a9d71..2136e34a 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1,4 +1,4 @@ -.\" $Id: tmux.1,v 1.34 2008-06-16 06:33:50 nicm Exp $ +.\" $Id: tmux.1,v 1.35 2008-06-16 17:35:40 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -23,7 +23,7 @@ .Sh SYNOPSIS .Nm tmux .Bk -words -.Op Fl vV +.Op Fl vVq .Op Fl f Ar file .Op Fl S Ar socket-path .Op Ar command Op Ar flags @@ -50,6 +50,26 @@ Communication takes place through a socket, by default placed in .Pp The options are as follows: .Bl -tag -width "XXXXXXXXXXXX" +.It Fl f Ar file +Specify an alternative configuration file. +By default, +.Nm +will look for a config file at +.Pa ~/.tmux.conf . +The configuration file is a set of +.Nm +commands which are executed in sequence when the server is first started. +.It Fl q +Suppress various information messages, for example when window flags are +altered. +.It Fl S Ar socket-path +Specify an alternative path to the server socket. +The default is +.Pa /tmp/tmux-UID , +where +.Em UID +is the uid of the user who invoked +.Nm . .It Fl v Request verbose logging. This option may be specified multiple times for increasing verbosity. @@ -62,19 +82,6 @@ files in the current directory, where is the pid of the server or client process. .It Fl V Print program version. -.It Fl f Ar file -Specify an alternative configuration file. -By default, -.Nm -will look for a config file at ~/.tmux.conf. -.It Fl S Ar socket-path -Specify an alternative path to the server socket. -The default is -.Pa /tmp/tmux-UID , -where -.Em UID -is the uid of the user who invoked -.Nm . .It Ar command Op Ar flags This specifies one of a set of commands used to control .Nm , @@ -574,6 +581,13 @@ Unlink A window may be unlinked only if it is linked to multiple sessions - windows may not be linked to no sessions. .El +.Sh FILES +.Bl -tag -width Ds -compact +.It Pa ~/.tmux.conf +default +.Nm +configuration file +.El .Sh SEE ALSO .Xr pty 4 .Sh AUTHORS diff --git a/tmux.c b/tmux.c index fe6bf773..edc2a81a 100644 --- a/tmux.c +++ b/tmux.c @@ -1,4 +1,4 @@ -/* $Id: tmux.c,v 1.55 2008-06-15 08:01:54 nicm Exp $ */ +/* $Id: tmux.c,v 1.56 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -48,6 +48,7 @@ struct options global_options; char *paste_buffer; int debug_level; +int be_quiet; void sighandler(int); __dead void usage(void); @@ -174,7 +175,7 @@ main(int argc, char **argv) int n, opt; client = path = name = NULL; - while ((opt = getopt(argc, argv, "f:S:vV")) != EOF) { + while ((opt = getopt(argc, argv, "f:S:qvV")) != EOF) { switch (opt) { case 'f': cfg_file = xstrdup(optarg); @@ -182,6 +183,9 @@ main(int argc, char **argv) case 'S': path = xstrdup(optarg); break; + case 'q': + be_quiet = 1; + break; case 'v': debug_level++; break; diff --git a/tmux.h b/tmux.h index 4ae6dc3d..f6c02e05 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.143 2008-06-16 06:10:02 nicm Exp $ */ +/* $Id: tmux.h,v 1.144 2008-06-16 17:35:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -685,6 +685,7 @@ struct cmd_ctx { struct msg_command_data *msgdata; void (*print)(struct cmd_ctx *, const char *, ...); + void (*info)(struct cmd_ctx *, const char *, ...); void (*error)(struct cmd_ctx *, const char *, ...); #define CMD_KEY 0x1 @@ -760,6 +761,7 @@ extern struct options global_options; extern char *cfg_file; extern char *paste_buffer; extern int debug_level; +extern int be_quiet; void logfile(const char *); void siginit(void); void sigreset(void);