mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Merge branch 'obsd-master' into master
This commit is contained in:
		@@ -881,6 +881,13 @@ const struct options_table_entry options_table[] = {
 | 
			
		||||
	  .text = "Style of the marked line in copy mode."
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "fill-character",
 | 
			
		||||
	  .type = OPTIONS_TABLE_STRING,
 | 
			
		||||
	  .scope = OPTIONS_TABLE_WINDOW,
 | 
			
		||||
	  .default_str = "",
 | 
			
		||||
	  .text = "Character used to fill unused parts of window."
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "main-pane-height",
 | 
			
		||||
	  .type = OPTIONS_TABLE_STRING,
 | 
			
		||||
	  .scope = OPTIONS_TABLE_WINDOW,
 | 
			
		||||
 
 | 
			
		||||
@@ -1108,6 +1108,8 @@ options_push_changes(const char *name)
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	int			 c;
 | 
			
		||||
 | 
			
		||||
	log_debug("%s: %s", __func__, name);
 | 
			
		||||
 | 
			
		||||
	if (strcmp(name, "automatic-rename") == 0) {
 | 
			
		||||
		RB_FOREACH(w, windows, &windows) {
 | 
			
		||||
			if (w->active == NULL)
 | 
			
		||||
@@ -1130,6 +1132,10 @@ options_push_changes(const char *name)
 | 
			
		||||
			    &wp->screen->default_mode);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (strcmp(name, "fill-character") == 0) {
 | 
			
		||||
		RB_FOREACH(w, windows, &windows)
 | 
			
		||||
			window_set_fill_character(w);
 | 
			
		||||
	}
 | 
			
		||||
	if (strcmp(name, "key-table") == 0) {
 | 
			
		||||
		TAILQ_FOREACH(loop, &clients, entry)
 | 
			
		||||
			server_client_set_key_table(loop, NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -47,11 +47,16 @@ enum screen_redraw_border_type {
 | 
			
		||||
 | 
			
		||||
/* Get cell border character. */
 | 
			
		||||
static void
 | 
			
		||||
screen_redraw_border_set(struct window_pane *wp, enum pane_lines pane_lines,
 | 
			
		||||
    int cell_type, struct grid_cell *gc)
 | 
			
		||||
screen_redraw_border_set(struct window *w, struct window_pane *wp,
 | 
			
		||||
    enum pane_lines pane_lines, int cell_type, struct grid_cell *gc)
 | 
			
		||||
{
 | 
			
		||||
	u_int	idx;
 | 
			
		||||
 | 
			
		||||
	if (cell_type == CELL_OUTSIDE && w->fill_character != NULL) {
 | 
			
		||||
		utf8_copy(&gc->data, &w->fill_character[0]);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch (pane_lines) {
 | 
			
		||||
	case PANE_LINES_NUMBER:
 | 
			
		||||
		if (cell_type == CELL_OUTSIDE) {
 | 
			
		||||
@@ -409,7 +414,7 @@ screen_redraw_make_pane_status(struct client *c, struct window_pane *wp,
 | 
			
		||||
		else
 | 
			
		||||
			py = wp->yoff + wp->sy;
 | 
			
		||||
		cell_type = screen_redraw_type_of_cell(c, px, py, pane_status);
 | 
			
		||||
		screen_redraw_border_set(wp, pane_lines, cell_type, &gc);
 | 
			
		||||
		screen_redraw_border_set(w, wp, pane_lines, cell_type, &gc);
 | 
			
		||||
		screen_write_cell(&ctx, &gc);
 | 
			
		||||
	}
 | 
			
		||||
	gc.attr &= ~GRID_ATTR_CHARSET;
 | 
			
		||||
@@ -690,7 +695,7 @@ screen_redraw_draw_borders_cell(struct screen_redraw_ctx *ctx, u_int i, u_int j)
 | 
			
		||||
		    screen_redraw_check_is(x, y, pane_status, marked_pane.wp))
 | 
			
		||||
			gc.attr ^= GRID_ATTR_REVERSE;
 | 
			
		||||
	}
 | 
			
		||||
	screen_redraw_border_set(wp, ctx->pane_lines, cell_type, &gc);
 | 
			
		||||
	screen_redraw_border_set(w, wp, ctx->pane_lines, cell_type, &gc);
 | 
			
		||||
 | 
			
		||||
	if (cell_type == CELL_TOPBOTTOM &&
 | 
			
		||||
	    (c->flags & CLIENT_UTF8) &&
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.1
									
									
									
									
									
								
							@@ -4117,6 +4117,9 @@ Set clock colour.
 | 
			
		||||
.Xc
 | 
			
		||||
Set clock hour format.
 | 
			
		||||
.Pp
 | 
			
		||||
.It Ic fill-character Ar character
 | 
			
		||||
Set the character used to fill areas of the terminal unused by a window.
 | 
			
		||||
.Pp
 | 
			
		||||
.It Ic main-pane-height Ar height
 | 
			
		||||
.It Ic main-pane-width Ar width
 | 
			
		||||
Set the width or height of the main (left or top) pane in the
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1070,40 +1070,41 @@ RB_HEAD(window_pane_tree, window_pane);
 | 
			
		||||
 | 
			
		||||
/* Window structure. */
 | 
			
		||||
struct window {
 | 
			
		||||
	u_int		 id;
 | 
			
		||||
	void		*latest;
 | 
			
		||||
	u_int			 id;
 | 
			
		||||
	void			*latest;
 | 
			
		||||
 | 
			
		||||
	char		*name;
 | 
			
		||||
	struct event	 name_event;
 | 
			
		||||
	struct timeval	 name_time;
 | 
			
		||||
	char			*name;
 | 
			
		||||
	struct event		 name_event;
 | 
			
		||||
	struct timeval		 name_time;
 | 
			
		||||
 | 
			
		||||
	struct event	 alerts_timer;
 | 
			
		||||
	struct event	 offset_timer;
 | 
			
		||||
	struct event		 alerts_timer;
 | 
			
		||||
	struct event		 offset_timer;
 | 
			
		||||
 | 
			
		||||
	struct timeval	 activity_time;
 | 
			
		||||
	struct timeval		 activity_time;
 | 
			
		||||
 | 
			
		||||
	struct window_pane *active;
 | 
			
		||||
	struct window_pane *last;
 | 
			
		||||
	struct window_panes panes;
 | 
			
		||||
	struct window_pane	*active;
 | 
			
		||||
	struct window_pane	*last;
 | 
			
		||||
	struct window_panes	 panes;
 | 
			
		||||
 | 
			
		||||
	int		 lastlayout;
 | 
			
		||||
	struct layout_cell *layout_root;
 | 
			
		||||
	struct layout_cell *saved_layout_root;
 | 
			
		||||
	char		*old_layout;
 | 
			
		||||
	int			 lastlayout;
 | 
			
		||||
	struct layout_cell	*layout_root;
 | 
			
		||||
	struct layout_cell	*saved_layout_root;
 | 
			
		||||
	char			*old_layout;
 | 
			
		||||
 | 
			
		||||
	u_int		 sx;
 | 
			
		||||
	u_int		 sy;
 | 
			
		||||
	u_int		 manual_sx;
 | 
			
		||||
	u_int		 manual_sy;
 | 
			
		||||
	u_int		 xpixel;
 | 
			
		||||
	u_int		 ypixel;
 | 
			
		||||
	u_int			 sx;
 | 
			
		||||
	u_int			 sy;
 | 
			
		||||
	u_int			 manual_sx;
 | 
			
		||||
	u_int			 manual_sy;
 | 
			
		||||
	u_int			 xpixel;
 | 
			
		||||
	u_int			 ypixel;
 | 
			
		||||
 | 
			
		||||
	u_int		 new_sx;
 | 
			
		||||
	u_int		 new_sy;
 | 
			
		||||
	u_int		 new_xpixel;
 | 
			
		||||
	u_int		 new_ypixel;
 | 
			
		||||
	u_int			 new_sx;
 | 
			
		||||
	u_int			 new_sy;
 | 
			
		||||
	u_int			 new_xpixel;
 | 
			
		||||
	u_int			 new_ypixel;
 | 
			
		||||
 | 
			
		||||
	int		 flags;
 | 
			
		||||
	struct utf8_data	*fill_character;
 | 
			
		||||
	int			 flags;
 | 
			
		||||
#define WINDOW_BELL 0x1
 | 
			
		||||
#define WINDOW_ACTIVITY 0x2
 | 
			
		||||
#define WINDOW_SILENCE 0x4
 | 
			
		||||
@@ -1112,15 +1113,15 @@ struct window {
 | 
			
		||||
#define WINDOW_RESIZE 0x20
 | 
			
		||||
#define WINDOW_ALERTFLAGS (WINDOW_BELL|WINDOW_ACTIVITY|WINDOW_SILENCE)
 | 
			
		||||
 | 
			
		||||
	int		 alerts_queued;
 | 
			
		||||
	TAILQ_ENTRY(window) alerts_entry;
 | 
			
		||||
	int			 alerts_queued;
 | 
			
		||||
	TAILQ_ENTRY(window)	 alerts_entry;
 | 
			
		||||
 | 
			
		||||
	struct options	*options;
 | 
			
		||||
	struct options		*options;
 | 
			
		||||
 | 
			
		||||
	u_int		 references;
 | 
			
		||||
	TAILQ_HEAD(, winlink) winlinks;
 | 
			
		||||
	u_int			 references;
 | 
			
		||||
	TAILQ_HEAD(, winlink)	 winlinks;
 | 
			
		||||
 | 
			
		||||
	RB_ENTRY(window) entry;
 | 
			
		||||
	RB_ENTRY(window)	 entry;
 | 
			
		||||
};
 | 
			
		||||
RB_HEAD(windows, window);
 | 
			
		||||
 | 
			
		||||
@@ -2977,6 +2978,7 @@ void		*window_pane_get_new_data(struct window_pane *,
 | 
			
		||||
		     struct window_pane_offset *, size_t *);
 | 
			
		||||
void		 window_pane_update_used_data(struct window_pane *,
 | 
			
		||||
		     struct window_pane_offset *, size_t);
 | 
			
		||||
void		 window_set_fill_character(struct window *);
 | 
			
		||||
 | 
			
		||||
/* layout.c */
 | 
			
		||||
u_int		 layout_count_cells(struct layout_cell *);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								window.c
									
									
									
									
									
								
							@@ -329,6 +329,7 @@ window_create(u_int sx, u_int sy, u_int xpixel, u_int ypixel)
 | 
			
		||||
	w->id = next_window_id++;
 | 
			
		||||
	RB_INSERT(windows, &windows, w);
 | 
			
		||||
 | 
			
		||||
	window_set_fill_character(w);
 | 
			
		||||
	window_update_activity(w);
 | 
			
		||||
 | 
			
		||||
	log_debug("%s: @%u create %ux%u (%ux%u)", __func__, w->id, sx, sy,
 | 
			
		||||
@@ -360,6 +361,7 @@ window_destroy(struct window *w)
 | 
			
		||||
		event_del(&w->offset_timer);
 | 
			
		||||
 | 
			
		||||
	options_free(w->options);
 | 
			
		||||
	free(w->fill_character);
 | 
			
		||||
 | 
			
		||||
	free(w->name);
 | 
			
		||||
	free(w);
 | 
			
		||||
@@ -1599,3 +1601,20 @@ window_pane_update_used_data(struct window_pane *wp,
 | 
			
		||||
		size = EVBUFFER_LENGTH(wp->event->input) - used;
 | 
			
		||||
	wpo->used += size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_set_fill_character(struct window *w)
 | 
			
		||||
{
 | 
			
		||||
	const char		*value;
 | 
			
		||||
	struct utf8_data	*ud;
 | 
			
		||||
 | 
			
		||||
	free(w->fill_character);
 | 
			
		||||
	w->fill_character = NULL;
 | 
			
		||||
 | 
			
		||||
	value = options_get_string(w->options, "fill-character");
 | 
			
		||||
	if (*value != '\0' && utf8_isvalid(value)) {
 | 
			
		||||
		ud = utf8_fromcstr(value);
 | 
			
		||||
		if (ud != NULL && ud[0].width == 1)
 | 
			
		||||
			w->fill_character = ud;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user