mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:44:18 +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