mirror of
https://github.com/tmux/tmux.git
synced 2024-12-04 19:58:48 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
c0cf4843e5
39
cmd-find.c
39
cmd-find.c
@ -242,10 +242,13 @@ cmd_find_current_session_with_client(struct cmd_find_state *fs)
|
||||
struct window_pane *wp;
|
||||
|
||||
/* If this is running in a pane, that's great. */
|
||||
RB_FOREACH(wp, window_pane_tree, &all_window_panes) {
|
||||
if (strcmp(wp->tty, fs->cmdq->client->tty.path) == 0)
|
||||
break;
|
||||
}
|
||||
if (fs->cmdq->client->tty.path != NULL) {
|
||||
RB_FOREACH(wp, window_pane_tree, &all_window_panes) {
|
||||
if (strcmp(wp->tty, fs->cmdq->client->tty.path) == 0)
|
||||
break;
|
||||
}
|
||||
} else
|
||||
wp = NULL;
|
||||
|
||||
/* Not running in a pane. We know nothing. Find the best session. */
|
||||
if (wp == NULL) {
|
||||
@ -425,7 +428,20 @@ cmd_find_get_window(struct cmd_find_state *fs, const char *window)
|
||||
fs->s = fs->current->s;
|
||||
|
||||
/* We now only need to find the winlink in this session. */
|
||||
return (cmd_find_get_window_with_session(fs, window));
|
||||
if (cmd_find_get_window_with_session(fs, window) == 0)
|
||||
return (0);
|
||||
|
||||
/* Otherwise try as a session itself. */
|
||||
if (cmd_find_get_session(fs, window) == 0) {
|
||||
if (~fs->flags & CMD_FIND_WINDOW_INDEX) {
|
||||
fs->wl = fs->s->curw;
|
||||
fs->w = fs->wl->window;
|
||||
fs->idx = fs->wl->idx;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -591,14 +607,23 @@ cmd_find_get_pane(struct cmd_find_state *fs, const char *pane)
|
||||
return (cmd_find_best_session_with_window(fs));
|
||||
}
|
||||
|
||||
/* Not a pane id, so use the current session and window. */
|
||||
/* Not a pane id, so try the current session and window. */
|
||||
fs->s = fs->current->s;
|
||||
fs->wl = fs->current->wl;
|
||||
fs->idx = fs->current->idx;
|
||||
fs->w = fs->current->w;
|
||||
|
||||
/* We now only need to find the pane in this window. */
|
||||
return (cmd_find_get_pane_with_window(fs, pane));
|
||||
if (cmd_find_get_pane_with_window(fs, pane) == 0)
|
||||
return (0);
|
||||
|
||||
/* Otherwise try as a window itself (this will also try as session). */
|
||||
if (cmd_find_get_window(fs, pane) == 0) {
|
||||
fs->wp = fs->w->active;
|
||||
return (0);
|
||||
}
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -100,10 +100,8 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq)
|
||||
wp = window_pane_find_up(wp);
|
||||
else if (args_has(self->args, 'D'))
|
||||
wp = window_pane_find_down(wp);
|
||||
if (wp == NULL) {
|
||||
cmdq_error(cmdq, "pane not found");
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
if (wp == NULL)
|
||||
return (CMD_RETURN_NORMAL);
|
||||
|
||||
if (args_has(self->args, 'e')) {
|
||||
wp->flags &= ~PANE_INPUTOFF;
|
||||
|
@ -60,6 +60,11 @@ const struct options_table_entry server_options_table[] = {
|
||||
.default_num = 20
|
||||
},
|
||||
|
||||
{ .name = "default-terminal",
|
||||
.type = OPTIONS_TABLE_STRING,
|
||||
.default_str = "screen"
|
||||
},
|
||||
|
||||
{ .name = "escape-time",
|
||||
.type = OPTIONS_TABLE_NUMBER,
|
||||
.minimum = 0,
|
||||
@ -142,11 +147,6 @@ const struct options_table_entry session_options_table[] = {
|
||||
.default_str = _PATH_BSHELL
|
||||
},
|
||||
|
||||
{ .name = "default-terminal",
|
||||
.type = OPTIONS_TABLE_STRING,
|
||||
.default_str = "screen"
|
||||
},
|
||||
|
||||
{ .name = "destroy-unattached",
|
||||
.type = OPTIONS_TABLE_FLAG,
|
||||
.default_num = 0
|
||||
|
@ -36,7 +36,7 @@ server_fill_environ(struct session *s, struct environ *env)
|
||||
long pid;
|
||||
|
||||
if (s != NULL) {
|
||||
term = options_get_string(&s->options, "default-terminal");
|
||||
term = options_get_string(&global_options, "default-terminal");
|
||||
environ_set(env, "TERM", term);
|
||||
|
||||
idx = s->id;
|
||||
|
25
tmux.1
25
tmux.1
@ -2270,6 +2270,19 @@ Available server options are:
|
||||
Set the number of buffers; as new buffers are added to the top of the stack,
|
||||
old ones are removed from the bottom if necessary to maintain this maximum
|
||||
length.
|
||||
.It Ic default-terminal Ar terminal
|
||||
Set the default terminal for new windows created in this session - the
|
||||
default value of the
|
||||
.Ev TERM
|
||||
environment variable.
|
||||
For
|
||||
.Nm
|
||||
to work correctly, this
|
||||
.Em must
|
||||
be set to
|
||||
.Ql screen ,
|
||||
.Ql tmux
|
||||
or a derivative of them.
|
||||
.It Ic escape-time Ar time
|
||||
Set the time in milliseconds for which
|
||||
.Nm
|
||||
@ -2409,18 +2422,6 @@ or
|
||||
This option should be configured when
|
||||
.Nm
|
||||
is used as a login shell.
|
||||
.It Ic default-terminal Ar terminal
|
||||
Set the default terminal for new windows created in this session - the
|
||||
default value of the
|
||||
.Ev TERM
|
||||
environment variable.
|
||||
For
|
||||
.Nm
|
||||
to work correctly, this
|
||||
.Em must
|
||||
be set to
|
||||
.Ql screen
|
||||
or a derivative of it.
|
||||
.It Xo Ic destroy-unattached
|
||||
.Op Ic on | off
|
||||
.Xc
|
||||
|
24
tty.c
24
tty.c
@ -34,6 +34,7 @@
|
||||
void tty_read_callback(struct bufferevent *, void *);
|
||||
void tty_error_callback(struct bufferevent *, short, void *);
|
||||
|
||||
void tty_set_italics(struct tty *);
|
||||
int tty_try_256(struct tty *, u_char, const char *);
|
||||
|
||||
void tty_colours(struct tty *, const struct grid_cell *);
|
||||
@ -456,6 +457,21 @@ tty_putn(struct tty *tty, const void *buf, size_t len, u_int width)
|
||||
tty->cx += width;
|
||||
}
|
||||
|
||||
void
|
||||
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");
|
||||
if (strcmp(s, "screen") != 0 && strncmp(s, "screen-", 7) != 0) {
|
||||
tty_putcode(tty, TTYC_SITM);
|
||||
return;
|
||||
}
|
||||
}
|
||||
tty_putcode(tty, TTYC_SMSO);
|
||||
}
|
||||
|
||||
void
|
||||
tty_set_title(struct tty *tty, const char *title)
|
||||
{
|
||||
@ -1396,12 +1412,8 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc,
|
||||
tty_putcode(tty, TTYC_BOLD);
|
||||
if (changed & GRID_ATTR_DIM)
|
||||
tty_putcode(tty, TTYC_DIM);
|
||||
if (changed & GRID_ATTR_ITALICS) {
|
||||
if (tty_term_has(tty->term, TTYC_SITM))
|
||||
tty_putcode(tty, TTYC_SITM);
|
||||
else
|
||||
tty_putcode(tty, TTYC_SMSO);
|
||||
}
|
||||
if (changed & GRID_ATTR_ITALICS)
|
||||
tty_set_italics(tty);
|
||||
if (changed & GRID_ATTR_UNDERSCORE)
|
||||
tty_putcode(tty, TTYC_SMUL);
|
||||
if (changed & GRID_ATTR_BLINK)
|
||||
|
Loading…
Reference in New Issue
Block a user