mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-30 12:04:38 +01:00
Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code
This commit is contained in:
commit
77603c4f2d
2
TODO
2
TODO
@ -132,5 +132,3 @@
|
|||||||
binding to a command that says "next key from $othertable" and so
|
binding to a command that says "next key from $othertable" and so
|
||||||
on. means -n can go away as well
|
on. means -n can go away as well
|
||||||
* customizable command aliases
|
* customizable command aliases
|
||||||
* get_cwd for cgywin
|
|
||||||
|
|
||||||
|
@ -53,6 +53,9 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
psize = 0;
|
psize = 0;
|
||||||
pdata = NULL;
|
pdata = NULL;
|
||||||
|
|
||||||
|
pb = NULL;
|
||||||
|
buffer = -1;
|
||||||
|
|
||||||
if (args_has(args, 'b')) {
|
if (args_has(args, 'b')) {
|
||||||
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
|
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
|
||||||
if (cause != NULL) {
|
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);
|
cmdq_error(cmdq, "no buffer %d", buffer);
|
||||||
return (CMD_RETURN_ERROR);
|
return (CMD_RETURN_ERROR);
|
||||||
}
|
}
|
||||||
if (args_has(args, 'a')) {
|
} else if (args_has(args, 'a')) {
|
||||||
psize = pb->size;
|
pb = paste_get_top(&global_buffers);
|
||||||
pdata = xmalloc(psize);
|
if (pb != NULL)
|
||||||
memcpy(pdata, pb->data, psize);
|
buffer = 0;
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
buffer = -1;
|
if (args_has(args, 'a') && pb != NULL) {
|
||||||
|
psize = pb->size;
|
||||||
|
pdata = xmalloc(psize);
|
||||||
|
memcpy(pdata, pb->data, psize);
|
||||||
|
}
|
||||||
|
|
||||||
newsize = strlen(args->argv[0]);
|
newsize = strlen(args->argv[0]);
|
||||||
|
|
||||||
|
@ -501,6 +501,10 @@ case "$host_os" in
|
|||||||
AC_MSG_RESULT(hpux)
|
AC_MSG_RESULT(hpux)
|
||||||
PLATFORM=hpux
|
PLATFORM=hpux
|
||||||
;;
|
;;
|
||||||
|
*cygwin*)
|
||||||
|
AC_MSG_RESULT(cygwin)
|
||||||
|
PLATFORM=cygwin
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
AC_MSG_RESULT(unknown)
|
AC_MSG_RESULT(unknown)
|
||||||
PLATFORM=unknown
|
PLATFORM=unknown
|
||||||
|
22
grid-view.c
22
grid-view.c
@ -59,8 +59,6 @@ grid_view_clear_history(struct grid *gd)
|
|||||||
struct grid_line *gl;
|
struct grid_line *gl;
|
||||||
u_int yy, last;
|
u_int yy, last;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "");
|
|
||||||
|
|
||||||
/* Find the last used line. */
|
/* Find the last used line. */
|
||||||
last = 0;
|
last = 0;
|
||||||
for (yy = 0; yy < gd->sy; yy++) {
|
for (yy = 0; yy < gd->sy; yy++) {
|
||||||
@ -82,8 +80,6 @@ grid_view_clear_history(struct grid *gd)
|
|||||||
void
|
void
|
||||||
grid_view_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny)
|
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);
|
px = grid_view_x(gd, px);
|
||||||
py = grid_view_y(gd, py);
|
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
|
void
|
||||||
grid_view_scroll_region_up(struct grid *gd, u_int rupper, u_int rlower)
|
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) {
|
if (gd->flags & GRID_HISTORY) {
|
||||||
grid_collect_history(gd);
|
grid_collect_history(gd);
|
||||||
if (rupper == 0 && rlower == gd->sy - 1)
|
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
|
void
|
||||||
grid_view_scroll_region_down(struct grid *gd, u_int rupper, u_int rlower)
|
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);
|
rupper = grid_view_y(gd, rupper);
|
||||||
rlower = grid_view_y(gd, rlower);
|
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;
|
u_int sy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "py=%u, ny=%u", py, ny);
|
|
||||||
|
|
||||||
py = grid_view_y(gd, py);
|
py = grid_view_y(gd, py);
|
||||||
|
|
||||||
sy = grid_view_y(gd, gd->sy);
|
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;
|
u_int ny2;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "rlower=%u, py=%u, ny=%u", rlower, py, ny);
|
|
||||||
|
|
||||||
rlower = grid_view_y(gd, rlower);
|
rlower = grid_view_y(gd, rlower);
|
||||||
|
|
||||||
py = grid_view_y(gd, py);
|
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;
|
u_int sy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "py=%u, ny=%u", py, ny);
|
|
||||||
|
|
||||||
py = grid_view_y(gd, py);
|
py = grid_view_y(gd, py);
|
||||||
|
|
||||||
sy = grid_view_y(gd, gd->sy);
|
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;
|
u_int ny2;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "rlower=%u, py=%u, ny=%u", rlower, py, ny);
|
|
||||||
|
|
||||||
rlower = grid_view_y(gd, rlower);
|
rlower = grid_view_y(gd, rlower);
|
||||||
|
|
||||||
py = grid_view_y(gd, py);
|
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;
|
u_int sx;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx);
|
|
||||||
|
|
||||||
px = grid_view_x(gd, px);
|
px = grid_view_x(gd, px);
|
||||||
py = grid_view_y(gd, py);
|
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;
|
u_int sx;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx);
|
|
||||||
|
|
||||||
px = grid_view_x(gd, px);
|
px = grid_view_x(gd, px);
|
||||||
py = grid_view_y(gd, py);
|
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 *
|
char *
|
||||||
grid_view_string_cells(struct grid *gd, u_int px, u_int py, u_int nx)
|
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);
|
px = grid_view_x(gd, px);
|
||||||
py = grid_view_y(gd, py);
|
py = grid_view_y(gd, py);
|
||||||
|
|
||||||
|
18
grid.c
18
grid.c
@ -151,8 +151,6 @@ grid_collect_history(struct grid *gd)
|
|||||||
{
|
{
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "");
|
|
||||||
|
|
||||||
if (gd->hsize < gd->hlimit)
|
if (gd->hsize < gd->hlimit)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -173,8 +171,6 @@ grid_scroll_history(struct grid *gd)
|
|||||||
{
|
{
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "");
|
|
||||||
|
|
||||||
yy = gd->hsize + gd->sy;
|
yy = gd->hsize + gd->sy;
|
||||||
gd->linedata = xrealloc(gd->linedata, yy + 1, sizeof *gd->linedata);
|
gd->linedata = xrealloc(gd->linedata, yy + 1, sizeof *gd->linedata);
|
||||||
memset(&gd->linedata[yy], 0, sizeof gd->linedata[yy]);
|
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;
|
struct grid_line *gl_history, *gl_upper, *gl_lower;
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "upper=%u, lower=%u", upper, lower);
|
|
||||||
|
|
||||||
/* Create a space for a new line. */
|
/* Create a space for a new line. */
|
||||||
yy = gd->hsize + gd->sy;
|
yy = gd->hsize + gd->sy;
|
||||||
gd->linedata = xrealloc(gd->linedata, yy + 1, sizeof *gd->linedata);
|
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;
|
u_int xx, yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "px=%u, py=%u, nx=%u, ny=%u", px, py, nx, ny);
|
|
||||||
|
|
||||||
if (nx == 0 || ny == 0)
|
if (nx == 0 || ny == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -319,8 +311,6 @@ grid_clear_lines(struct grid *gd, u_int py, u_int ny)
|
|||||||
struct grid_line *gl;
|
struct grid_line *gl;
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "py=%u, ny=%u", py, ny);
|
|
||||||
|
|
||||||
if (ny == 0)
|
if (ny == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -342,8 +332,6 @@ grid_move_lines(struct grid *gd, u_int dy, u_int py, u_int ny)
|
|||||||
{
|
{
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "dy=%u, py=%u, ny=%u", dy, py, ny);
|
|
||||||
|
|
||||||
if (ny == 0 || py == dy)
|
if (ny == 0 || py == dy)
|
||||||
return;
|
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;
|
struct grid_line *gl;
|
||||||
u_int xx;
|
u_int xx;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "dx=%u, px=%u, py=%u, nx=%u", dx, px, py, nx);
|
|
||||||
|
|
||||||
if (nx == 0 || px == dx)
|
if (nx == 0 || px == dx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -592,8 +578,6 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
|
|||||||
u_int xx;
|
u_int xx;
|
||||||
const struct grid_line *gl;
|
const struct grid_line *gl;
|
||||||
|
|
||||||
GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx);
|
|
||||||
|
|
||||||
if (lastgc != NULL && *lastgc == NULL) {
|
if (lastgc != NULL && *lastgc == NULL) {
|
||||||
memcpy(&lastgc1, &grid_default_cell, sizeof lastgc1);
|
memcpy(&lastgc1, &grid_default_cell, sizeof lastgc1);
|
||||||
*lastgc = &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;
|
struct grid_line *dstl, *srcl;
|
||||||
u_int yy;
|
u_int yy;
|
||||||
|
|
||||||
GRID_DEBUG(src, "dy=%u, sy=%u, ny=%u", dy, sy, ny);
|
|
||||||
|
|
||||||
if (dy + ny > dst->hsize + dst->sy)
|
if (dy + ny > dst->hsize + dst->sy)
|
||||||
ny = dst->hsize + dst->sy - dy;
|
ny = dst->hsize + dst->sy - dy;
|
||||||
if (sy + ny > src->hsize + src->sy)
|
if (sy + ny > src->hsize + src->sy)
|
||||||
|
@ -142,7 +142,7 @@ input_key(struct window_pane *wp, int key)
|
|||||||
char *out;
|
char *out;
|
||||||
u_char ch;
|
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
|
* 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;
|
break;
|
||||||
}
|
}
|
||||||
if (i == nitems(input_keys)) {
|
if (i == nitems(input_keys)) {
|
||||||
log_debug2("key 0x%x missing", key);
|
log_debug("key 0x%x missing", key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dlen = strlen(ike->data);
|
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. */
|
/* Prefix a \033 for escape. */
|
||||||
if (key & KEYC_ESCAPE)
|
if (key & KEYC_ESCAPE)
|
||||||
|
116
log.c
116
log.c
@ -22,36 +22,28 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <syslog.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include "tmux.h"
|
#include "tmux.h"
|
||||||
|
|
||||||
/* Log file, if needed. */
|
FILE *log_file;
|
||||||
FILE *log_file;
|
|
||||||
|
|
||||||
/* Debug level. */
|
void log_event_cb(int, const char *);
|
||||||
int log_level = 0;
|
void log_vwrite(const char *, va_list);
|
||||||
|
|
||||||
void log_event_cb(int, const char *);
|
|
||||||
void log_vwrite(const char *, va_list);
|
|
||||||
__dead void log_vfatal(const char *, va_list);
|
|
||||||
|
|
||||||
/* Log callback for libevent. */
|
/* Log callback for libevent. */
|
||||||
void
|
void
|
||||||
log_event_cb(unused int severity, const char *msg)
|
log_event_cb(unused int severity, const char *msg)
|
||||||
{
|
{
|
||||||
log_warnx("%s", msg);
|
log_debug("%s", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open logging to file. */
|
/* Open logging to file. */
|
||||||
void
|
void
|
||||||
log_open(int level, const char *path)
|
log_open(const char *path)
|
||||||
{
|
{
|
||||||
log_file = fopen(path, "w");
|
log_file = fopen(path, "w");
|
||||||
if (log_file == NULL)
|
if (log_file == NULL)
|
||||||
return;
|
return;
|
||||||
log_level = level;
|
|
||||||
|
|
||||||
setlinebuf(log_file);
|
setlinebuf(log_file);
|
||||||
event_set_log_callback(log_event_cb);
|
event_set_log_callback(log_event_cb);
|
||||||
@ -65,6 +57,7 @@ log_close(void)
|
|||||||
{
|
{
|
||||||
if (log_file != NULL)
|
if (log_file != NULL)
|
||||||
fclose(log_file);
|
fclose(log_file);
|
||||||
|
log_file = NULL;
|
||||||
|
|
||||||
event_set_log_callback(NULL);
|
event_set_log_callback(NULL);
|
||||||
}
|
}
|
||||||
@ -86,24 +79,9 @@ log_vwrite(const char *msg, va_list ap)
|
|||||||
free(fmt);
|
free(fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log a warning with error string. */
|
/* Log a debug message. */
|
||||||
void printflike1
|
void printflike1
|
||||||
log_warn(const char *msg, ...)
|
log_debug(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. */
|
|
||||||
void printflike1
|
|
||||||
log_warnx(const char *msg, ...)
|
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
@ -112,82 +90,30 @@ log_warnx(const char *msg, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log an informational message. */
|
/* Log a critical error with error string and die. */
|
||||||
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. */
|
|
||||||
__dead void printflike1
|
__dead void printflike1
|
||||||
log_fatal(const char *msg, ...)
|
log_fatal(const char *msg, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
char *fmt;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, msg);
|
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. */
|
/* Log a critical error and die. */
|
||||||
__dead void printflike1
|
__dead void printflike1
|
||||||
log_fatalx(const char *msg, ...)
|
log_fatalx(const char *msg, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
char *fmt;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
va_start(ap, msg);
|
va_start(ap, msg);
|
||||||
log_vfatal(msg, ap);
|
if (asprintf(&fmt, "fatal: %s", msg) == -1)
|
||||||
|
exit(1);
|
||||||
|
log_vwrite(fmt, ap);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,13 @@ const struct options_table_entry server_options_table[] = {
|
|||||||
.default_num = 0
|
.default_num = 0
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ .name = "message-limit",
|
||||||
|
.type = OPTIONS_TABLE_NUMBER,
|
||||||
|
.minimum = 0,
|
||||||
|
.maximum = INT_MAX,
|
||||||
|
.default_num = 100
|
||||||
|
},
|
||||||
|
|
||||||
{ .name = "quiet",
|
{ .name = "quiet",
|
||||||
.type = OPTIONS_TABLE_FLAG,
|
.type = OPTIONS_TABLE_FLAG,
|
||||||
.default_num = 0 /* overridden in main() */
|
.default_num = 0 /* overridden in main() */
|
||||||
@ -234,13 +241,6 @@ const struct options_table_entry session_options_table[] = {
|
|||||||
.style = "message-style"
|
.style = "message-style"
|
||||||
},
|
},
|
||||||
|
|
||||||
{ .name = "message-limit",
|
|
||||||
.type = OPTIONS_TABLE_NUMBER,
|
|
||||||
.minimum = 0,
|
|
||||||
.maximum = INT_MAX,
|
|
||||||
.default_num = 20
|
|
||||||
},
|
|
||||||
|
|
||||||
{ .name = "message-style",
|
{ .name = "message-style",
|
||||||
.type = OPTIONS_TABLE_STYLE,
|
.type = OPTIONS_TABLE_STYLE,
|
||||||
.default_str = "bg=yellow,fg=black"
|
.default_str = "bg=yellow,fg=black"
|
||||||
|
88
osdep-cygwin.c
Normal file
88
osdep-cygwin.c
Normal file
@ -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());
|
||||||
|
}
|
6
status.c
6
status.c
@ -655,7 +655,6 @@ void printflike2
|
|||||||
status_message_set(struct client *c, const char *fmt, ...)
|
status_message_set(struct client *c, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct session *s = c->session;
|
|
||||||
struct message_entry *msg;
|
struct message_entry *msg;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int delay;
|
int delay;
|
||||||
@ -673,10 +672,7 @@ status_message_set(struct client *c, const char *fmt, ...)
|
|||||||
msg->msg_time = time(NULL);
|
msg->msg_time = time(NULL);
|
||||||
msg->msg = xstrdup(c->message_string);
|
msg->msg = xstrdup(c->message_string);
|
||||||
|
|
||||||
if (s == NULL)
|
limit = options_get_number(&global_options, "message-limit");
|
||||||
limit = 0;
|
|
||||||
else
|
|
||||||
limit = options_get_number(&s->options, "message-limit");
|
|
||||||
if (ARRAY_LENGTH(&c->message_log) > limit) {
|
if (ARRAY_LENGTH(&c->message_log) > limit) {
|
||||||
limit = ARRAY_LENGTH(&c->message_log) - limit;
|
limit = ARRAY_LENGTH(&c->message_log) - limit;
|
||||||
for (i = 0; i < limit; i++) {
|
for (i = 0; i < limit; i++) {
|
||||||
|
10
tmux.1
10
tmux.1
@ -782,7 +782,7 @@ Show client messages or server information.
|
|||||||
Any messages displayed on the status line are saved in a per-client message
|
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
|
log, up to a maximum of the limit set by the
|
||||||
.Ar message-limit
|
.Ar message-limit
|
||||||
session option for the session attached to that client.
|
server option.
|
||||||
With
|
With
|
||||||
.Fl t ,
|
.Fl t ,
|
||||||
display the log for
|
display the log for
|
||||||
@ -2138,6 +2138,10 @@ passed through to applications running in
|
|||||||
.Nm .
|
.Nm .
|
||||||
Attached clients should be detached and attached again after changing this
|
Attached clients should be detached and attached again after changing this
|
||||||
option.
|
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
|
.It Xo Ic quiet
|
||||||
.Op Ic on | off
|
.Op Ic on | off
|
||||||
.Xc
|
.Xc
|
||||||
@ -2359,10 +2363,6 @@ With the
|
|||||||
flag to the
|
flag to the
|
||||||
.Ic set-option
|
.Ic set-option
|
||||||
command the new style is added otherwise the existing style is replaced.
|
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
|
.It Ic message-style Ar style
|
||||||
Set status line message style.
|
Set status line message style.
|
||||||
For how to specify
|
For how to specify
|
||||||
|
2
tmux.c
2
tmux.c
@ -73,7 +73,7 @@ logfile(const char *name)
|
|||||||
|
|
||||||
if (debug_level > 0) {
|
if (debug_level > 0) {
|
||||||
xasprintf(&path, "tmux-%s-%ld.log", name, (long) getpid());
|
xasprintf(&path, "tmux-%s-%ld.log", name, (long) getpid());
|
||||||
log_open(debug_level, path);
|
log_open(path);
|
||||||
free(path);
|
free(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
tmux.h
16
tmux.h
@ -660,16 +660,6 @@ struct utf8_data {
|
|||||||
u_int width;
|
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. */
|
/* Grid attributes. */
|
||||||
#define GRID_ATTR_BRIGHT 0x1
|
#define GRID_ATTR_BRIGHT 0x1
|
||||||
#define GRID_ATTR_DIM 0x2
|
#define GRID_ATTR_DIM 0x2
|
||||||
@ -2340,13 +2330,9 @@ char *osdep_get_cwd(int);
|
|||||||
struct event_base *osdep_event_init(void);
|
struct event_base *osdep_event_init(void);
|
||||||
|
|
||||||
/* log.c */
|
/* log.c */
|
||||||
void log_open(int, const char *);
|
void log_open(const char *);
|
||||||
void log_close(void);
|
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_debug(const char *, ...);
|
||||||
void printflike1 log_debug2(const char *, ...);
|
|
||||||
__dead void printflike1 log_fatal(const char *, ...);
|
__dead void printflike1 log_fatal(const char *, ...);
|
||||||
__dead void printflike1 log_fatalx(const char *, ...);
|
__dead void printflike1 log_fatalx(const char *, ...);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user