mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Add prompt-cursor-colour and prompt-cursor-style to set the style of the
cursor in the command prompt and remove the emulated cursor, from Alexander Arch in GitHub issue 4170.
This commit is contained in:
		| @@ -208,6 +208,7 @@ const struct options_name_map options_other_names[] = { | |||||||
| 	{ "display-panes-active-color", "display-panes-active-colour" }, | 	{ "display-panes-active-color", "display-panes-active-colour" }, | ||||||
| 	{ "clock-mode-color", "clock-mode-colour" }, | 	{ "clock-mode-color", "clock-mode-colour" }, | ||||||
| 	{ "cursor-color", "cursor-colour" }, | 	{ "cursor-color", "cursor-colour" }, | ||||||
|  | 	{ "prompt-cursor-color", "prompt-cursor-colour" }, | ||||||
| 	{ "pane-colors", "pane-colours" }, | 	{ "pane-colors", "pane-colours" }, | ||||||
| 	{ NULL, NULL } | 	{ NULL, NULL } | ||||||
| }; | }; | ||||||
| @@ -832,6 +833,21 @@ const struct options_table_entry options_table[] = { | |||||||
| 	  .text = "Style of the status line." | 	  .text = "Style of the status line." | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
|  | 	{ .name = "prompt-cursor-colour", | ||||||
|  | 	  .type = OPTIONS_TABLE_COLOUR, | ||||||
|  | 	  .scope = OPTIONS_TABLE_SESSION, | ||||||
|  | 	  .default_num = 6, | ||||||
|  | 	  .text = "Colour of the cursor when in the command prompt." | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	{ .name = "prompt-cursor-style", | ||||||
|  | 	  .type = OPTIONS_TABLE_CHOICE, | ||||||
|  | 	  .scope = OPTIONS_TABLE_SESSION, | ||||||
|  | 	  .choices = options_table_cursor_style_list, | ||||||
|  | 	  .default_num = 0, | ||||||
|  | 	  .text = "Style of the cursor when in the command prompt." | ||||||
|  | 	}, | ||||||
|  |  | ||||||
| 	{ .name = "update-environment", | 	{ .name = "update-environment", | ||||||
| 	  .type = OPTIONS_TABLE_STRING, | 	  .type = OPTIONS_TABLE_STRING, | ||||||
| 	  .scope = OPTIONS_TABLE_SESSION, | 	  .scope = OPTIONS_TABLE_SESSION, | ||||||
|   | |||||||
| @@ -2473,7 +2473,7 @@ server_client_reset_state(struct client *c) | |||||||
|  |  | ||||||
| 	/* Move cursor to pane cursor and offset. */ | 	/* Move cursor to pane cursor and offset. */ | ||||||
| 	if (c->prompt_string != NULL) { | 	if (c->prompt_string != NULL) { | ||||||
| 		n = options_get_number(c->session->options, "status-position"); | 		n = options_get_number(oo, "status-position"); | ||||||
| 		if (n == 0) | 		if (n == 0) | ||||||
| 			cy = 0; | 			cy = 0; | ||||||
| 		else { | 		else { | ||||||
| @@ -2484,12 +2484,26 @@ server_client_reset_state(struct client *c) | |||||||
| 				cy = tty->sy - n; | 				cy = tty->sy - n; | ||||||
| 		} | 		} | ||||||
| 		cx = c->prompt_cursor; | 		cx = c->prompt_cursor; | ||||||
| 		mode &= ~MODE_CURSOR; |  | ||||||
| 	} else if (c->overlay_draw == NULL) { | 		n = options_get_number(oo, "prompt-cursor-colour"); | ||||||
|  | 		s->default_ccolour = n; | ||||||
|  | 		n = options_get_number(oo, "prompt-cursor-style"); | ||||||
|  | 		screen_set_cursor_style(n, &s->default_cstyle, | ||||||
|  | 		    &s->default_mode); | ||||||
|  | 	} else { | ||||||
|  | 		n = options_get_number(wp->options, "cursor-colour"); | ||||||
|  | 		s->default_ccolour = n; | ||||||
|  | 		n = options_get_number(wp->options, "cursor-style"); | ||||||
|  | 		screen_set_cursor_style(n, &s->default_cstyle, | ||||||
|  | 		    &s->default_mode); | ||||||
|  |  | ||||||
|  | 		if (c->overlay_draw == NULL) { | ||||||
| 			cursor = 0; | 			cursor = 0; | ||||||
| 			tty_window_offset(tty, &ox, &oy, &sx, &sy); | 			tty_window_offset(tty, &ox, &oy, &sx, &sy); | ||||||
| 		if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && | 			if (wp->xoff + s->cx >= ox && | ||||||
| 		    wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { | 			    wp->xoff + s->cx <= ox + sx && | ||||||
|  | 			    wp->yoff + s->cy >= oy && | ||||||
|  | 			    wp->yoff + s->cy <= oy + sy) { | ||||||
| 				cursor = 1; | 				cursor = 1; | ||||||
|  |  | ||||||
| 				cx = wp->xoff + s->cx - ox; | 				cx = wp->xoff + s->cx - ox; | ||||||
| @@ -2501,6 +2515,7 @@ server_client_reset_state(struct client *c) | |||||||
| 			if (!cursor) | 			if (!cursor) | ||||||
| 				mode &= ~MODE_CURSOR; | 				mode &= ~MODE_CURSOR; | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	log_debug("%s: cursor to %u,%u", __func__, cx, cy); | 	log_debug("%s: cursor to %u,%u", __func__, cx, cy); | ||||||
| 	tty_cursor(tty, cx, cy); | 	tty_cursor(tty, cx, cy); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								status.c
									
									
									
									
									
								
							| @@ -660,7 +660,7 @@ status_prompt_set(struct client *c, struct cmd_find_state *fs, | |||||||
| 	c->prompt_mode = PROMPT_ENTRY; | 	c->prompt_mode = PROMPT_ENTRY; | ||||||
|  |  | ||||||
| 	if (~flags & PROMPT_INCREMENTAL) | 	if (~flags & PROMPT_INCREMENTAL) | ||||||
| 		c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); | 		c->tty.flags |= TTY_FREEZE; | ||||||
| 	c->flags |= CLIENT_REDRAWSTATUS; | 	c->flags |= CLIENT_REDRAWSTATUS; | ||||||
|  |  | ||||||
| 	if (flags & PROMPT_INCREMENTAL) | 	if (flags & PROMPT_INCREMENTAL) | ||||||
| @@ -738,7 +738,7 @@ status_prompt_redraw(struct client *c) | |||||||
| 	struct screen		 old_screen; | 	struct screen		 old_screen; | ||||||
| 	u_int			 i, lines, offset, left, start, width; | 	u_int			 i, lines, offset, left, start, width; | ||||||
| 	u_int			 pcursor, pwidth, promptline; | 	u_int			 pcursor, pwidth, promptline; | ||||||
| 	struct grid_cell	 gc, cursorgc; | 	struct grid_cell	 gc; | ||||||
| 	struct format_tree	*ft; | 	struct format_tree	*ft; | ||||||
|  |  | ||||||
| 	if (c->tty.sx == 0 || c->tty.sy == 0) | 	if (c->tty.sx == 0 || c->tty.sy == 0) | ||||||
| @@ -761,9 +761,6 @@ status_prompt_redraw(struct client *c) | |||||||
| 		style_apply(&gc, s->options, "message-style", ft); | 		style_apply(&gc, s->options, "message-style", ft); | ||||||
| 	format_free(ft); | 	format_free(ft); | ||||||
|  |  | ||||||
| 	memcpy(&cursorgc, &gc, sizeof cursorgc); |  | ||||||
| 	cursorgc.attr ^= GRID_ATTR_REVERSE; |  | ||||||
|  |  | ||||||
| 	start = format_width(c->prompt_string); | 	start = format_width(c->prompt_string); | ||||||
| 	if (start > c->tty.sx) | 	if (start > c->tty.sx) | ||||||
| 		start = c->tty.sx; | 		start = c->tty.sx; | ||||||
| @@ -808,16 +805,9 @@ status_prompt_redraw(struct client *c) | |||||||
| 		if (width > offset + pwidth) | 		if (width > offset + pwidth) | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| 		if (i != c->prompt_index) { |  | ||||||
| 		utf8_copy(&gc.data, &c->prompt_buffer[i]); | 		utf8_copy(&gc.data, &c->prompt_buffer[i]); | ||||||
| 		screen_write_cell(&ctx, &gc); | 		screen_write_cell(&ctx, &gc); | ||||||
| 		} else { |  | ||||||
| 			utf8_copy(&cursorgc.data, &c->prompt_buffer[i]); |  | ||||||
| 			screen_write_cell(&ctx, &cursorgc); |  | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
| 	if (sl->active->cx < screen_size_x(sl->active) && c->prompt_index >= i) |  | ||||||
| 		screen_write_putc(&ctx, &cursorgc, ' '); |  | ||||||
|  |  | ||||||
| finished: | finished: | ||||||
| 	screen_write_stop(&ctx); | 	screen_write_stop(&ctx); | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								tmux.1
									
									
									
									
									
								
							| @@ -4550,6 +4550,13 @@ waits after | |||||||
| .Ic prefix | .Ic prefix | ||||||
| is input before dismissing it. | is input before dismissing it. | ||||||
| Can be set to zero to disable any timeout. | Can be set to zero to disable any timeout. | ||||||
|  | .It Ic prompt-cursor-colour Ar colour | ||||||
|  | Set the colour of the cursor in the command prompt. | ||||||
|  | .It Ic prompt-cursor-style Ar style | ||||||
|  | Set the style of the cursor in the command prompt. | ||||||
|  | See the | ||||||
|  | .Ic cursor-style | ||||||
|  | options for available styles. | ||||||
| .It Xo Ic renumber-windows | .It Xo Ic renumber-windows | ||||||
| .Op Ic on | off | .Op Ic on | off | ||||||
| .Xc | .Xc | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm