mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
Conflicts: tmux.c
This commit is contained in:
		
							
								
								
									
										13
									
								
								clock.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								clock.c
									
									
									
									
									
								
							| @@ -103,13 +103,20 @@ clock_draw(struct screen_write_ctx *ctx, int colour, int style) | ||||
| 	struct grid_cell	 gc; | ||||
| 	char			 tim[64], *ptr; | ||||
| 	time_t			 t; | ||||
| 	struct tm		*tm; | ||||
| 	u_int			 i, j, x, y, idx; | ||||
|  | ||||
| 	t = time(NULL); | ||||
| 	if (style == 0) | ||||
| 		strftime(tim, sizeof tim, "%l:%M %p", localtime(&t)); | ||||
| 	tm = localtime(&t); | ||||
| 	if (style == 0) { | ||||
| 		strftime(tim, sizeof tim, "%l:%M ", localtime(&t)); | ||||
| 		if (tm->tm_hour >= 12) | ||||
| 			strlcat(tim, "PM", sizeof tim); | ||||
| 		else | ||||
| 		strftime(tim, sizeof tim, "%H:%M", localtime(&t)); | ||||
| 			strlcat(tim, "AM", sizeof tim); | ||||
| 	} else | ||||
| 		strftime(tim, sizeof tim, "%H:%M", tm); | ||||
|  | ||||
|  | ||||
| 	screen_write_clearscreen(ctx); | ||||
|  | ||||
|   | ||||
| @@ -54,9 +54,11 @@ cmd_copy_mode_exec(struct cmd *self, struct cmd_q *cmdq) | ||||
| 	if (cmd_find_pane(cmdq, args_get(args, 't'), NULL, &wp) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if (wp->mode != &window_copy_mode) { | ||||
| 		if (window_pane_set_mode(wp, &window_copy_mode) != 0) | ||||
| 			return (CMD_RETURN_NORMAL); | ||||
| 		window_copy_init_from_pane(wp); | ||||
| 	} | ||||
| 	if (wp->mode == &window_copy_mode && args_has(self->args, 'u')) | ||||
| 		window_copy_pageup(wp); | ||||
|  | ||||
|   | ||||
| @@ -158,7 +158,7 @@ cmdq_guard(struct cmd_q *cmdq, const char *guard) | ||||
| { | ||||
| 	struct client	*c = cmdq->client; | ||||
|  | ||||
| 	if (c == NULL || c->session == NULL) | ||||
| 	if (c == NULL) | ||||
| 		return 0; | ||||
| 	if (!(c->flags & CLIENT_CONTROL)) | ||||
| 		return 0; | ||||
|   | ||||
| @@ -49,6 +49,7 @@ cmd_source_file_exec(struct cmd *self, struct cmd_q *cmdq) | ||||
| 	char		*cause; | ||||
|  | ||||
| 	cmdq1 = cmdq_new(NULL); | ||||
| 	cmdq1->client = cmdq->client; | ||||
| 	cmdq1->emptyfn = cmd_source_file_done; | ||||
| 	cmdq1->data = cmdq; | ||||
|  | ||||
|   | ||||
| @@ -75,8 +75,12 @@ cmd_swap_pane_exec(struct cmd *self, struct cmd_q *cmdq) | ||||
| 			src_wp = TAILQ_PREV(dst_wp, window_panes, entry); | ||||
| 			if (src_wp == NULL) | ||||
| 				src_wp = TAILQ_LAST(&dst_w->panes, window_panes); | ||||
| 		} else | ||||
| 			return (CMD_RETURN_NORMAL); | ||||
| 		} else { | ||||
| 			src_wl = cmd_find_pane(cmdq, NULL, NULL, &src_wp); | ||||
| 			if (src_wl == NULL) | ||||
| 				return (CMD_RETURN_ERROR); | ||||
| 			src_w = src_wl->window; | ||||
| 		} | ||||
| 	} else { | ||||
| 		src_wl = cmd_find_pane(cmdq, args_get(args, 's'), NULL, &src_wp); | ||||
| 		if (src_wl == NULL) | ||||
|   | ||||
							
								
								
									
										26
									
								
								colour.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								colour.c
									
									
									
									
									
								
							| @@ -287,29 +287,3 @@ colour_256to16(u_char c) | ||||
|  | ||||
| 	return (table[c]); | ||||
| } | ||||
|  | ||||
| /* Convert 256 colour palette to 88. */ | ||||
| u_char | ||||
| colour_256to88(u_char c) | ||||
| { | ||||
| 	static const u_char table[256] = { | ||||
| 		 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, | ||||
| 		16, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22, 23, 20, 21, 21, 22, | ||||
| 		22, 23, 24, 25, 25, 26, 26, 27, 24, 25, 25, 26, 26, 27, 28, 29, | ||||
| 		29, 30, 30, 31, 32, 33, 33, 34, 34, 35, 36, 37, 37, 38, 38, 39, | ||||
| 		36, 37, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 40, 41, 41, 42, | ||||
| 		42, 43, 44, 45, 45, 46, 46, 47, 32, 33, 33, 34, 34, 35, 36, 37, | ||||
| 		37, 38, 38, 39, 36, 37, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, | ||||
| 		40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 46, 47, 48, 49, 49, 50, | ||||
| 		50, 51, 52, 53, 53, 54, 54, 55, 52, 53, 53, 54, 54, 55, 56, 57, | ||||
| 		57, 58, 58, 59, 56, 57, 57, 58, 58, 59, 60, 61, 61, 62, 62, 63, | ||||
| 		48, 49, 49, 50, 50, 51, 52, 53, 53, 54, 54, 55, 52, 53, 53, 54, | ||||
| 		54, 55, 56, 57, 57, 58, 58, 59, 56, 57, 57, 58, 58, 59, 60, 61, | ||||
| 		61, 62, 62, 63, 64, 65, 65, 66, 66, 67, 68, 69, 69, 70, 70, 71, | ||||
| 		68, 69, 69, 70, 70, 71, 72, 73, 73, 74, 74, 75, 72, 73, 73, 74, | ||||
| 		74, 75, 76, 77, 77, 78, 78, 79,  0,  0, 80, 80, 80, 81, 81, 81, | ||||
| 		82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87 | ||||
| 	}; | ||||
|  | ||||
| 	return (table[c]); | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								job.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								job.c
									
									
									
									
									
								
							| @@ -108,7 +108,7 @@ job_run(const char *cmd, struct session *s, | ||||
|  | ||||
| 	job->event = bufferevent_new(job->fd, NULL, job_write_callback, | ||||
| 	    job_callback, job); | ||||
| 	bufferevent_enable(job->event, EV_READ); | ||||
| 	bufferevent_enable(job->event, EV_READ|EV_WRITE); | ||||
|  | ||||
| 	log_debug("run job %p: %s, pid %ld", job, job->cmd, (long) job->pid); | ||||
| 	return (job); | ||||
|   | ||||
| @@ -413,7 +413,7 @@ const struct options_table_entry session_options_table[] = { | ||||
|  | ||||
| 	{ .name = "terminal-overrides", | ||||
| 	  .type = OPTIONS_TABLE_STRING, | ||||
| 	  .default_str = "*88col*:colors=88,*256col*:colors=256" | ||||
| 	  .default_str = "*256col*:colors=256" | ||||
| 	                 ",xterm*:XT:Ms=\\E]52;%p1%s;%p2%s\\007" | ||||
| 	                 ":Cc=\\E]12;%p1%s\\007:Cr=\\E]112\\007" | ||||
| 			 ":Cs=\\E[%p1%d q:Csr=\\E[2 q,screen*:XT" | ||||
|   | ||||
| @@ -488,6 +488,8 @@ screen_write_cursorup(struct screen_write_ctx *ctx, u_int ny) | ||||
| 		if (ny > s->cy - s->rupper) | ||||
| 			ny = s->cy - s->rupper; | ||||
| 	} | ||||
| 	if (s->cx == screen_size_x(s)) | ||||
| 	    s->cx--; | ||||
| 	if (ny == 0) | ||||
| 		return; | ||||
|  | ||||
| @@ -512,6 +514,8 @@ screen_write_cursordown(struct screen_write_ctx *ctx, u_int ny) | ||||
| 		if (ny > s->rlower - s->cy) | ||||
| 			ny = s->rlower - s->cy; | ||||
| 	} | ||||
| 	if (s->cx == screen_size_x(s)) | ||||
| 	    s->cx--; | ||||
| 	if (ny == 0) | ||||
| 		return; | ||||
|  | ||||
|   | ||||
| @@ -534,18 +534,8 @@ server_client_check_resize(struct window_pane *wp) | ||||
| 	ws.ws_col = wp->sx; | ||||
| 	ws.ws_row = wp->sy; | ||||
|  | ||||
| 	if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) { | ||||
| #ifdef __sun | ||||
| 		/* | ||||
| 		 * Some versions of Solaris apparently can return an error when | ||||
| 		 * resizing; don't know why this happens, can't reproduce on | ||||
| 		 * other platforms and ignoring it doesn't seem to cause any | ||||
| 		 * issues. | ||||
| 		 */ | ||||
| 		if (errno != EINVAL) | ||||
| #endif | ||||
| 	if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1) | ||||
| 		fatal("ioctl failed"); | ||||
| 	} | ||||
|  | ||||
| 	wp->flags &= ~PANE_RESIZE; | ||||
| } | ||||
| @@ -981,8 +971,6 @@ server_client_msg_identify( | ||||
| 		c->tty.flags |= TTY_UTF8; | ||||
| 	if (data->flags & IDENTIFY_256COLOURS) | ||||
| 		c->tty.term_flags |= TERM_256COLOURS; | ||||
| 	else if (data->flags & IDENTIFY_88COLOURS) | ||||
| 		c->tty.term_flags |= TERM_88COLOURS; | ||||
|  | ||||
| 	tty_resize(&c->tty); | ||||
|  | ||||
|   | ||||
							
								
								
									
										16
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								tmux.1
									
									
									
									
									
								
							| @@ -98,10 +98,6 @@ The options are as follows: | ||||
| Force | ||||
| .Nm | ||||
| to assume the terminal supports 256 colours. | ||||
| .It Fl 8 | ||||
| Like | ||||
| .Fl 2 , | ||||
| but indicates that the terminal supports 88 colours. | ||||
| .It Fl C | ||||
| Start in control mode. | ||||
| Given twice | ||||
| @@ -145,11 +141,12 @@ session created, and continues to process the rest of the configuration file. | ||||
| .It Fl L Ar socket-name | ||||
| .Nm | ||||
| stores the server socket in a directory under | ||||
| .Pa /tmp | ||||
| (or | ||||
| .Ev TMUX_TMPDIR , | ||||
| .Ev TMPDIR | ||||
| if set); | ||||
| the default socket is named | ||||
| if it is unset, or | ||||
| .Pa /tmp | ||||
| if both are unset. | ||||
| The default socket is named | ||||
| .Em default . | ||||
| This option allows a different socket name to be specified, allowing several | ||||
| independent | ||||
| @@ -2652,7 +2649,7 @@ The default is | ||||
| .Ql \ -_@ . | ||||
| .El | ||||
| .It Xo Ic set-window-option | ||||
| .Op Fl agqu | ||||
| .Op Fl agoqu | ||||
| .Op Fl t Ar target-window | ||||
| .Ar option Ar value | ||||
| .Xc | ||||
| @@ -2661,6 +2658,7 @@ Set a window option. | ||||
| The | ||||
| .Fl a , | ||||
| .Fl g , | ||||
| .Fl o , | ||||
| .Fl q | ||||
| and | ||||
| .Fl u | ||||
|   | ||||
							
								
								
									
										19
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								tmux.c
									
									
									
									
									
								
							| @@ -22,6 +22,8 @@ | ||||
| #include <errno.h> | ||||
| #include <event.h> | ||||
| #include <fcntl.h> | ||||
| #include <locale.h> | ||||
| #include <paths.h> | ||||
| #include <pwd.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| @@ -167,10 +169,12 @@ makesocketpath(const char *label) | ||||
| 	u_int		uid; | ||||
|  | ||||
| 	uid = getuid(); | ||||
| 	if ((s = getenv("TMPDIR")) == NULL || *s == '\0') | ||||
| 		xsnprintf(base, sizeof base, "%s/tmux-%u", _PATH_TMP, uid); | ||||
| 	else | ||||
| 	if ((s = getenv("TMUX_TMPDIR")) != NULL && *s != '\0') | ||||
| 		xsnprintf(base, sizeof base, "%s/", s); | ||||
| 	else if ((s = getenv("TMPDIR")) != NULL && *s != '\0') | ||||
| 		xsnprintf(base, sizeof base, "%s/tmux-%u", s, uid); | ||||
| 	else | ||||
| 		xsnprintf(base, sizeof base, "%s/tmux-%u", _PATH_TMP, uid); | ||||
|  | ||||
| 	if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST) | ||||
| 		return (NULL); | ||||
| @@ -244,18 +248,15 @@ main(int argc, char **argv) | ||||
| 	malloc_options = (char *) "AFGJPX"; | ||||
| #endif | ||||
|  | ||||
| 	setlocale(LC_TIME, ""); | ||||
|  | ||||
| 	quiet = flags = 0; | ||||
| 	label = path = NULL; | ||||
| 	login_shell = (**argv == '-'); | ||||
| 	while ((opt = getopt(argc, argv, "28c:Cdf:lL:qS:uUvV")) != -1) { | ||||
| 	while ((opt = getopt(argc, argv, "2c:Cdf:lL:qS:uUv")) != -1) { | ||||
| 		switch (opt) { | ||||
| 		case '2': | ||||
| 			flags |= IDENTIFY_256COLOURS; | ||||
| 			flags &= ~IDENTIFY_88COLOURS; | ||||
| 			break; | ||||
| 		case '8': | ||||
| 			flags |= IDENTIFY_88COLOURS; | ||||
| 			flags &= ~IDENTIFY_256COLOURS; | ||||
| 			break; | ||||
| 		case 'c': | ||||
| 			free(shell_cmd); | ||||
|   | ||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -477,7 +477,7 @@ struct msg_identify_data { | ||||
|  | ||||
| #define IDENTIFY_UTF8 0x1 | ||||
| #define IDENTIFY_256COLOURS 0x2 | ||||
| #define IDENTIFY_88COLOURS 0x4 | ||||
| /* 0x4 unused */ | ||||
| #define IDENTIFY_CONTROL 0x8 | ||||
| #define IDENTIFY_TERMIOS 0x10 | ||||
| 	int		flags; | ||||
| @@ -1137,8 +1137,7 @@ struct tty_term { | ||||
| 	struct tty_code	 codes[NTTYCODE]; | ||||
|  | ||||
| #define TERM_256COLOURS 0x1 | ||||
| #define TERM_88COLOURS 0x2 | ||||
| #define TERM_EARLYWRAP 0x4 | ||||
| #define TERM_EARLYWRAP 0x2 | ||||
| 	int		 flags; | ||||
|  | ||||
| 	LIST_ENTRY(tty_term) entry; | ||||
| @@ -1982,7 +1981,6 @@ void	 colour_set_bg(struct grid_cell *, int); | ||||
| const char *colour_tostring(int); | ||||
| int	 colour_fromstring(const char *); | ||||
| u_char	 colour_256to16(u_char); | ||||
| u_char	 colour_256to88(u_char); | ||||
|  | ||||
| /* attributes.c */ | ||||
| const char *attributes_tostring(u_char); | ||||
|   | ||||
| @@ -410,11 +410,9 @@ tty_term_find(char *name, int fd, const char *overrides, char **cause) | ||||
| 		goto error; | ||||
| 	} | ||||
|  | ||||
| 	/* Figure out if we have 256 or 88 colours. */ | ||||
| 	/* Figure out if we have 256. */ | ||||
| 	if (tty_term_number(term, TTYC_COLORS) == 256) | ||||
| 		term->flags |= TERM_256COLOURS; | ||||
| 	if (tty_term_number(term, TTYC_COLORS) == 88) | ||||
| 		term->flags |= TERM_88COLOURS; | ||||
|  | ||||
| 	/* | ||||
| 	 * Terminals without xenl (eat newline glitch) wrap at at $COLUMNS - 1 | ||||
|   | ||||
							
								
								
									
										36
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								tty.c
									
									
									
									
									
								
							| @@ -35,7 +35,6 @@ void	tty_read_callback(struct bufferevent *, void *); | ||||
| void	tty_error_callback(struct bufferevent *, short, void *); | ||||
|  | ||||
| int	tty_try_256(struct tty *, u_char, const char *); | ||||
| int	tty_try_88(struct tty *, u_char, const char *); | ||||
|  | ||||
| void	tty_colours(struct tty *, const struct grid_cell *); | ||||
| void	tty_check_fg(struct tty *, struct grid_cell *); | ||||
| @@ -221,7 +220,7 @@ tty_start_tty(struct tty *tty) | ||||
| 		tty_puts(tty, "\033[?1000l\033[?1006l\033[?1005l"); | ||||
|  | ||||
| 	if (tty_term_has(tty->term, TTYC_XT)) | ||||
| 		tty_puts(tty, "\033[c\033[>4;1m\033[?1004h"); | ||||
| 		tty_puts(tty, "\033[c\033[>4;1m\033[?1004h\033[m"); | ||||
|  | ||||
| 	tty->cx = UINT_MAX; | ||||
| 	tty->cy = UINT_MAX; | ||||
| @@ -284,7 +283,7 @@ tty_stop_tty(struct tty *tty) | ||||
| 		tty_raw(tty, "\033[?1000l\033[?1006l\033[?1005l"); | ||||
|  | ||||
| 	if (tty_term_has(tty->term, TTYC_XT)) | ||||
| 		tty_raw(tty, "\033[>4m\033[?1004l"); | ||||
| 		tty_raw(tty, "\033[>4m\033[?1004l\033[m"); | ||||
|  | ||||
| 	tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP)); | ||||
|  | ||||
| @@ -1446,9 +1445,7 @@ tty_check_fg(struct tty *tty, struct grid_cell *gc) | ||||
| 	/* Is this a 256-colour colour? */ | ||||
| 	if (gc->flags & GRID_FLAG_FG256) { | ||||
| 		/* And not a 256 colour mode? */ | ||||
| 		if (!(tty->term->flags & TERM_88COLOURS) && | ||||
| 		    !(tty->term_flags & TERM_88COLOURS) && | ||||
| 		    !(tty->term->flags & TERM_256COLOURS) && | ||||
| 		if (!(tty->term->flags & TERM_256COLOURS) && | ||||
| 		    !(tty->term_flags & TERM_256COLOURS)) { | ||||
| 			gc->fg = colour_256to16(gc->fg); | ||||
| 			if (gc->fg & 8) { | ||||
| @@ -1481,9 +1478,7 @@ tty_check_bg(struct tty *tty, struct grid_cell *gc) | ||||
| 		 * palette. Bold background doesn't exist portably, so just | ||||
| 		 * discard the bold bit if set. | ||||
| 		 */ | ||||
| 		if (!(tty->term->flags & TERM_88COLOURS) && | ||||
| 		    !(tty->term_flags & TERM_88COLOURS) && | ||||
| 		    !(tty->term->flags & TERM_256COLOURS) && | ||||
| 		if (!(tty->term->flags & TERM_256COLOURS) && | ||||
| 		    !(tty->term_flags & TERM_256COLOURS)) { | ||||
| 			gc->bg = colour_256to16(gc->bg); | ||||
| 			if (gc->bg & 8) | ||||
| @@ -1511,11 +1506,9 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) | ||||
|  | ||||
| 	/* Is this a 256-colour colour? */ | ||||
| 	if (gc->flags & GRID_FLAG_FG256) { | ||||
| 		/* Try as 256 colours or translating to 88. */ | ||||
| 		/* Try as 256 colours. */ | ||||
| 		if (tty_try_256(tty, fg, "38") == 0) | ||||
| 			goto save_fg; | ||||
| 		if (tty_try_88(tty, fg, "38") == 0) | ||||
| 			goto save_fg; | ||||
| 		/* Else already handled by tty_check_fg. */ | ||||
| 		return; | ||||
| 	} | ||||
| @@ -1546,11 +1539,9 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) | ||||
|  | ||||
| 	/* Is this a 256-colour colour? */ | ||||
| 	if (gc->flags & GRID_FLAG_BG256) { | ||||
| 		/* Try as 256 colours or translating to 88. */ | ||||
| 		/* Try as 256 colours. */ | ||||
| 		if (tty_try_256(tty, bg, "48") == 0) | ||||
| 			goto save_bg; | ||||
| 		if (tty_try_88(tty, bg, "48") == 0) | ||||
| 			goto save_bg; | ||||
| 		/* Else already handled by tty_check_bg. */ | ||||
| 		return; | ||||
| 	} | ||||
| @@ -1591,21 +1582,6 @@ tty_try_256(struct tty *tty, u_char colour, const char *type) | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| int | ||||
| tty_try_88(struct tty *tty, u_char colour, const char *type) | ||||
| { | ||||
| 	char	s[32]; | ||||
|  | ||||
| 	if (!(tty->term->flags & TERM_88COLOURS) && | ||||
| 	    !(tty->term_flags & TERM_88COLOURS)) | ||||
| 		return (-1); | ||||
| 	colour = colour_256to88(colour); | ||||
|  | ||||
| 	xsnprintf(s, sizeof s, "\033[%s;5;%hhum", type, colour); | ||||
| 	tty_puts(tty, s); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| void | ||||
| tty_bell(struct tty *tty) | ||||
| { | ||||
|   | ||||
							
								
								
									
										1
									
								
								utf8.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								utf8.c
									
									
									
									
									
								
							| @@ -173,7 +173,6 @@ struct utf8_width_entry utf8_width_table[] = { | ||||
| 	{ 0x30000, 0x3fffd, 2, NULL, NULL }, | ||||
| 	{ 0x00711, 0x00711, 0, NULL, NULL }, | ||||
| 	{ 0x0fe00, 0x0fe0f, 0, NULL, NULL }, | ||||
| 	{ 0x01160, 0x011ff, 0, NULL, NULL }, | ||||
| 	{ 0x0180b, 0x0180d, 0, NULL, NULL }, | ||||
| 	{ 0x10a3f, 0x10a3f, 0, NULL, NULL }, | ||||
| 	{ 0x00981, 0x00981, 0, NULL, NULL }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Thomas Adam
					Thomas Adam