aboutsummaryrefslogtreecommitdiff
path: root/window-choose.c
Commit message (Collapse)AuthorAge
* Rewrite of choose mode, both to simplify and tidy the code and to addnicm2017-05-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | some modern features. Now the common code is in mode-tree.c, which provides an API used by the three modes now separated into window-{buffer,client,tree}.c. Buffer mode shows buffers, client mode clients and tree mode a tree of sessions, windows and panes. Each mode has a common set of key bindings plus a few that are specific to the mode. Other changes are: - each mode has a preview pane: for buffers this is the buffer content (very useful), for others it is a preview of the pane; - items may be sorted in different ways ('O' key); - multiple items may be tagged and an operation applied to all of them (for example, to delete multiple buffers at once); - in tree mode a command may be run on the selected item (session, window, pane) or on tagged items (key ':'); - displayed items may be filtered in tree mode by using a format (this is used to implement find-window) (key 'f'); - the custom format (-F) for the display is no longer available; - shortcut keys change from 0-9, a-z, A-Z which was always a bit weird with keys used for other uses to 0-9, M-a to M-z. Now that the code is simpler, other improvements will come later. Primary key bindings for each mode are documented under the commands in the man page (choose-buffer, choose-client, choose-tree). Parts written by Thomas Adam.
* Add a format for the name of the pane's mode, lets it be used as anicm2017-05-07
| | | | conditional for key bindings.
* In order that people can use formats like #D in #() in the status linenicm2017-05-01
| | | | | | | | | | | | | | and not have to wait for an update when they change pane, we allow commands to run more than once a second if the expanded form changes. Unfortunately this can mean them being run far too often (pretty much continually) when multiple clients exist, because some formats (including #D) will always differ between clients. To avoid this, give each client its own tree of jobs which means that the same command will be different instances for each client - similar to how we have the tag to separate commands for different panes. GitHub issue 889; test case reported by Paul Johnson.
* Log what is happening with window and session reference counts much morenicm2017-04-28
| | | | obviously.
* Add h and l for collapse and expand in choose mode with vi(1) keys, fromnicm2017-03-17
| | | | Gregory Pakosz.
* Style nits.nicm2017-02-16
|
* Add a window or pane id "tag" to each format tree and use it to separatenicm2017-02-03
| | | | | | jobs, this means that if the same job is used for different windows or panes (for example in pane-border-format), it will be run separately for each pane.
* It is silly for cmd_list_parse to return an integer error when it couldnicm2017-01-15
| | | | just return NULL.
* Add support for the OSC 4 and OSC 104 palette setting escape sequences,nicm2017-01-07
| | | | from S Gilles.
* Mass rename struct cmd_q to struct cmdq_item and related.nicm2016-10-16
|
* Rewrite command queue handling. Each client still has a command queue,nicm2016-10-16
| | | | | | | | | | | | | | | but there is also now a global command queue. Instead of command queues being dispatched on demand from wherever the command happens to be added, they are now all dispatched from the top level server loop. Command queues may now also include callbacks as well as commands, and items may be inserted after the current command as well as at the end. This all makes command queues significantly more predictable and easier to use, and avoids the complex multiple nested command queues used by source-file, if-shell and friends. A mass rename of struct cmdq to a better name (cmdq_item probably) is coming.
* Add support for BCE (background colour erase). This makes various escapenicm2016-10-13
| | | | | | | | | | | | sequences (notable EL and ED but also IL, DL, ICH, DCH) create blank cells using the current background colour rather than the default colour. On modern systems BCE doesn't really have many benefits, but most other terminals now support it, some (lazy) applications rely on it, and it is not hard to include now that we have pane background colours anyway. Mostly written by Sean Haugh.
* Add static in window-*.c and move some internal functions out of tmux.h.nicm2016-10-11
|
* Fundamental change to how copy mode key bindings work:nicm2016-10-11
| | | | | | | | | | | | | | | | | | | | | | | | | The vi-copy and emacs-copy mode key tables are gone, and instead copy mode commands are bound in one of two normal key tables ("copy-mode" or "copy-mode-vi"). Keys are bound to "send-keys -X copy-mode-command". So: bind -temacs-copy C-Up scroll-up bind -temacs-copy -R5 WheelUpPane scroll-up Becomes: bind -Tcopy-mode C-Up send -X scroll-up bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up This allows the full command parser and command set to be used - for example, we can use the normal command prompt for searching, jumping, and so on instead of a custom one: bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward '%%'" command-prompt also gets a -1 option to only require on key press, which is needed for jumping. The plan is to get rid of mode keys entirely, so more to come eventually.
* Allow repeat count to be specified in mode key tables with bind-key -R,nicm2016-09-12
| | | | | and set the default repeat count to 5 for WheelUp and WheelDown in copy-mode.
* memmove() the right size when expanding tree.nicm2016-04-28
|
* Remove last uses of array.h.nicm2016-04-26
|
* I no longer use my SourceForge address so replace it.nicm2016-01-19
|
* Style nits and line wrapping of function declarations.nicm2015-12-11
|
* Add cmdq as an argument to format_create and add a format for thenicm2015-12-11
| | | | command name (will also be used for more later).
* Remove format_create_flags and just pass flags to format_create.nicm2015-12-08
|
* Use __unused rather than rolling our own.nicm2015-11-18
|
* Nuke the utf8 and status-utf8 options and make tmux only a UTF-8nicm2015-11-12
| | | | | terminal. We still support non-UTF-8 terminals outside tmux, but inside it is always UTF-8 (as when the utf8 and status-utf8 options were on).
* Support UTF-8 key bindings by expanding the key type from int tonicm2015-11-12
| | | | | | uint64_t and converting UTF-8 to Unicode on input and the reverse on output. (This allows key bindings, there are still omissions - the largest being that the various prompts do not accept UTF-8.)
* Move struct options into options.c.nicm2015-10-27
|
* Give clock mode its own timer.nicm2015-08-28
|
* Similarly, for sessions use a callback to free rather than checkingnicm2015-06-05
| | | | every loop.
* window_choose_mode_item can move into window-choose.c.nicm2015-05-08
|
* array.h can be local to window-choose.c now.nicm2015-05-07
|
* Use the right index when expanding/collapsing tree, from Thomas Adam.nicm2015-05-04
|
* Rewrite of tmux mouse support which was a mess. Instead of havingnicm2015-04-19
| | | | | | | | | | | | | | | | | | | | | | | | | options for "mouse-this" and "mouse-that", mouse events may be bound as keys and there is one option "mouse" that turns on mouse support entirely (set -g mouse on). See the new MOUSE SUPPORT section of the man page for description of the key names and new flags (-t= to specify the pane or window under mouse as a target, and send-keys -M to pass through a mouse event). The default builtin bindings for the mouse are: bind -n MouseDown1Pane select-pane -t=; send-keys -M bind -n MouseDown1Status select-window -t= bind -n MouseDrag1Pane copy-mode -M bind -n MouseDrag1Border resize-pane -M To get the effect of turning mode-mouse off, do: unbind -n MouseDrag1Pane unbind -temacs-copy MouseDrag1Pane The old mouse options are now gone, set-option -q may be used to suppress warnings if mixing configuration files.
* Fix some format specifier nits, from Ben Boeckel.nicm2015-03-31
|
* Wrap all the individual format_* calls in a single format_defaultsnicm2015-02-05
| | | | functions.
* Remove an unnecessary variable and shorten a line.nicm2015-01-15
|
* Remove dead code, from Thomas Adam.nicm2014-11-30
|
* Fix some spacing nits.nicm2014-10-22
|
* Add xreallocarray and remove nmemb argument from xrealloc.nicm2014-10-08
|
* Instead of forcing mouse scroll to 1 in choose mode, scale it downnicm2014-05-08
| | | | | instead. Means modifier keys still increase the line count, just not as much. Based on a diff from Marcel Partap.
* Only scroll by one line at a time in choose mode, lists are generallynicm2014-04-17
| | | | pretty small.
* Work out mouse scroll wheel effect when the mouse is first detected andnicm2014-04-03
| | | | | | | store it in struct mouse_event, reduce the scroll size the 3 but allow shift to reduce it to 1 and meta and ctrl to multiply by 3 if the terminal supports them, also support wheel in choose mode. From Marcel Partap.
* Add start-of-list, end-of-list, top-line and bottom-line in choice mode,nicm2014-03-31
| | | | | from madmaverick9 at roxxmail dot eu, similar diff a few days later from Marcel Partap.
* Allow replacing each of the many sets of separate foo-{fg,bg,attr}nicm2014-01-28
| | | | | | | | | | | | | | | | | | | | | | | | | options with a single foo-style option. For example: set -g status-fg yellow set -g status-bg red set -g status-attr blink Becomes: set -g status-style fg=yellow,bg=red,blink The -a flag to set can be used to add to rather than replace a style. So: set -g status-bg red Becomes: set -ag status-style bg=red Currently this is fully backwards compatible (all *-{fg,bg,attr} options remain) but the plan is to deprecate them over time. From Tiago Cunha.
* Style and comment fixes from Tiago Cunha.nicm2014-01-09
|
* choose-tree: Reset top when toggling itemsnicm2013-10-10
| | | | | | | | | | | | When choose-tree is told to expand/collapse items (especially when first rendering collapsed to just show sessions), ensure that in addition to setting the selected item, that the item itself appears on the bottom of the screen, rather than off screen. This was causing rendering glitches when a very small tmux window tried to render a list of items in choose-tree much larger than itself, and the selected item appeared off screen, and didn't show the selection until the selection had wrapped around to the top of the screen.
* When using choose-tree -u, start with the current windowNicholas Marriott2013-04-22
| | | | highlighted. From Thomas Adam.
* Rename session idx to session id throughout and add $ prefix to targetsNicholas Marriott2013-03-25
| | | | to use it, extended from a diff from George Nachman.
* Add a command queue to standardize and simplify commands that call otherNicholas Marriott2013-03-24
| | | | | | | | | | | | | | | | | | | | | | commands and allow a command to block execution of subsequent commands. This allows run-shell and if-shell to be synchronous which has been much requested. Each client has a default command queue and commands are consumed one at a time from it. A command may suspend execution from the queue by returning CMD_RETURN_WAIT and then resume it by calling cmd_continue() - for example run-shell does this from the callback that is fired after the job is freed. When the command queue becomes empty, command clients are automatically exited (unless attaching). A callback is also fired - this is used for nested commands in, for example, if-shell which can block execution of the client's cmdq until a new cmdq becomes empty. Also merge all the old error/info/print functions together and lose the old curclient/cmdclient distinction - a cmdq is bound to one client (or none if in the configuration file), this is a command client if c->session is NULL otherwise an attached client.
* Need to set clients in context before changing their reference count.Nicholas Marriott2013-03-22
|
* Remove unnecessary initializers of cmd_ctx.Nicholas Marriott2013-03-22
|
* Don't hang when clearing line in choose mode now that the cursor staysNicholas Marriott2013-03-22
| | | | at the end with wrap.