mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Restore window title handling.
This commit is contained in:
		
							
								
								
									
										3
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								CHANGES
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
01 October 2007
 | 
			
		||||
 | 
			
		||||
* (nicm) Restore window title handling.
 | 
			
		||||
* (nicm) Simple uncustomisable status line with window list.
 | 
			
		||||
 | 
			
		||||
30 September 2007
 | 
			
		||||
@@ -84,5 +85,5 @@
 | 
			
		||||
  (including mutt, emacs). No status bar yet and no key remapping or other
 | 
			
		||||
  customisation.
 | 
			
		||||
 | 
			
		||||
$Id: CHANGES,v 1.19 2007-10-01 14:53:29 nicm Exp $
 | 
			
		||||
$Id: CHANGES,v 1.20 2007-10-01 17:37:41 nicm Exp $
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								NOTES
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								NOTES
									
									
									
									
									
								
							@@ -54,7 +54,7 @@ with "-s <path>" but it shouldn't normally be required.
 | 
			
		||||
You can set the window title (listed in -l), using the \e] escape sequence. For
 | 
			
		||||
example:
 | 
			
		||||
 | 
			
		||||
	$ echo -n \\033]0;My Title\\007
 | 
			
		||||
	$ echo -n \\033]0\;My Title\\007
 | 
			
		||||
 | 
			
		||||
There is currently no method for setting the window name (what will eventually
 | 
			
		||||
be shown in the status bar).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								TODO
									
									
									
									
									
								
							@@ -37,5 +37,6 @@
 | 
			
		||||
- store_attr/colr could be two-pass and avoid reverse_add/remove games
 | 
			
		||||
- window creation/idle time
 | 
			
		||||
- attributes could be 8 not 16 bits
 | 
			
		||||
- put title setting back
 | 
			
		||||
- profile/optimise, particularly (i suspect) input.c
 | 
			
		||||
- tidy up input.c a bit
 | 
			
		||||
- decide about customised status line
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								input.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: input.c,v 1.15 2007-10-01 14:18:42 nicm Exp $ */
 | 
			
		||||
/* $Id: input.c,v 1.16 2007-10-01 17:37:41 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -51,6 +51,9 @@ int	 input_add_argument(struct input_ctx *, u_char ch);
 | 
			
		||||
void	*input_state_first(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_escape(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_intermediate(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_title_first(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_title_second(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_title_next(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_sequence_first(
 | 
			
		||||
	     u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
void	*input_state_sequence_next(
 | 
			
		||||
@@ -213,6 +216,8 @@ input_state_first(u_char ch, enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
		ch -= 0x40;
 | 
			
		||||
		if (ch == '[')
 | 
			
		||||
			return (input_state_sequence_first);
 | 
			
		||||
		if (ch == ']')
 | 
			
		||||
			return (input_state_title_first);
 | 
			
		||||
		input_handle_c1_control(ch, ictx);
 | 
			
		||||
		break;
 | 
			
		||||
	case INPUT_SPACE:
 | 
			
		||||
@@ -251,6 +256,8 @@ input_state_escape(u_char ch, enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
	case INPUT_UPPERCASE:
 | 
			
		||||
		if (ch == '[')
 | 
			
		||||
			return (input_state_sequence_first);
 | 
			
		||||
		if (ch == ']')
 | 
			
		||||
			return (input_state_title_first);
 | 
			
		||||
		input_handle_c1_control(ch, ictx);
 | 
			
		||||
		break;
 | 
			
		||||
	case INPUT_LOWERCASE:
 | 
			
		||||
@@ -265,6 +272,51 @@ input_state_escape(u_char ch, enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
	return (input_state_first);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
input_state_title_first(
 | 
			
		||||
    u_char ch, unused enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
{
 | 
			
		||||
	if (ch >= '0' && ch <= '9') {
 | 
			
		||||
		ictx->title_type = ch - '0';
 | 
			
		||||
		return (input_state_title_second);
 | 
			
		||||
	}
 | 
			
		||||
	return (input_state_first);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
input_state_title_second(
 | 
			
		||||
    u_char ch, unused enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
{
 | 
			
		||||
	if (ch == ';') {
 | 
			
		||||
		ictx->title_len = 0;
 | 
			
		||||
		return (input_state_title_next);
 | 
			
		||||
	}
 | 
			
		||||
	return (input_state_first);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
input_state_title_next(
 | 
			
		||||
    u_char ch, unused enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
{
 | 
			
		||||
	if (ch == '\007') {
 | 
			
		||||
		ictx->title_buf[ictx->title_len] = '\0';
 | 
			
		||||
		switch (ictx->title_type) {
 | 
			
		||||
		case 0:
 | 
			
		||||
			strlcpy(ictx->s->title, 
 | 
			
		||||
			    ictx->title_buf, sizeof ictx->s->title);
 | 
			
		||||
			input_store_one(ictx->b, CODE_TITLE, ictx->title_len);
 | 
			
		||||
			buffer_write(ictx->b, ictx->title_buf, ictx->title_len);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	} else if (ch >= 0x20) {
 | 
			
		||||
		if (ictx->title_len < (sizeof ictx->title_buf) - 1) {
 | 
			
		||||
			ictx->title_buf[ictx->title_len++] = ch;
 | 
			
		||||
			return (input_state_title_next);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 	return (input_state_first);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
input_state_intermediate(
 | 
			
		||||
    u_char ch, enum input_class iclass, struct input_ctx *ictx)
 | 
			
		||||
@@ -423,7 +475,6 @@ input_handle_c1_control(u_char ch, struct input_ctx *ictx)
 | 
			
		||||
{
 | 
			
		||||
	log_debug2("-- c1 %zu: %hhu (%c)", ictx->off, ch, ch);
 | 
			
		||||
 | 
			
		||||
	/* XXX window title */
 | 
			
		||||
	switch (ch) {
 | 
			
		||||
	case 'M':	/* RI */
 | 
			
		||||
		screen_cursor_up_scroll(ictx->s);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.31 2007-10-01 14:53:29 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.32 2007-10-01 17:37:41 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -430,6 +430,10 @@ struct input_ctx {
 | 
			
		||||
	struct buffer	*b;
 | 
			
		||||
	struct screen	*s;
 | 
			
		||||
 | 
			
		||||
	u_char		 title_buf[MAXTITLELEN];
 | 
			
		||||
	size_t		 title_len;
 | 
			
		||||
	u_int		 title_type;
 | 
			
		||||
 | 
			
		||||
	void 		*(*state)(u_char, enum input_class, struct input_ctx *);
 | 
			
		||||
 | 
			
		||||
	u_char		 private;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user