mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code
This commit is contained in:
		@@ -157,14 +157,17 @@ int
 | 
			
		||||
cmdq_guard(struct cmd_q *cmdq, const char *guard)
 | 
			
		||||
{
 | 
			
		||||
	struct client	*c = cmdq->client;
 | 
			
		||||
	int		 flags;
 | 
			
		||||
 | 
			
		||||
	if (c == NULL)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!(c->flags & CLIENT_CONTROL))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	evbuffer_add_printf(c->stdout_data, "%%%s %ld %u\n", guard,
 | 
			
		||||
	    (long) cmdq->time, cmdq->number);
 | 
			
		||||
	flags = !!(cmdq->cmd->flags & CMD_CONTROL);
 | 
			
		||||
 | 
			
		||||
	evbuffer_add_printf(c->stdout_data, "%%%s %ld %u %d\n", guard,
 | 
			
		||||
	    (long) cmdq->time, cmdq->number, flags);
 | 
			
		||||
	server_push_stdout(c);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#include <stropts.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,7 @@ control_callback(struct client *c, int closed, unused void *data)
 | 
			
		||||
{
 | 
			
		||||
	char		*line, *cause;
 | 
			
		||||
	struct cmd_list	*cmdlist;
 | 
			
		||||
	struct cmd	*cmd;
 | 
			
		||||
 | 
			
		||||
	if (closed)
 | 
			
		||||
		c->flags |= CLIENT_EXIT;
 | 
			
		||||
@@ -78,6 +79,8 @@ control_callback(struct client *c, int closed, unused void *data)
 | 
			
		||||
 | 
			
		||||
			free(cause);
 | 
			
		||||
		} else {
 | 
			
		||||
			TAILQ_FOREACH(cmd, &cmdlist->list, qentry)
 | 
			
		||||
				cmd->flags |= CMD_CONTROL;
 | 
			
		||||
			cmdq_run(c->cmdq, cmdlist);
 | 
			
		||||
			cmd_list_free(cmdlist);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								input.c
									
									
									
									
									
								
							@@ -1333,7 +1333,7 @@ input_csi_dispatch(struct input_ctx *ictx)
 | 
			
		||||
			if (s->mode & MODE_FOCUSON)
 | 
			
		||||
				break;
 | 
			
		||||
			screen_write_mode_set(&ictx->ctx, MODE_FOCUSON);
 | 
			
		||||
			wp->flags &= ~PANE_FOCUSED; /* force update if needed */
 | 
			
		||||
			wp->flags |= PANE_FOCUSPUSH; /* force update */
 | 
			
		||||
			break;
 | 
			
		||||
		case 1005:
 | 
			
		||||
			screen_write_mode_set(&ictx->ctx, MODE_MOUSE_UTF8);
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,11 @@ const struct options_table_entry server_options_table[] = {
 | 
			
		||||
	  .default_num = 0
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "focus-events",
 | 
			
		||||
	  .type = OPTIONS_TABLE_FLAG,
 | 
			
		||||
	  .default_num = 0
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "quiet",
 | 
			
		||||
	  .type = OPTIONS_TABLE_FLAG,
 | 
			
		||||
	  .default_num = 0 /* overridden in main() */
 | 
			
		||||
 
 | 
			
		||||
@@ -548,6 +548,15 @@ server_client_check_focus(struct window_pane *wp)
 | 
			
		||||
{
 | 
			
		||||
	u_int		 i;
 | 
			
		||||
	struct client	*c;
 | 
			
		||||
	int		 push;
 | 
			
		||||
 | 
			
		||||
	/* Are focus events off? */
 | 
			
		||||
	if (!options_get_number(&global_options, "focus-events"))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/* Do we need to push the focus state? */
 | 
			
		||||
	push = wp->flags & PANE_FOCUSPUSH;
 | 
			
		||||
	wp->flags &= ~PANE_FOCUSPUSH;
 | 
			
		||||
 | 
			
		||||
	/* If we don't care about focus, forget it. */
 | 
			
		||||
	if (!(wp->base.mode & MODE_FOCUSON))
 | 
			
		||||
@@ -580,13 +589,13 @@ server_client_check_focus(struct window_pane *wp)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
not_focused:
 | 
			
		||||
	if (wp->flags & PANE_FOCUSED)
 | 
			
		||||
	if (push || (wp->flags & PANE_FOCUSED))
 | 
			
		||||
		bufferevent_write(wp->event, "\033[O", 3);
 | 
			
		||||
	wp->flags &= ~PANE_FOCUSED;
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
focused:
 | 
			
		||||
	if (!(wp->flags & PANE_FOCUSED))
 | 
			
		||||
	if (push || !(wp->flags & PANE_FOCUSED))
 | 
			
		||||
		bufferevent_write(wp->event, "\033[I", 3);
 | 
			
		||||
	wp->flags |= PANE_FOCUSED;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								tmux.1
									
									
									
									
									
								
							@@ -2096,6 +2096,14 @@ The default is 500 milliseconds.
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
If enabled, the server will exit when there are no attached clients.
 | 
			
		||||
.It Xo Ic focus-events
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
When enabled, focus events are requested from the terminal if supported and
 | 
			
		||||
passed through to applications running in
 | 
			
		||||
.Nm .
 | 
			
		||||
Attached clients should be detached and attached again after changing this
 | 
			
		||||
option.
 | 
			
		||||
.It Xo Ic quiet
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								tmux.h
									
									
									
									
									
								
							@@ -39,9 +39,6 @@
 | 
			
		||||
extern char    *__progname;
 | 
			
		||||
extern char   **environ;
 | 
			
		||||
 | 
			
		||||
/* Default global configuration file. */
 | 
			
		||||
#define TMUX_CONF "/etc/tmux.conf"
 | 
			
		||||
 | 
			
		||||
/* Default prompt history length. */
 | 
			
		||||
#define PROMPT_HISTORY 100
 | 
			
		||||
 | 
			
		||||
@@ -937,6 +934,7 @@ struct window_pane {
 | 
			
		||||
#define PANE_DROP 0x2
 | 
			
		||||
#define PANE_FOCUSED 0x4
 | 
			
		||||
#define PANE_RESIZE 0x8
 | 
			
		||||
#define PANE_FOCUSPUSH 0x10
 | 
			
		||||
 | 
			
		||||
	char		*cmd;
 | 
			
		||||
	char		*shell;
 | 
			
		||||
@@ -1228,6 +1226,7 @@ struct tty {
 | 
			
		||||
#define TTY_UTF8 0x8
 | 
			
		||||
#define TTY_STARTED 0x10
 | 
			
		||||
#define TTY_OPENED 0x20
 | 
			
		||||
#define TTY_FOCUS 0x40
 | 
			
		||||
	int		 flags;
 | 
			
		||||
 | 
			
		||||
	int		 term_flags;
 | 
			
		||||
@@ -1379,6 +1378,9 @@ struct cmd {
 | 
			
		||||
	char			*file;
 | 
			
		||||
	u_int			 line;
 | 
			
		||||
 | 
			
		||||
#define CMD_CONTROL 0x1
 | 
			
		||||
	int			 flags;
 | 
			
		||||
 | 
			
		||||
	TAILQ_ENTRY(cmd)	 qentry;
 | 
			
		||||
};
 | 
			
		||||
struct cmd_list {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								tty.c
									
									
									
									
									
								
							@@ -219,8 +219,13 @@ tty_start_tty(struct tty *tty)
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_KMOUS))
 | 
			
		||||
		tty_puts(tty, "\033[?1000l\033[?1006l\033[?1005l");
 | 
			
		||||
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_XT))
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_XT)) {
 | 
			
		||||
		if (options_get_number(&global_options, "focus-events")) {
 | 
			
		||||
			tty->flags |= TTY_FOCUS;
 | 
			
		||||
			tty_puts(tty, "\033[?1004h");
 | 
			
		||||
		}
 | 
			
		||||
		tty_puts(tty, "\033[c\033[>4;1m\033[m");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tty->cx = UINT_MAX;
 | 
			
		||||
	tty->cy = UINT_MAX;
 | 
			
		||||
@@ -282,8 +287,13 @@ tty_stop_tty(struct tty *tty)
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_KMOUS))
 | 
			
		||||
		tty_raw(tty, "\033[?1000l\033[?1006l\033[?1005l");
 | 
			
		||||
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_XT))
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_XT)) {
 | 
			
		||||
		if (tty->flags & TTY_FOCUS) {
 | 
			
		||||
			tty->flags &= ~TTY_FOCUS;
 | 
			
		||||
			tty_puts(tty, "\033[?1004l");
 | 
			
		||||
		}
 | 
			
		||||
		tty_raw(tty, "\033[>4m\033[m");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user