diff options
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | cmd-set-buffer.c | 21 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | grid-view.c | 22 | ||||
-rw-r--r-- | grid.c | 18 | ||||
-rw-r--r-- | input-keys.c | 6 | ||||
-rw-r--r-- | log.c | 116 | ||||
-rw-r--r-- | options-table.c | 14 | ||||
-rw-r--r-- | osdep-cygwin.c | 88 | ||||
-rw-r--r-- | status.c | 6 | ||||
-rw-r--r-- | tmux.1 | 10 | ||||
-rw-r--r-- | tmux.c | 2 | ||||
-rw-r--r-- | tmux.h | 16 |
13 files changed, 145 insertions, 180 deletions
@@ -132,5 +132,3 @@ binding to a command that says "next key from $othertable" and so on. means -n can go away as well * customizable command aliases - * get_cwd for cgywin - diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c index 30a137cd..0e754bb6 100644 --- a/cmd-set-buffer.c +++ b/cmd-set-buffer.c @@ -53,6 +53,9 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) psize = 0; pdata = NULL; + pb = NULL; + buffer = -1; + if (args_has(args, 'b')) { buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); if (cause != NULL) { @@ -65,13 +68,17 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); } - if (args_has(args, 'a')) { - psize = pb->size; - pdata = xmalloc(psize); - memcpy(pdata, pb->data, psize); - } - } else - buffer = -1; + } else if (args_has(args, 'a')) { + pb = paste_get_top(&global_buffers); + if (pb != NULL) + buffer = 0; + } + + if (args_has(args, 'a') && pb != NULL) { + psize = pb->size; + pdata = xmalloc(psize); + memcpy(pdata, pb->data, psize); + } newsize = strlen(args->argv[0]); diff --git a/configure.ac b/configure.ac index c171940f..a23e3aea 100644 --- a/configure.ac +++ b/configure.ac @@ -501,6 +501,10 @@ case "$host_os" in AC_MSG_RESULT(hpux) PLATFORM=hpux ;; + *cygwin*) + AC_MSG_RESULT(cygwin) + PLATFORM=cygwin + ;; *) AC_MSG_RESULT(unknown) PLATFORM=unknown diff --git a/grid-view.c b/grid-view.c index 7ef443a3..13385cd1 100644 --- a/grid-view.c +++ b/grid-view.c @@ -59,8 +59,6 @@ grid_view_clear_history(struct grid *gd) struct grid_line *gl; u_int yy, last; - GRID_DEBUG(gd, ""); - /* Find the last used line. */ last = 0; for (yy = 0; yy < gd->sy; yy++) { @@ -82,8 +80,6 @@ grid_view_clear_history(struct grid *gd) void grid_view_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny) { - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u, ny=%u", px, py, nx, ny); - px = grid_view_x(gd, px); py = grid_view_y(gd, py); @@ -94,8 +90,6 @@ grid_view_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny) void grid_view_scroll_region_up(struct grid *gd, u_int rupper, u_int rlower) { - GRID_DEBUG(gd, "rupper=%u, rlower=%u", rupper, rlower); - if (gd->flags & GRID_HISTORY) { grid_collect_history(gd); if (rupper == 0 && rlower == gd->sy - 1) @@ -116,8 +110,6 @@ grid_view_scroll_region_up(struct grid *gd, u_int rupper, u_int rlower) void grid_view_scroll_region_down(struct grid *gd, u_int rupper, u_int rlower) { - GRID_DEBUG(gd, "rupper=%u, rlower=%u", rupper, rlower); - rupper = grid_view_y(gd, rupper); rlower = grid_view_y(gd, rlower); @@ -130,8 +122,6 @@ grid_view_insert_lines(struct grid *gd, u_int py, u_int ny) { u_int sy; - GRID_DEBUG(gd, "py=%u, ny=%u", py, ny); - py = grid_view_y(gd, py); sy = grid_view_y(gd, gd->sy); @@ -145,8 +135,6 @@ grid_view_insert_lines_region(struct grid *gd, u_int rlower, u_int py, u_int ny) { u_int ny2; - GRID_DEBUG(gd, "rlower=%u, py=%u, ny=%u", rlower, py, ny); - rlower = grid_view_y(gd, rlower); py = grid_view_y(gd, py); @@ -162,8 +150,6 @@ grid_view_delete_lines(struct grid *gd, u_int py, u_int ny) { u_int sy; - GRID_DEBUG(gd, "py=%u, ny=%u", py, ny); - py = grid_view_y(gd, py); sy = grid_view_y(gd, gd->sy); @@ -178,8 +164,6 @@ grid_view_delete_lines_region(struct grid *gd, u_int rlower, u_int py, u_int ny) { u_int ny2; - GRID_DEBUG(gd, "rlower=%u, py=%u, ny=%u", rlower, py, ny); - rlower = grid_view_y(gd, rlower); py = grid_view_y(gd, py); @@ -195,8 +179,6 @@ grid_view_insert_cells(struct grid *gd, u_int px, u_int py, u_int nx) { u_int sx; - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx); - px = grid_view_x(gd, px); py = grid_view_y(gd, py); @@ -214,8 +196,6 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx) { u_int sx; - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx); - px = grid_view_x(gd, px); py = grid_view_y(gd, py); @@ -229,8 +209,6 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx) char * grid_view_string_cells(struct grid *gd, u_int px, u_int py, u_int nx) { - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx); - px = grid_view_x(gd, px); py = grid_view_y(gd, py); @@ -151,8 +151,6 @@ grid_collect_history(struct grid *gd) { u_int yy; - GRID_DEBUG(gd, ""); - if (gd->hsize < gd->hlimit) return; @@ -173,8 +171,6 @@ grid_scroll_history(struct grid *gd) { u_int yy; - GRID_DEBUG(gd, ""); - yy = gd->hsize + gd->sy; gd->linedata = xrealloc(gd->linedata, yy + 1, sizeof *gd->linedata); memset(&gd->linedata[yy], 0, sizeof gd->linedata[yy]); @@ -189,8 +185,6 @@ grid_scroll_history_region(struct grid *gd, u_int upper, u_int lower) struct grid_line *gl_history, *gl_upper, *gl_lower; u_int yy; - GRID_DEBUG(gd, "upper=%u, lower=%u", upper, lower); - /* Create a space for a new line. */ yy = gd->hsize + gd->sy; gd->linedata = xrealloc(gd->linedata, yy + 1, sizeof *gd->linedata); @@ -282,8 +276,6 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny) { u_int xx, yy; - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u, ny=%u", px, py, nx, ny); - if (nx == 0 || ny == 0) return; @@ -319,8 +311,6 @@ grid_clear_lines(struct grid *gd, u_int py, u_int ny) struct grid_line *gl; u_int yy; - GRID_DEBUG(gd, "py=%u, ny=%u", py, ny); - if (ny == 0) return; @@ -342,8 +332,6 @@ grid_move_lines(struct grid *gd, u_int dy, u_int py, u_int ny) { u_int yy; - GRID_DEBUG(gd, "dy=%u, py=%u, ny=%u", dy, py, ny); - if (ny == 0 || py == dy) return; @@ -381,8 +369,6 @@ grid_move_cells(struct grid *gd, u_int dx, u_int px, u_int py, u_int nx) struct grid_line *gl; u_int xx; - GRID_DEBUG(gd, "dx=%u, px=%u, py=%u, nx=%u", dx, px, py, nx); - if (nx == 0 || px == dx) return; @@ -592,8 +578,6 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx, u_int xx; const struct grid_line *gl; - GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx); - if (lastgc != NULL && *lastgc == NULL) { memcpy(&lastgc1, &grid_default_cell, sizeof lastgc1); *lastgc = &lastgc1; @@ -661,8 +645,6 @@ grid_duplicate_lines(struct grid *dst, u_int dy, struct grid *src, u_int sy, struct grid_line *dstl, *srcl; u_int yy; - GRID_DEBUG(src, "dy=%u, sy=%u, ny=%u", dy, sy, ny); - if (dy + ny > dst->hsize + dst->sy) ny = dst->hsize + dst->sy - dy; if (sy + ny > src->hsize + src->sy) diff --git a/input-keys.c b/input-keys.c index 7582a638..46c37d0b 100644 --- a/input-keys.c +++ b/input-keys.c @@ -142,7 +142,7 @@ input_key(struct window_pane *wp, int key) char *out; u_char ch; - log_debug2("writing key 0x%x", key); + log_debug("writing key 0x%x", key); /* * If this is a normal 7-bit key, just send it, with a leading escape @@ -185,11 +185,11 @@ input_key(struct window_pane *wp, int key) break; } if (i == nitems(input_keys)) { - log_debug2("key 0x%x missing", key); + log_debug("key 0x%x missing", key); return; } dlen = strlen(ike->data); - log_debug2("found key 0x%x: \"%s\"", key, ike->data); + log_debug("found key 0x%x: \"%s\"", key, ike->data); /* Prefix a \033 for escape. */ if (key & KEYC_ESCAPE) @@ -22,36 +22,28 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <syslog.h> -#include <time.h> #include "tmux.h" -/* Log file, if needed. */ -FILE *log_file; +FILE *log_file; -/* Debug level. */ -int log_level = 0; - -void log_event_cb(int, const char *); -void log_vwrite(const char *, va_list); -__dead void log_vfatal(const char *, va_list); +void log_event_cb(int, const char *); +void log_vwrite(const char *, va_list); /* Log callback for libevent. */ void log_event_cb(unused int severity, const char *msg) { - log_warnx("%s", msg); + log_debug("%s", msg); } /* Open logging to file. */ void -log_open(int level, const char *path) +log_open(const char *path) { log_file = fopen(path, "w"); if (log_file == NULL) return; - log_level = level; setlinebuf(log_file); event_set_log_callback(log_event_cb); @@ -65,6 +57,7 @@ log_close(void) { if (log_file != NULL) fclose(log_file); + log_file = NULL; event_set_log_callback(NULL); } @@ -86,24 +79,9 @@ log_vwrite(const char *msg, va_list ap) free(fmt); } -/* Log a warning with error string. */ -void printflike1 -log_warn(const char *msg, ...) -{ - va_list ap; - char *fmt; - - va_start(ap, msg); - if (asprintf(&fmt, "%s: %s", msg, strerror(errno)) == -1) - exit(1); - log_vwrite(fmt, ap); - free(fmt); - va_end(ap); -} - -/* Log a warning. */ +/* Log a debug message. */ void printflike1 -log_warnx(const char *msg, ...) +log_debug(const char *msg, ...) { va_list ap; @@ -112,82 +90,30 @@ log_warnx(const char *msg, ...) va_end(ap); } -/* Log an informational message. */ -void printflike1 -log_info(const char *msg, ...) -{ - va_list ap; - - if (log_level > -1) { - va_start(ap, msg); - log_vwrite(msg, ap); - va_end(ap); - } -} - -/* Log a debug message. */ -void printflike1 -log_debug(const char *msg, ...) -{ - va_list ap; - - if (log_level > 0) { - va_start(ap, msg); - log_vwrite(msg, ap); - va_end(ap); - } -} - -/* Log a debug message at level 2. */ -void printflike1 -log_debug2(const char *msg, ...) -{ - va_list ap; - - if (log_level > 1) { - va_start(ap, msg); - log_vwrite(msg, ap); - va_end(ap); - } -} - -/* Log a critical error, with error string if necessary, and die. */ -__dead void -log_vfatal(const char *msg, va_list ap) -{ - char *fmt; - - if (errno != 0) { - if (asprintf(&fmt, "fatal: %s: %s", msg, strerror(errno)) == -1) - exit(1); - log_vwrite(fmt, ap); - } else { - if (asprintf(&fmt, "fatal: %s", msg) == -1) - exit(1); - log_vwrite(fmt, ap); - } - free(fmt); - - exit(1); -} - -/* Log a critical error, with error string, and die. */ +/* Log a critical error with error string and die. */ __dead void printflike1 log_fatal(const char *msg, ...) { - va_list ap; + char *fmt; + va_list ap; va_start(ap, msg); - log_vfatal(msg, ap); + if (asprintf(&fmt, "fatal: %s: %s", msg, strerror(errno)) == -1) + exit(1); + log_vwrite(fmt, ap); + exit(1); } /* Log a critical error and die. */ __dead void printflike1 log_fatalx(const char *msg, ...) { - va_list ap; + char *fmt; + va_list ap; - errno = 0; va_start(ap, msg); - log_vfatal(msg, ap); + if (asprintf(&fmt, "fatal: %s", msg) == -1) + exit(1); + log_vwrite(fmt, ap); + exit(1); } diff --git a/options-table.c b/options-table.c index 64d3edcd..7b09a687 100644 --- a/options-table.c +++ b/options-table.c @@ -80,6 +80,13 @@ const struct options_table_entry server_options_table[] = { .default_num = 0 }, + { .name = "message-limit", + .type = OPTIONS_TABLE_NUMBER, + .minimum = 0, + .maximum = INT_MAX, + .default_num = 100 + }, + { .name = "quiet", .type = OPTIONS_TABLE_FLAG, .default_num = 0 /* overridden in main() */ @@ -234,13 +241,6 @@ const struct options_table_entry session_options_table[] = { .style = "message-style" }, - { .name = "message-limit", - .type = OPTIONS_TABLE_NUMBER, - .minimum = 0, - .maximum = INT_MAX, - .default_num = 20 - }, - { .name = "message-style", .type = OPTIONS_TABLE_STYLE, .default_str = "bg=yellow,fg=black" diff --git a/osdep-cygwin.c b/osdep-cygwin.c new file mode 100644 index 00000000..01d2d0c2 --- /dev/null +++ b/osdep-cygwin.c @@ -0,0 +1,88 @@ +/* $Id$ */ + +/* + * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> +#include <sys/stat.h> + +#include <event.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "tmux.h" + +char * +osdep_get_name(int fd, unused char *tty) +{ + FILE *f; + char *path, *buf; + size_t len; + int ch; + pid_t pgrp; + + if ((pgrp = tcgetpgrp(fd)) == -1) + return (NULL); + + xasprintf(&path, "/proc/%lld/cmdline", (long long) pgrp); + if ((f = fopen(path, "r")) == NULL) { + free(path); + return (NULL); + } + free(path); + + len = 0; + buf = NULL; + while ((ch = fgetc(f)) != EOF) { + if (ch == '\0') + break; + buf = xrealloc(buf, 1, len + 2); + buf[len++] = ch; + } + if (buf != NULL) + buf[len] = '\0'; + + fclose(f); + return (buf); +} + +char * +osdep_get_cwd(int fd) +{ + static char target[MAXPATHLEN + 1]; + char *path; + pid_t pgrp; + ssize_t n; + + if ((pgrp = tcgetpgrp(fd)) == -1) + return (NULL); + + xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp); + n = readlink(path, target, MAXPATHLEN); + free(path); + if (n > 0) { + target[n] = '\0'; + return (target); + } + return (NULL); +} + +struct event_base * +osdep_event_init(void) +{ + return (event_init()); +} @@ -655,7 +655,6 @@ void printflike2 status_message_set(struct client *c, const char *fmt, ...) { struct timeval tv; - struct session *s = c->session; struct message_entry *msg; va_list ap; int delay; @@ -673,10 +672,7 @@ status_message_set(struct client *c, const char *fmt, ...) msg->msg_time = time(NULL); msg->msg = xstrdup(c->message_string); - if (s == NULL) - limit = 0; - else - limit = options_get_number(&s->options, "message-limit"); + limit = options_get_number(&global_options, "message-limit"); if (ARRAY_LENGTH(&c->message_log) > limit) { limit = ARRAY_LENGTH(&c->message_log) - limit; for (i = 0; i < limit; i++) { @@ -782,7 +782,7 @@ Show client messages or server information. Any messages displayed on the status line are saved in a per-client message log, up to a maximum of the limit set by the .Ar message-limit -session option for the session attached to that client. +server option. With .Fl t , display the log for @@ -2138,6 +2138,10 @@ passed through to applications running in .Nm . Attached clients should be detached and attached again after changing this option. +.It Ic message-limit Ar number +Set the number of error or information messages to save in the message log for +each client. +The default is 100. .It Xo Ic quiet .Op Ic on | off .Xc @@ -2359,10 +2363,6 @@ With the flag to the .Ic set-option command the new style is added otherwise the existing style is replaced. -.It Ic message-limit Ar number -Set the number of error or information messages to save in the message log for -each client. -The default is 20. .It Ic message-style Ar style Set status line message style. For how to specify @@ -73,7 +73,7 @@ logfile(const char *name) if (debug_level > 0) { xasprintf(&path, "tmux-%s-%ld.log", name, (long) getpid()); - log_open(debug_level, path); + log_open(path); free(path); } } @@ -660,16 +660,6 @@ struct utf8_data { u_int width; }; -/* Grid output. */ -#if defined(DEBUG) && \ - ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ - (defined(__GNUC__) && __GNUC__ >= 3)) -#define GRID_DEBUG(gd, fmt, ...) log_debug2("%s: (sx=%u, sy=%u, hsize=%u) " \ - fmt, __func__, (gd)->sx, (gd)->sy, (gd)->hsize, ## __VA_ARGS__) -#else -#define GRID_DEBUG(...) -#endif - /* Grid attributes. */ #define GRID_ATTR_BRIGHT 0x1 #define GRID_ATTR_DIM 0x2 @@ -2340,13 +2330,9 @@ char *osdep_get_cwd(int); struct event_base *osdep_event_init(void); /* log.c */ -void log_open(int, const char *); +void log_open(const char *); void log_close(void); -void printflike1 log_warn(const char *, ...); -void printflike1 log_warnx(const char *, ...); -void printflike1 log_info(const char *, ...); void printflike1 log_debug(const char *, ...); -void printflike1 log_debug2(const char *, ...); __dead void printflike1 log_fatal(const char *, ...); __dead void printflike1 log_fatalx(const char *, ...); |