From 2e85eeea37e26a8a68b4c8f288ec8b7305799cb3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 23 Feb 2013 14:51:56 +0000 Subject: [PATCH 1/5] www Project Page -> SourceForge Page --- www/index.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html.in b/www/index.html.in index c2942393..5e0276e8 100644 --- a/www/index.html.in +++ b/www/index.html.in @@ -16,7 +16,7 @@
  • Manual Page
  • FAQ
  • Source Code
  • -
  • Project Page
  • +
  • SourceForge Page
  • Mailing List
  • IRC Channel
  • From dc50de782a108d37b94de16e3407e2e8742334ed Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 23 Feb 2013 15:15:20 +0000 Subject: [PATCH 2/5] The visit -> Visit --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 42bfda97..77c6058d 100644 --- a/README +++ b/README @@ -41,7 +41,7 @@ directory. For debugging, running tmux with -v or -vv will generate server and client log files in the current directory. -tmux mailing lists are available. The visit: +tmux mailing lists are available. Visit: https://sourceforge.net/mail/?group_id=200378 From f1aa5f6a1dea7d18b5ad851dcd42b1a206e9bb99 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 23 Feb 2013 15:43:13 +0000 Subject: [PATCH 3/5] Add to TODO. --- TODO | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODO b/TODO index 7beca4d8..987fde0f 100644 --- a/TODO +++ b/TODO @@ -163,6 +163,10 @@ TMUX UI ISSUES and for session we look session->global - maybe keep last layout + size around and if size reverts just put it back - way to set hints/limits about pane size for resizing +- revamp layouts: they are too complicated, should be more closely integrated, + should support hints, layout sets should just be a special case of custom + layouts, and we should support panes that are not attached to a cell at + all. this could be the time to introduce panelink to replace layout_cell TERMINAL ISSUES ================ From ca6d9f799ed776c64348bf9dc0b5092e7a084a57 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 23 Feb 2013 15:52:56 +0000 Subject: [PATCH 4/5] Tidy TODO and nuke stuff that is done in some form or not going to happen. --- TODO | 55 ++++++++++++++----------------------------------------- 1 file changed, 14 insertions(+), 41 deletions(-) diff --git a/TODO b/TODO index 987fde0f..a57dc932 100644 --- a/TODO +++ b/TODO @@ -30,40 +30,30 @@ TMUX UI ISSUES to avoid quoting - make command sequences more usable: don't require space after ;, handle errors better -- attach should have a flag to create session if it doesn't exist - choice and more mode would be better per client than per window? - hooks to which commands may be attached, for example: tmux add-hook "new-session" if-shell "[ -e $HOME/.tmux-session.conf ]" source-file $HOME/.tmux-session.conf - way to set socket path from config file -- what about utmp etc? can tmux update it like screen? setgid? - warts on current naming: - display-time but message-fg/bg/attr - list-* vs show-* - server-info - up-pane/down-pane/swap-pane -U/swap-pane -D vs next-*/previous-* - split-window -> split-pane?? -- a way for force-width/height to apply to only one pane (how?) -- command to list what is actually running in each window with command line, - pid (need some adaption of the osdep code) - some way to force a screen to use the entire terminal even if it is forced to be smaller by other clients. pan smaller terminal? (like screen F) -- idea of a "view" onto a window, need base x/y offsets for redraw -- handle resize better in copy mode -- way to copy stuff that is off screen due to resize - commands should be able to succeed or fail and have || or && for command lists -- some way to KEEP a command running continually and just use its LAST line of +- some way to keep a command running continually and just use its last line of output - UTF-8 to a non-UTF-8 terminal should not be able to balls up the terminal - www/ruby-addressable; make regress - support esc-esc to quit in modes - fix ctrl+F1-F4 output. to what? - better utf8 support: window names, prompt input, message display -- session history for client and last-session command -- option to change status line colour when current window is in a mode? - option to move copy mode indicator into status line -- list-buffer/show-buffer should display UTF-8 - selection behaviour closer to vi in vi mode - live update: server started with -U connects to server, requests sessions and windows, receives fds @@ -76,14 +66,11 @@ TMUX UI ISSUES - better session sharing: create-socket command to create socket somewhere (-r flag for readonly) - multiline status line (no?) -- flag for absolute pane size to resize-pane -- sanity check input to socket - support title stack, both internally and externally http://docs.freebsd.org/cgi/getmsg.cgi?fetch=1149299+0+archive/2010/freebsd-questions/20100207.freebsd-questions -- command to show status line information briefly when it is off - some way to pad # stuff with spaces, #!2T maybe - a binding to "scroll down and exit at bottom" copy mode -- some way to pass keystrokes in copy mode through to underlying window +- some way to pass keystrokes in copy mode through to underlying window. why? - last window update time and # replacement for it for display-message - find-window across sessions - other ways to make session handling easier? - ' and " should be parsed the same (eg "\e" vs '\e') in config and command @@ -92,44 +79,29 @@ TMUX UI ISSUES - audit of escape sequence support vs xterm - support binding keys to mouse (mouse-select-pane -> mouse-keys or something, mouse click == select-pane -t %%, mouse scroll up == copy-mode) -- something for -t "last window in session" so a session can be used as a stack -- synchronous commands - client sends cmd and blocks, neww/splitw saves client - ptr then when program inside died, sends MSG_SOMETHING with wait status to - client - bind commands to key sequences? -- make it so ALL keys go through a table, first an implicit table in which C-b is the only default binding to a command that says "next key from $othertable" and so on. means -n can go away as well - monitor, bell etc should monitor /all/ panes in the window not just one - a history of commands that can be reversed (reverse member of each command, - and a buffer) info() when changing to same window + and a buffer) +- info() when changing to same window - way to add dest for break-pane; maybe some easier way to unbreak-pane - case insensitive searching - incremental searching in copy mode. - configurable borders and empty space filler for when panes < window? - mouse-select-pane will screw up with !MODE_MOUSE_STANDARD (it sets the flag on w/o checking the others before calling tty_update_mode) -- multiple keys could be done with tables, ie have prefixes go and instead - bind -n ^A prefix-table "default" - where prefix-table sets command lookup table and sets prefix flag, then next - key is looked up in that table - pass shell commands as argv rather than strings, allow them to be specified in commands without quotes -- numeric prefix in copy mode should be paste buffer for C-w - named buffers and allow gaps in the stack -- get rid of separate UTF-8 cell stuff: add 1 byte to cell and store BMP as - uint16_t+3 bits of flags. anything <=0xffff is Unicode, higher are used to - build tree of combined characters/non-BMP (LRU dropped when full) -- entry in FAQ about what to do when someone does mkdir /tmp/tmux-1000 - monitor-activity is broken in several ways with multiple clients - monitor-activity should be more powerful (eg set a region) - maybe a way to put pane names instead of window names in status line - support for borderless panes -- run-shell/if-shell should support status_replace stuff -- wait-pane command or another way to make it synchronous/wait for command to - finish +- wait-for command 20130222153957.GY6782@yelena.nicm.ath.cx - last-pane across sessions -- attach should take a pane and select it as well as attaching - panes should have names like windows - command-prompt doesn't work if made read-only. why? - option to quote format eg #{session_name:quoted} @@ -144,16 +116,14 @@ TMUX UI ISSUES - way to tag a layout as a number/name - optimize pane redraws, 20120318184853.GK10965@yelena.nicm.ath.cx - support multibyte key strings -- allow commands to be executed when certaing patterns in a screen +- allow commands to be executed when certain patterns in a screen are clicked on with the mouse - flag to make next/previous commands skip a window - way to do tmux command/run-shell from mode keys - send command to all windows -- choose-pane command - - Augment choose-tree to do this? TA to investigate. -- choose-mode and copy-mode are very similar. Perhaps make choose-mode a - subset of copy-mode in that it inherits key-bindings and other traits but - not all. +- choose-pane command (augment choose-tree to do this?) +- choose-mode and copy-mode are very similar. Perhaps make choose-mode a subset + of copy-mode in that it inherits key-bindings and other traits but not all - add -c for new-session like new-window - flag to choose-* for sort order (eg sort windows/sessions/clients by last used time) - perhaps using formats (but what about numeric sort)? @@ -167,6 +137,10 @@ TMUX UI ISSUES should support hints, layout sets should just be a special case of custom layouts, and we should support panes that are not attached to a cell at all. this could be the time to introduce panelink to replace layout_cell +- run-shell/if-shell should support formats +- attach should take a pane and select it as well as attaching +- attach should have a flag to create session if it doesn't exist. or better + new a flag to attach it TERMINAL ISSUES ================ @@ -175,8 +149,7 @@ TERMINAL ISSUES - clear window title on exit (see using xterm title stack) - get it passing all the vttest tests that don't require resizing the terminal - support for bce -- use screen-256color when started on 256 colour terminal?? -- if-shell/run-shell should block further command execution in the same command +- use screen-256color when started on 256 colour terminal? * We need a tmux terminfo entry to document the extensions we are using in upstream terminfo. Must NOT change (only add or remove) anything from TERM=screen so we can fallback! From 497b27dafb7f531db3b82d6bf061279c599e69ae Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 23 Feb 2013 19:24:42 +0000 Subject: [PATCH 5/5] Expand format variables in the run-shell and if-shell shell commands, from Thiago Padilha. --- cmd-if-shell.c | 22 +++++++++++++++++++--- cmd-run-shell.c | 17 ++++++++++++++--- tmux.1 | 14 +++++++++++++- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/cmd-if-shell.c b/cmd-if-shell.c index 6f0b151a..02c19976 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -36,8 +36,8 @@ void cmd_if_shell_free(void *); const struct cmd_entry cmd_if_shell_entry = { "if-shell", "if", - "", 2, 3, - "shell-command command [command]", + "t:", 2, 3, + CMD_TARGET_PANE_USAGE " shell-command command [command]", 0, NULL, NULL, @@ -55,7 +55,22 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx) { struct args *args = self->args; struct cmd_if_shell_data *cdata; - const char *shellcmd = args->argv[0]; + const char *shellcmd; + struct session *s; + struct winlink *wl; + struct window_pane *wp; + struct format_tree *ft; + + wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp); + if (wl == NULL) + return (CMD_RETURN_ERROR); + + ft = format_create(); + format_session(ft, s); + format_winlink(ft, s, wl); + format_window_pane(ft, wp); + shellcmd = format_expand(ft, args->argv[0]); + format_free(ft); cdata = xmalloc(sizeof *cdata); cdata->cmd_if = xstrdup(args->argv[1]); @@ -68,6 +83,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx) cmd_ref_ctx(ctx); job_run(shellcmd, cmd_if_shell_callback, cmd_if_shell_free, cdata); + free(shellcmd); return (CMD_RETURN_YIELD); /* don't let client exit */ } diff --git a/cmd-run-shell.c b/cmd-run-shell.c index 9b4c006a..72907937 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -75,14 +75,25 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_ctx *ctx) { struct args *args = self->args; struct cmd_run_shell_data *cdata; - const char *shellcmd = args->argv[0]; + const char *shellcmd; + struct session *s; + struct winlink *wl; struct window_pane *wp; + struct format_tree *ft; - if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL) + wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp); + if (wl == NULL) return (CMD_RETURN_ERROR); + ft = format_create(); + format_session(ft, s); + format_winlink(ft, s, wl); + format_window_pane(ft, wp); + shellcmd = format_expand(ft, args->argv[0]); + format_free(ft); + cdata = xmalloc(sizeof *cdata); - cdata->cmd = xstrdup(args->argv[0]); + cdata->cmd = shellcmd; cdata->wp_id = wp->id; cdata->ctx = ctx; diff --git a/tmux.1 b/tmux.1 index 882a71f8..cf332511 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3468,7 +3468,11 @@ Miscellaneous commands are as follows: .Bl -tag -width Ds .It Ic clock-mode Op Fl t Ar target-pane Display a large clock. -.It Ic if-shell Ar shell-command command Op Ar command +.It Xo Ic if-shell +.Op Fl t Ar target-pane +.Ar shell-command command +.Op Ar command +.Xc .D1 (alias: Ic if ) Execute the first .Ar command @@ -3477,6 +3481,10 @@ if returns success or the second .Ar command otherwise. +Before being executed, shell-command is expanded using the rules specified in the +.Sx FORMATS +section, including those relevant to +.Ar target-pane . .It Ic lock-server .D1 (alias: Ic lock ) Lock each client individually by running the command specified by the @@ -3490,6 +3498,10 @@ option. Execute .Ar shell-command in the background without creating a window. +Before being executed, shell-command is expanded using the rules specified in +the +.Sx FORMATS +section. After it finishes, any output to stdout is displayed in copy mode (in the pane specified by .Fl t