mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user