mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Report available commands on ambiguous commands. Tidy TODO a bit.
This commit is contained in:
		
							
								
								
									
										6
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -1,3 +1,7 @@ | ||||
| 16 November 2007 | ||||
|  | ||||
| * (nicm) List available commands on ambiguous command. | ||||
|  | ||||
| 12 November 2007 | ||||
|  | ||||
| * (nicm) If the terminal supports default colours (AX present), force black  | ||||
| @@ -206,4 +210,4 @@ | ||||
|   (including mutt, emacs). No status bar yet and no key remapping or other | ||||
|   customisation. | ||||
|  | ||||
| $Id: CHANGES,v 1.67 2007-11-12 20:29:43 nicm Exp $ | ||||
| $Id: CHANGES,v 1.68 2007-11-16 13:23:59 nicm Exp $ | ||||
|   | ||||
							
								
								
									
										25
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								TODO
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| - it would be nice if there wasn't so much copying buffers about, audit uses | ||||
| - useful env vars like WINDOW | ||||
| - useful env vars like WINDOW? | ||||
| - sort out who controls the buffers in local.c a bit | ||||
| - better checking/emulation for missing term requirements | ||||
| - alt charset, borders etc (terminfo(5)/Line Graphics) | ||||
| @@ -25,7 +25,7 @@ | ||||
| - client could pass term/tty fd up to server and then do nothing. what problems  | ||||
|   would this cause? -- need access to all terminfo data at once... signals? | ||||
| - cleanup/redesign IPC | ||||
| 	IPC is slightly arse-about-face: too much overhead. 8-byte header for | ||||
| 	IPC is slightly arse-about-face: overhead? 8-byte header for | ||||
| 	each packet... hrm. already scanning output for \e, could add an extra | ||||
| 	byte to it for message | ||||
| - could use bsearch all over the place or get rid of smaller tables (clientmsg) | ||||
| @@ -34,7 +34,6 @@ | ||||
| - CLIENT_HOLD sucks | ||||
| - session with CMD_NOSESSION should be an error | ||||
| - each command should have a print op as well for list keys | ||||
| - List available commands on ambigous command | ||||
| - Implicitly add exec to the commands for new windows (switch to disable it) | ||||
| - nested sessions, ie session as window - moving to it moves into session | ||||
|   (remembering parent) | ||||
| @@ -44,27 +43,25 @@ | ||||
| - status-fg/status-bg should be to set attributes: bold, etc | ||||
| - show-options command | ||||
| - detach client and other client commands. note that there can only be a | ||||
|   "current client" on key presses - these should act like detach-session - | ||||
|   -a will do all clients, otherwise do nothing unless key in which case do | ||||
|   current client | ||||
|   "current client" on key presses - these should probably act like | ||||
|   detach-session: -a will do all clients, otherwise use current client if | ||||
|   key, else do nothing | ||||
| - check handling of out-of-bound values in input.c, most should be limited | ||||
|   rather than ignored | ||||
| - save/restore (DECSC/DECRC) are ugly. maybe a struct screen_attr and memcpy | ||||
| - force maximum terminal size (centred?) | ||||
| - per-session toolbar state, other options | ||||
| - commands: | ||||
| 	kill server | ||||
| - force-default option: assume terminal supports default colours even if AX | ||||
|   is missing (like, eg, xterm-color in an aterm) | ||||
| - refer to windows by name etc (duplicates?) | ||||
| - command to run something without a window at all | ||||
| - command to insert a key into a window | ||||
| - function groups: | ||||
| 	bind-key ^W { select-window 0; send-key ^W } | ||||
| 	etc | ||||
| - commands: | ||||
| 	kill server | ||||
| 	command to run something without a window at all? | ||||
| 	command to insert a key into a window (send-key) | ||||
| - function groups, bind-key ^W { select-window 0; send-key ^W } etc | ||||
| - more(1) style handling for in-client output | ||||
|  | ||||
| -- For 0.1 -------------------------------------------------------------------- | ||||
| - fix most(1) problems after scrolling | ||||
| - fix mutt problems with redraw (mutt's) status line when reading mail | ||||
|  | ||||
| -- For 0.2 -------------------------------------------------------------------- | ||||
|   | ||||
							
								
								
									
										23
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								cmd.c
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| /* $Id: cmd.c,v 1.26 2007-11-12 14:21:40 nicm Exp $ */ | ||||
| /* $Id: cmd.c,v 1.27 2007-11-16 13:23:59 nicm Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -57,6 +57,7 @@ cmd_parse(int argc, char **argv, char **cause) | ||||
| { | ||||
| 	const struct cmd_entry **entryp, *entry; | ||||
| 	struct cmd	        *cmd; | ||||
| 	char			 s[BUFSIZ]; | ||||
| 	int			 opt; | ||||
|  | ||||
| 	*cause = NULL; | ||||
| @@ -73,10 +74,8 @@ cmd_parse(int argc, char **argv, char **cause) | ||||
|  | ||||
| 		if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0) | ||||
| 			continue; | ||||
| 		if (entry != NULL) { | ||||
| 			xasprintf(cause, "ambiguous command: %s", argv[0]); | ||||
| 			return (NULL); | ||||
| 		} | ||||
| 		if (entry != NULL) | ||||
| 			goto ambiguous; | ||||
| 		entry = *entryp; | ||||
| 	} | ||||
| 	if (entry == NULL) { | ||||
| @@ -108,6 +107,20 @@ cmd_parse(int argc, char **argv, char **cause) | ||||
| 	} | ||||
| 	return (cmd); | ||||
|  | ||||
| ambiguous: | ||||
| 	*s = '\0'; | ||||
| 	for (entryp = cmd_table; *entryp != NULL; entryp++) { | ||||
| 		if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0) | ||||
| 			continue; | ||||
| 		if (strlcat(s, (*entryp)->name, sizeof s) >= sizeof s) | ||||
| 			break; | ||||
| 		if (strlcat(s, ", ", sizeof s) >= sizeof s) | ||||
| 			break; | ||||
| 	} | ||||
| 	s[strlen(s) - 2] = '\0'; | ||||
| 	xasprintf(cause, "ambiguous command: %s, could be: %s", argv[0], s); | ||||
| 	return (NULL); | ||||
|  | ||||
| usage: | ||||
| 	usage(cause, "%s %s", entry->name, entry->usage); | ||||
| 	return (NULL); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott