mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	New session option, status-utf8, to control the interpretation of top-bit-set
characters in status-left and status-right (if on, they are treated as UTF-8; otherwise passed through).
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-set-option.c,v 1.60 2009-03-21 12:44:06 nicm Exp $ */
 | 
			
		||||
/* $OpenBSD: cmd-set-option.c,v 1.2 2009/06/03 16:54:26 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -73,6 +73,7 @@ const struct set_option_entry set_option_table[NSETOPTION] = {
 | 
			
		||||
	{ "status-left-length", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL },
 | 
			
		||||
	{ "status-right", SET_OPTION_STRING, 0, 0, NULL },
 | 
			
		||||
	{ "status-right-length", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL },
 | 
			
		||||
	{ "status-utf8", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $OpenBSD: screen-write.c,v 1.2 2009/06/03 16:05:46 nicm Exp $ */
 | 
			
		||||
/* $OpenBSD: screen-write.c,v 1.3 2009/06/03 16:54:26 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -53,8 +53,8 @@ screen_write_putc(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Calculate string length. */
 | 
			
		||||
size_t printflike1
 | 
			
		||||
screen_write_strlen(const char *fmt, ...)
 | 
			
		||||
size_t printflike2
 | 
			
		||||
screen_write_strlen(int utf8flag, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list	ap;
 | 
			
		||||
	char   *msg;
 | 
			
		||||
@@ -67,7 +67,7 @@ screen_write_strlen(const char *fmt, ...)
 | 
			
		||||
 | 
			
		||||
	ptr = msg;
 | 
			
		||||
	while (*ptr != '\0') {
 | 
			
		||||
		if (*ptr > 0x7f) {	/* Assume this is UTF-8. */
 | 
			
		||||
		if (utf8flag && *ptr > 0x7f) {
 | 
			
		||||
			memset(utf8buf, 0xff, sizeof utf8buf);
 | 
			
		||||
 | 
			
		||||
			left = strlen(ptr);
 | 
			
		||||
@@ -94,7 +94,7 @@ screen_write_strlen(const char *fmt, ...)
 | 
			
		||||
	return (size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Write string. */
 | 
			
		||||
/* Write simple string (no UTF-8 or maximum length). */
 | 
			
		||||
void printflike3
 | 
			
		||||
screen_write_puts(
 | 
			
		||||
    struct screen_write_ctx *ctx, struct grid_cell *gc, const char *fmt, ...)
 | 
			
		||||
@@ -102,25 +102,25 @@ screen_write_puts(
 | 
			
		||||
	va_list	ap;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	screen_write_vnputs(ctx, -1, gc, fmt, ap);
 | 
			
		||||
	screen_write_vnputs(ctx, -1, gc, 0, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Write string with length limit (-1 for unlimited). */
 | 
			
		||||
void printflike4
 | 
			
		||||
void printflike5
 | 
			
		||||
screen_write_nputs(struct screen_write_ctx *ctx,
 | 
			
		||||
    ssize_t maxlen, struct grid_cell *gc, const char *fmt, ...)
 | 
			
		||||
    ssize_t maxlen, struct grid_cell *gc, int utf8flag, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list	ap;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	screen_write_vnputs(ctx, maxlen, gc, fmt, ap);
 | 
			
		||||
	screen_write_vnputs(ctx, maxlen, gc, utf8flag, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
screen_write_vnputs(struct screen_write_ctx *ctx,
 | 
			
		||||
    ssize_t maxlen, struct grid_cell *gc, const char *fmt, va_list ap)
 | 
			
		||||
screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
 | 
			
		||||
    struct grid_cell *gc, int utf8flag, const char *fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	char   *msg;
 | 
			
		||||
	u_char *ptr, utf8buf[4];
 | 
			
		||||
@@ -131,7 +131,7 @@ screen_write_vnputs(struct screen_write_ctx *ctx,
 | 
			
		||||
 | 
			
		||||
	ptr = msg;
 | 
			
		||||
	while (*ptr != '\0') {
 | 
			
		||||
		if (*ptr > 0x7f) {	/* Assume this is UTF-8. */
 | 
			
		||||
		if (utf8flag && *ptr > 0x7f) {
 | 
			
		||||
			memset(utf8buf, 0xff, sizeof utf8buf);
 | 
			
		||||
 | 
			
		||||
			left = strlen(ptr);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								status.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $OpenBSD: status.c,v 1.2 2009/06/03 16:05:46 nicm Exp $ */
 | 
			
		||||
/* $OpenBSD: status.c,v 1.3 2009/06/03 16:54:26 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -50,7 +50,7 @@ status_redraw(struct client *c)
 | 
			
		||||
	size_t				llen, llen2, rlen, rlen2, offset;
 | 
			
		||||
	size_t				xx, yy, sy, size, start, width;
 | 
			
		||||
	struct grid_cell	        stdgc, gc;
 | 
			
		||||
	int				larrow, rarrow;
 | 
			
		||||
	int				larrow, rarrow, utf8flag;
 | 
			
		||||
 | 
			
		||||
	left = right = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -74,18 +74,21 @@ status_redraw(struct client *c)
 | 
			
		||||
	if (yy == 0)
 | 
			
		||||
		goto blank;
 | 
			
		||||
 | 
			
		||||
	/* Caring about UTF-8 in status line? */
 | 
			
		||||
	utf8flag = options_get_number(&s->options, "status-utf8");
 | 
			
		||||
 | 
			
		||||
	/* Work out the left and right strings. */
 | 
			
		||||
	left = status_replace(s, options_get_string(
 | 
			
		||||
	    &s->options, "status-left"), c->status_timer.tv_sec);
 | 
			
		||||
	llen = options_get_number(&s->options, "status-left-length");
 | 
			
		||||
	llen2 = screen_write_strlen("%s", left);
 | 
			
		||||
	llen2 = screen_write_strlen(utf8flag, "%s", left);
 | 
			
		||||
	if (llen2 < llen)
 | 
			
		||||
		llen = llen2;
 | 
			
		||||
 | 
			
		||||
	right = status_replace(s, options_get_string(
 | 
			
		||||
	    &s->options, "status-right"), c->status_timer.tv_sec);
 | 
			
		||||
	rlen = options_get_number(&s->options, "status-right-length");
 | 
			
		||||
	rlen2 = screen_write_strlen("%s", right);
 | 
			
		||||
	rlen2 = screen_write_strlen(utf8flag, "%s", right);
 | 
			
		||||
	if (rlen2 < rlen)
 | 
			
		||||
		rlen = rlen2;
 | 
			
		||||
	right[rlen] = '\0';
 | 
			
		||||
@@ -164,7 +167,8 @@ draw:
 | 
			
		||||
	screen_write_start(&ctx, NULL, &c->status);
 | 
			
		||||
	if (llen != 0) {
 | 
			
		||||
 		screen_write_cursormove(&ctx, 0, yy);
 | 
			
		||||
		screen_write_nputs(&ctx, llen + 1, &stdgc, "%s ", left);
 | 
			
		||||
		screen_write_nputs(
 | 
			
		||||
		    &ctx, llen + 1, &stdgc, utf8flag, "%s ", left);
 | 
			
		||||
		if (larrow)
 | 
			
		||||
			screen_write_putc(&ctx, &stdgc, ' ');
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -221,7 +225,8 @@ draw:
 | 
			
		||||
	/* Draw the last item. */
 | 
			
		||||
	if (rlen != 0) {
 | 
			
		||||
		screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, yy);
 | 
			
		||||
		screen_write_nputs(&ctx, rlen + 1, &stdgc, " %s", right);
 | 
			
		||||
		screen_write_nputs(
 | 
			
		||||
		    &ctx, rlen + 1, &stdgc, utf8flag, " %s", right);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Draw the arrows. */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
.\" $Id: tmux.1,v 1.98 2009-06-25 15:30:29 nicm Exp $
 | 
			
		||||
.\" $OpenBSD: tmux.1,v 1.10 2009/06/03 16:54:26 nicm Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
.\"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $OpenBSD: tmux.c,v 1.4 2009/06/02 16:53:20 sobrado Exp $ */
 | 
			
		||||
/* $OpenBSD: tmux.c,v 1.5 2009/06/03 16:54:26 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -315,6 +315,7 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_string(&global_options, "status-left", "[#S]");
 | 
			
		||||
	options_set_string(
 | 
			
		||||
	    &global_options, "status-right", "\"#24T\" %%H:%%M %%d-%%b-%%y");
 | 
			
		||||
	options_set_number(&global_options, "status-utf8", 0);
 | 
			
		||||
 | 
			
		||||
	options_init(&global_window_options, NULL);
 | 
			
		||||
	options_set_number(&global_window_options, "aggressive-resize", 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $OpenBSD: tmux.h,v 1.3 2009/06/03 16:05:46 nicm Exp $ */
 | 
			
		||||
/* $OpenBSD: tmux.h,v 1.4 2009/06/03 16:54:26 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -138,6 +138,7 @@ extern const char    *__progname;
 | 
			
		||||
#define printflike2 __attribute__ ((format (printf, 2, 3)))
 | 
			
		||||
#define printflike3 __attribute__ ((format (printf, 3, 4)))
 | 
			
		||||
#define printflike4 __attribute__ ((format (printf, 4, 5)))
 | 
			
		||||
#define printflike5 __attribute__ ((format (printf, 5, 6)))
 | 
			
		||||
 | 
			
		||||
/* Number of items in array. */
 | 
			
		||||
#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
 | 
			
		||||
@@ -997,7 +998,7 @@ struct set_option_entry {
 | 
			
		||||
};
 | 
			
		||||
extern const struct set_option_entry set_option_table[];
 | 
			
		||||
extern const struct set_option_entry set_window_option_table[];
 | 
			
		||||
#define NSETOPTION 24
 | 
			
		||||
#define NSETOPTION 25
 | 
			
		||||
#define NSETWINDOWOPTION 19
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRTONUM
 | 
			
		||||
@@ -1468,13 +1469,13 @@ void	 grid_view_delete_cells(struct grid *, u_int, u_int, u_int);
 | 
			
		||||
void	 screen_write_start(
 | 
			
		||||
    	     struct screen_write_ctx *, struct window_pane *, struct screen *);
 | 
			
		||||
void	 screen_write_stop(struct screen_write_ctx *);
 | 
			
		||||
size_t printflike1 screen_write_strlen(const char *, ...);
 | 
			
		||||
size_t printflike2 screen_write_strlen(int, const char *, ...);
 | 
			
		||||
void printflike3 screen_write_puts(struct screen_write_ctx *,
 | 
			
		||||
    	     struct grid_cell *, const char *, ...);
 | 
			
		||||
void printflike4 screen_write_nputs(struct screen_write_ctx *,
 | 
			
		||||
    	     ssize_t, struct grid_cell *, const char *, ...);
 | 
			
		||||
void printflike5 screen_write_nputs(struct screen_write_ctx *,
 | 
			
		||||
    ssize_t, struct grid_cell *, int, const char *, ...);
 | 
			
		||||
void	 screen_write_vnputs(struct screen_write_ctx *,
 | 
			
		||||
    	     ssize_t, struct grid_cell *, const char *, va_list);
 | 
			
		||||
	     ssize_t, struct grid_cell *, int, const char *, va_list);
 | 
			
		||||
void	 screen_write_putc(
 | 
			
		||||
    	     struct screen_write_ctx *, struct grid_cell *, u_char);
 | 
			
		||||
void	 screen_write_copy(struct screen_write_ctx *,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user