- 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 * resize-pane -p to match split-window -p * flag to wait-for to have a timeout and/or to stop waiting when the client gets a signal - 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: * some way to pad # stuff with spaces * formats to show if a window is linked into multiple sessions, into multiple attached sessions, and is the active window in multiple attached sessions? * comparison operators like < and > (for #{version}?) - 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: * bind commands to mouse in different areas? * commands executed when clicking on a pattern (URL) - warts on current naming: * display-time but message-fg/bg/attr * list-* vs show-* - copy/paste improvements: * paste w/o trailing whitespace * command to toggle selection not to move it in copy-mode * regex searching * searching in copy mode should unwrap lines, so if you search for "foobar" then it should be found even if it is now "foo\nbar" (if the WRAP flag is set on the line) * capture-pane option to preserve spaces but not join lines * improve word and line selection in copy mode (for example when dragging it should select by word. compare how xterm works. GitHub issue 682) * key to search for word under cursor (GitHub issue 1240) * when entering copy mode, should copy grid so that input does not need to be suspended * allow the prefix for automatic buffers to be specified as part of the key binding to allow session buffers or similar (GitHub issue 1501) * copy-pipe should be synchronous (GitHub issue 1517) - layout stuff * way to tag a layout as a number/name * maybe keep last layout + size around and if size reverts just put it back * 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 * a mode where one application can cross two panes (ie x|y, width = COLUMNS/2 but height = ROWS * 2) * separate active panes for different clients * way to choose where the freed space goes when a pane is killed: option to kill-pane? GitHub issue 918 - 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 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 * 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 && cmdq->c->session == NULL) - 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 * link panes into multiple windows * 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 comes from config for new sessions and windows. likewise, panes and jobs and run-shell and lock command all start with slightly different environments * multiline status line? separate command prompt and status line? * automatic pane logging * marks in history, automatically add (move?) one when pane is changed * this doesn't work, need pane reference count probably: bind -n DoubleClick3Status confirm-before -p "kill-window #I? (y/n)" kill-window * marker lines in history (GitHub issue 1042) * tree mode stuff: make command prompt (:) common code so all modes get it, predefined filters, tag-all key, ... * drag panes and windows around to move/swap them in choose mode * flag to specify environment to new-window, split-window, new-session (issue 1498) * multiple column panes (issue 1503) * support for ZERO WIDTH JOINER U+200D * individual pane synchronize-panes (with pane options?); issue 1638 - hooks * more hooks for various things * finish after hooks for special commands. these do not have a hook at the moment: 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 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 * multiple hooks with the same name? * finish hooks for notifys * for session_closed, if no sessions at all, perhaps fake up a temporary one - pan * tty_window_offset should try to keep as much off active pane visible as possible * rather than centering cursor it might be better if only moved offset when it gets close to an edge? ---- TODO soonish maybe: - Store hooks as options, issue 1619. - Support buffer prefixes, issue 1501. - copy-pipe should be synchronous, issue 1517. - -E flag to pass environment to new-*, issue 1498. - Copy mode searching is slow when there is a big history, issue 1545. - 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. - Command aliases should be able to override builtin commands in order to add default flags (some mechanism needed to avoid recursion). GitHub issue 1630.