tmux/TODO

160 lines
7.1 KiB
Plaintext
Raw Normal View History

2013-03-28 12:42:00 +00:00
- command bits and pieces:
* allow multiple targets: fnmatch for -t/-c, for example detach all
clients with -t*
* ' and " should be parsed the same (eg "\e" vs '\e') in config
and command prompt
* last-pane across sessions
2016-04-27 12:10:34 +00:00
* resize-pane -p to match split-window -p
2017-03-20 11:50:54 +00:00
* flag to wait-for to have a timeout and/or to stop waiting when the
client gets a signal
2013-03-28 12:42:00 +00:00
- make command sequences more usable
* don't require space after ;
* options for error handling: && and ||?
- options bits and pieces:
* way to set socket path from config file
- format improvements:
2015-06-02 14:16:13 +00:00
* some way to pad # stuff with spaces
2014-02-01 00:47:04 +00:00
* formats to show if a window is linked into multiple sessions, into
multiple attached sessions, and is the active window in multiple
attached sessions?
2017-04-30 07:23:14 +00:00
* comparison operators like < and > (for #{version}?)
2013-03-28 12:42:00 +00:00
- improve monitor-*:
* straighten out rules for multiple clients
* think about what happens across sessions
* monitor changes within a region
* perhaps monitor /all/ panes in the window not just one
- improve mouse support:
2019-03-12 17:52:22 +00:00
* bind commands to mouse in different areas?
2013-03-28 12:42:00 +00:00
* commands executed when clicking on a pattern (URL)
2009-07-16 07:35:41 +00:00
- warts on current naming:
2013-04-11 21:45:05 +00:00
* display-time but message-fg/bg/attr
2013-03-28 12:42:00 +00:00
* list-* vs show-*
- copy/paste improvements:
* paste w/o trailing whitespace
* command to toggle selection not to move it in copy-mode
2015-04-19 18:34:58 +00:00
* regex searching
2016-06-10 11:47:15 +00:00
* searching in copy mode should unwrap lines, so if you search for "foobar"
2017-03-20 11:50:54 +00:00
then it should be found even if it is now "foo\nbar" (if the WRAP flag
is set on the line)
2016-06-10 15:38:40 +00:00
* capture-pane option to preserve spaces but not join lines
2017-05-09 21:33:39 +00:00
* improve word and line selection in copy mode (for example when
dragging it should select by word. compare how xterm works. GitHub
issue 682)
2018-01-29 12:44:31 +00:00
* key to search for word under cursor (GitHub issue 1240)
2018-09-09 06:52:28 +00:00
* when entering copy mode, should copy grid so that input does not
2018-10-08 12:06:37 +00:00
need to be suspended
2018-10-16 13:16:48 +00:00
* allow the prefix for automatic buffers to be specified as part of the
key binding to allow session buffers or similar (GitHub issue 1501)
2013-03-28 12:42:00 +00:00
2014-02-01 00:47:04 +00:00
- layout stuff
* way to tag a layout as a number/name
* maybe keep last layout + size around and if size reverts just put it
2015-04-19 18:40:12 +00:00
back
2014-02-01 00:47:04 +00:00
* 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
* way to set hints/limits about pane size for resizing
2014-02-23 10:19:04 +00:00
* a mode where one application can cross two panes (ie x|y, width =
2015-04-19 18:40:12 +00:00
COLUMNS/2 but height = ROWS * 2)
* separate active panes for different clients
2017-05-09 21:33:39 +00:00
* way to choose where the freed space goes when a pane is killed:
option to kill-pane? GitHub issue 918
2014-02-01 00:47:04 +00:00
- code cleanup
* instead of separate window and session options, just one master
options list with each option having a type (window or session), then
options on window, on session, and global. for window options we look
2016-10-13 20:14:33 +00:00
window->session->global, and for session we look session->global.
problem: what about windows in multiple sessions? there are contexts
where we do not know which session, or where multiple choices makes
no sense... could at least have one global list for all types of
global options and keep separate window,session lists
2014-02-01 00:47:04 +00:00
* the way pane, window, session destroy is handled is too complicated
and the distinction between session.c, window.c and server-fn.c
functions is not clear. could we just have kill_pane(),
kill_window(), unlink_window(), kill_session() that fix up all data
structures (flagging sessions as dead) and return a value to say
whether clients need to be checked for dead sessions? sort of like
session_detach now but more so. or some other scheme to make it
simpler and clearer? also would be nice to remove/rename server-fn.c
* more readable way to work out the various things commands need to
know about the client, notably:
- is this the config file? (cmdq->c == NULL)
- is this a command client? (cmdq->c != NULL &&
2015-04-19 18:40:12 +00:00
cmdq->c->session == NULL)
2014-02-01 00:47:04 +00:00
- is this a control client?
- can i do stdin or stdout to this client?
or even guarantee that cmdq->c != NULL and provide a better way to
tell when in the config file - then we use cmdq->c if we need a
client w/o a session else cmd_current_client
- miscellaneous
2014-02-14 13:56:39 +00:00
* link panes into multiple windows
2014-02-01 00:47:04 +00:00
* live update: server started with -U connects to server, requests
sessions and windows, receives file descriptors
* there are inconsistencies in what we get from old shell and what
2014-06-20 11:19:51 +00:00
comes from config for new sessions and windows. likewise, panes and
jobs and run-shell and lock command all start with slightly different
environments
2016-02-19 16:45:15 +00:00
* multiline status line? separate command prompt and status line?
* automatic pane logging
2017-02-09 14:40:30 +00:00
* marks in history, automatically add (move?) one when pane is changed
2017-03-21 21:28:37 +00:00
* this doesn't work, need pane reference count probably:
bind -n DoubleClick3Status confirm-before -p "kill-window #I? (y/n)" kill-window
2017-08-22 12:02:20 +00:00
* marker lines in history (GitHub issue 1042)
2017-10-25 11:29:10 +00:00
* tree mode stuff: make command prompt (:) common code so all modes get it,
predefined filters, tag-all key, ...
2018-01-29 12:46:52 +00:00
* drag panes and windows around to move/swap them in choose mode
2018-10-15 08:09:40 +00:00
* flag to specify environment to new-window, split-window,
new-session (issue 1498)
2018-10-16 13:12:33 +00:00
* multiple column panes (issue 1503)
2019-03-07 15:34:10 +00:00
* support for ZERO WIDTH JOINER U+200D
2019-03-19 14:39:46 +00:00
* individual pane synchronize-panes (with pane options?); issue 1638
2016-10-13 21:40:20 +00:00
- hooks
* more hooks for various things
2017-08-09 11:48:54 +00:00
* finish after hooks for special commands. these do not have a hook at
2017-10-25 11:29:10 +00:00
the moment:
2017-08-09 11:48:54 +00:00
attach-session detach-client kill-server respawn-window
swap-window break-pane find-window kill-session rotate-window
switch-client choose-tree if-shell kill-window run-shell
wait-for command-prompt join-pane move-window source-file
confirm-before kill-pane respawn-pane swap-pane
2017-10-25 11:29:10 +00:00
at the moment AFTERHOOK uses current only if target is not valid,
but target is ALWAYS valid - it should use current if no -t flag?
then select-* could use AFTERHOOK
2017-01-09 17:48:30 +00:00
* multiple hooks with the same name?
2016-10-16 19:59:43 +00:00
* finish hooks for notifys
2017-08-09 11:48:54 +00:00
* for session_closed, if no sessions at all, perhaps fake up a
2017-10-25 11:29:10 +00:00
temporary one
Support for windows larger than the client. This adds two new options, window-size and default-size, and a new command, resize-window. The force-width and force-height options, and the session_width and session_height formats have been removed. The new window-size option tells tmux how to work out the size of windows: largest means it picks the size of the largest session, smallest the smallest session (similar to the old behaviour) and manual means that it does not automatically resize windows. aggressive-resize modifies the choice of session for largest and smallest as it did before. If a window is in a session attached to a client that is too small, only part of the window is shown. tmux attempts to keep the cursor visible, so the part of the window displayed is changed as the cursor moves (with a small delay, to try and avoid excess redrawing when applications redraw status lines or similar that are not currently visible). Drawing windows which are larger than the client is not as efficient as those which fit, particularly when the cursor moves, so it is recommended to avoid using this on slow machines or networks (set window-size to smallest or manual). The resize-window command can be used to resize a window manually. If it is used, the window-size option is automatically set to manual for the window (undo this with "setw -u window-size"). resize-window works in a similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the window to the size of the smallest client (what it would be if window-size was smallest) and -A the largest. For the same behaviour as force-width or force-height, use resize-width -x or -y. If the global window-size option is set to manual, the default-size option is used for new windows. If -x or -y is used with new-session, that sets the default-size option for the new session. The maximum size of a window is 10000x10000. But expect applications to complain and higher memory use if you make a window that big. The minimum size is the size required for the current layout including borders. This change allows some code improvements, most notably that since windows can now never be cropped, that code can be removed from the layout code, and since panes can now never be outside the size of the window, window_pane_visible can be removed.
2018-08-20 14:22:14 +00:00
- pan
2018-08-29 17:52:04 +00:00
* tty_window_offset should try to keep as much off active pane
Support for windows larger than the client. This adds two new options, window-size and default-size, and a new command, resize-window. The force-width and force-height options, and the session_width and session_height formats have been removed. The new window-size option tells tmux how to work out the size of windows: largest means it picks the size of the largest session, smallest the smallest session (similar to the old behaviour) and manual means that it does not automatically resize windows. aggressive-resize modifies the choice of session for largest and smallest as it did before. If a window is in a session attached to a client that is too small, only part of the window is shown. tmux attempts to keep the cursor visible, so the part of the window displayed is changed as the cursor moves (with a small delay, to try and avoid excess redrawing when applications redraw status lines or similar that are not currently visible). Drawing windows which are larger than the client is not as efficient as those which fit, particularly when the cursor moves, so it is recommended to avoid using this on slow machines or networks (set window-size to smallest or manual). The resize-window command can be used to resize a window manually. If it is used, the window-size option is automatically set to manual for the window (undo this with "setw -u window-size"). resize-window works in a similar way to resize-pane (-U -D -L -R -x -y flags) but also has -a and -A flags. -a sets the window to the size of the smallest client (what it would be if window-size was smallest) and -A the largest. For the same behaviour as force-width or force-height, use resize-width -x or -y. If the global window-size option is set to manual, the default-size option is used for new windows. If -x or -y is used with new-session, that sets the default-size option for the new session. The maximum size of a window is 10000x10000. But expect applications to complain and higher memory use if you make a window that big. The minimum size is the size required for the current layout including borders. This change allows some code improvements, most notably that since windows can now never be cropped, that code can be removed from the layout code, and since panes can now never be outside the size of the window, window_pane_visible can be removed.
2018-08-20 14:22:14 +00:00
visible as possible
* rather than centering cursor it might be better if only
moved offset when it gets close to an edge?
2018-11-21 09:49:49 +00:00
2019-03-12 17:52:22 +00:00
----
TODO soonish maybe:
- Store hooks as options, issue 1619.
- -E flag to pass environment to new-*, issue 1498.
2019-03-12 17:59:46 +00:00
- Copy mode searching is slow when there is a big history, issue 1545.
2019-03-20 20:02:13 +00:00
- Grid "block" stuff, issue 1269. Can be used potentially for compression of
history (bit silly really though), reflow performance (can reflow blocks on
demand). It would possibly be good if history-limit could be global and
collected LRU.
2019-03-17 08:05:58 +00:00
- Command aliases should be able to override builtin commands in order to add
default flags (some mechanism needed to avoid recursion). GitHub issue 1630.
2019-04-17 08:10:23 +00:00
- Merge alternate and normal screen modes: https://gitlab.freedesktop.org/terminal-wg/specifications/issues/5#note_112220