aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd-find.c39
-rw-r--r--cmd-select-pane.c6
-rw-r--r--options-table.c10
-rw-r--r--server-fn.c2
-rw-r--r--tmux.125
-rw-r--r--tty.c24
6 files changed, 71 insertions, 35 deletions
diff --git a/cmd-find.c b/cmd-find.c
index fab3849f..3f7ad660 100644
--- a/cmd-find.c
+++ b/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);
}
/*
diff --git a/cmd-select-pane.c b/cmd-select-pane.c
index e7f2249e..f237e8fd 100644
--- a/cmd-select-pane.c
+++ b/cmd-select-pane.c
@@ -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;
diff --git a/options-table.c b/options-table.c
index d3959626..a4f3ac4c 100644
--- a/options-table.c
+++ b/options-table.c
@@ -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
diff --git a/server-fn.c b/server-fn.c
index 043463fd..668ef5c4 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -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;
diff --git a/tmux.1 b/tmux.1
index 8707ebd9..b97fd8a3 100644
--- a/tmux.1
+++ b/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
diff --git a/tty.c b/tty.c
index ee52d038..f6db8e20 100644
--- a/tty.c
+++ b/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 *);
@@ -457,6 +458,21 @@ tty_putn(struct tty *tty, const void *buf, size_t len, u_int 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)
{
if (!tty_term_has(tty->term, TTYC_TSL) ||
@@ -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)