#
1.49 |
|
27-Aug-2021 |
nicm |
Replace %% in command lists (by copying them) for template arguments , this means they can be used with {} as well. Also make argument processing from an existing vector preserve commands. GitHub issue 2858.
|
#
1.48 |
|
21-Aug-2021 |
nicm |
Rename a member to match what it will be in future.
|
#
1.47 |
|
21-Aug-2021 |
nicm |
Add args parsing callback for some future work, currently unused.
|
#
1.46 |
|
20-Aug-2021 |
nicm |
Hide struct args behind a couple of accessor functions.
|
#
1.45 |
|
20-Aug-2021 |
nicm |
Expose args_value struct (will be needed soon) and add some missing frees.
|
Revision tags: OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE
|
#
1.44 |
|
13-Apr-2020 |
nicm |
Make client -c and -t handling common in cmd-queue.c and try to be clearer about whether the client is the target client (must have a session) or not.
|
#
1.43 |
|
13-Apr-2020 |
nicm |
Also move cmdq_item and cmdq_list into cmd-queue.c (this is to make its use more clearly defined and preparation for some future work).
|
#
1.42 |
|
13-Apr-2020 |
nicm |
Make struct cmd local to cmd.c and move it out of tmux.h.
|
#
1.41 |
|
31-Mar-2020 |
nicm |
Add a way to mark environment variables as "hidden" so they can be used by tmux but are not passed into the environment of new panes.
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.48 |
|
21-Aug-2021 |
nicm |
Rename a member to match what it will be in future.
|
#
1.47 |
|
21-Aug-2021 |
nicm |
Add args parsing callback for some future work, currently unused.
|
#
1.46 |
|
20-Aug-2021 |
nicm |
Hide struct args behind a couple of accessor functions.
|
#
1.45 |
|
20-Aug-2021 |
nicm |
Expose args_value struct (will be needed soon) and add some missing frees.
|
Revision tags: OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE
|
#
1.44 |
|
13-Apr-2020 |
nicm |
Make client -c and -t handling common in cmd-queue.c and try to be clearer about whether the client is the target client (must have a session) or not.
|
#
1.43 |
|
13-Apr-2020 |
nicm |
Also move cmdq_item and cmdq_list into cmd-queue.c (this is to make its use more clearly defined and preparation for some future work).
|
#
1.42 |
|
13-Apr-2020 |
nicm |
Make struct cmd local to cmd.c and move it out of tmux.h.
|
#
1.41 |
|
31-Mar-2020 |
nicm |
Add a way to mark environment variables as "hidden" so they can be used by tmux but are not passed into the environment of new panes.
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.44 |
|
13-Apr-2020 |
nicm |
Make client -c and -t handling common in cmd-queue.c and try to be clearer about whether the client is the target client (must have a session) or not.
|
#
1.43 |
|
13-Apr-2020 |
nicm |
Also move cmdq_item and cmdq_list into cmd-queue.c (this is to make its use more clearly defined and preparation for some future work).
|
#
1.42 |
|
13-Apr-2020 |
nicm |
Make struct cmd local to cmd.c and move it out of tmux.h.
|
#
1.41 |
|
31-Mar-2020 |
nicm |
Add a way to mark environment variables as "hidden" so they can be used by tmux but are not passed into the environment of new panes.
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.43 |
|
13-Apr-2020 |
nicm |
Also move cmdq_item and cmdq_list into cmd-queue.c (this is to make its use more clearly defined and preparation for some future work).
|
#
1.42 |
|
13-Apr-2020 |
nicm |
Make struct cmd local to cmd.c and move it out of tmux.h.
|
#
1.41 |
|
31-Mar-2020 |
nicm |
Add a way to mark environment variables as "hidden" so they can be used by tmux but are not passed into the environment of new panes.
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.41 |
|
31-Mar-2020 |
nicm |
Add a way to mark environment variables as "hidden" so they can be used by tmux but are not passed into the environment of new panes.
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.40 |
|
19-Sep-2019 |
nicm |
Add a "latest" window-size option which tries to size windows based on the most recently used client. From Tommie Gannert in GitHub issue 1869 based on earlier changes from me.
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
#
1.39 |
|
28-Apr-2019 |
nicm |
Support multiple occurances of the same argument. Use this for a new flag -e to new-window, split-window, respawn-window, respawn-pane to pass environment variables into the newly created process. From Steffen Christgau in GitHub issue 1697.
|
#
1.38 |
|
17-Apr-2019 |
nicm |
Break new window and pane creation common code from various commands and window.c into a separate file spawn.c.
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.37 |
|
12-Mar-2019 |
nicm |
Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new.
|
Revision tags: OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|
Revision tags: OPENBSD_6_2_BASE
|
#
1.36 |
|
21-Jul-2017 |
nicm |
Add -c for respawn-pane and respawn-window, from J Raynor.
|
#
1.35 |
|
25-Apr-2017 |
nicm |
Do not update TERM into config file parsing has finished.
|
#
1.34 |
|
22-Apr-2017 |
nicm |
Get rid of the extra layer of flags and cmd_prepare() and just store the CMD_FIND_* flags in the cmd_entry and call it for the command. Commands with special requirements call it themselves and update the target for hooks to use.
|
Revision tags: OPENBSD_6_1_BASE
|
#
1.33 |
|
09-Mar-2017 |
nicm |
Move server_fill_environ into environ.c and move some other common code into it.
|
#
1.32 |
|
16-Oct-2016 |
nicm |
Mass rename struct cmd_q to struct cmdq_item and related.
|
#
1.31 |
|
10-Oct-2016 |
nicm |
Add static in cmd-* and fix a few other nits.
|
Revision tags: OPENBSD_5_9_BASE OPENBSD_6_0_BASE
|
#
1.30 |
|
19-Jan-2016 |
nicm |
I no longer use my SourceForge address so replace it.
|
#
1.29 |
|
16-Dec-2015 |
nicm |
Add infrastructure to work out the best target given a pane or window alone and use it to add pane_died and pane_exited hooks.
|
#
1.28 |
|
14-Dec-2015 |
nicm |
Instead of combined flags for -c, -s, -t, split into different sets using an enum and simplify the parsing code.
|
#
1.27 |
|
13-Dec-2015 |
nicm |
Use member names in cmd_entry definitions so I stop getting confused about the order.
|
#
1.26 |
|
13-Dec-2015 |
nicm |
Instead of every command resolving the target (-t or -s) itself, prepare the state (client, session, winlink, pane) for it it before entering the command. Each command provides some flags that tell the prepare step what it is expecting.
This is a requirement for having hooks on commands (for example, if you hook "select-window -t1:2", the hook command should to operate on window 1:2 not whatever it thinks is the current window), and should allow some other target improvements.
The old cmd_find_* functions remain for the moment but that layer will be dropped later.
Joint work with Thomas Adam.
|
#
1.25 |
|
31-Oct-2015 |
nicm |
Because pledge(2) does not allow us to pass directory file descriptors around, we can't use file descriptors for the working directory because we will be unable to pass it to a privileged process to tell it where to read or write files or spawn children. So move tmux back to using strings for the current working directory. We try to check it exists with access() when it is set but ultimately fall back to ~ if it fails at time of use (or / if that fails too).
|
#
1.24 |
|
28-Oct-2015 |
nicm |
Like options, move the environ struct into environ.c.
|
Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.23 |
|
20-Oct-2014 |
nicm |
Instead of setting up the default keys by building the key struct directly with a helper function in the cmd_entry, include a table of bind-key commands and pass them through the command parser and a temporary cmd_q.
As well as being smaller, this will allow default bindings to be command sequences which will probably be needed soon.
|
Revision tags: OPENBSD_5_6_BASE
|
#
1.22 |
|
13-May-2014 |
nicm |
If multiple arguments are given to new-session, new-window, split-window, respawn-window or respawn-pane, pass them directly to execvp() to help avoid quoting problems. One argument still goes to "sh -c" like before. Requested by many over the years. Patch from J Raynor.
|
#
1.21 |
|
17-Apr-2014 |
nicm |
Set PATH explicitly, either from client or session environment. Previously it came from the session environment. From J Raynor.
|
Revision tags: OPENBSD_5_5_BASE
|
#
1.20 |
|
10-Oct-2013 |
nicm |
Pass -1 for cwd now not NULL.
|
#
1.19 |
|
10-Oct-2013 |
nicm |
Remove the barely-used and unnecessary command check() function.
|
Revision tags: OPENBSD_5_4_BASE
|
#
1.18 |
|
24-Mar-2013 |
nicm |
Add resize-pane -Z to temporary zoom the active pane to occupy the full window or unzoom (restored to the normal layout) if it already zoomed, bound to C-b z by default. The pane is unzoomed on pretty much any excuse whatsoever.
We considered making this a new layout but the requirements are quite different from layouts so decided it is better as a special case. Each current layout cell is saved, a temporary one-cell layout generated and all except the active pane set to NULL.
Prompted by suggestions and scripts from several. Thanks to Aaron Jensen and Thiago Padilha for testing an earlier version.
|
#
1.17 |
|
24-Mar-2013 |
nicm |
Add a command queue to standardize and simplify commands that call other 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.
|
Revision tags: OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.16 |
|
11-Jul-2012 |
nicm |
Make command exec functions return an enum rather than -1/0/1 values and add a new value to mean "leave client running but don't attach" to fix problems with using some commands in a command sequence. Most of the work by Thomas Adam, problem reported by "jspenguin" on SF bug 3535531.
|
#
1.15 |
|
10-Jul-2012 |
nicm |
xfree is not particularly helpful, remove it. From Thomas Adam.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE
|
#
1.14 |
|
04-Jul-2011 |
nicm |
Use screen_reinit for respawn-pane to keep history and call input_init for respawn-window to break out of waiting for DCS/OSC to finish.
|
Revision tags: OPENBSD_4_9_BASE
|
#
1.13 |
|
04-Jan-2011 |
nicm |
Clean up and simplify tmux command argument parsing.
Originally, tmux commands were parsed in the client process into a struct with the command data which was then serialised and sent to the server to be executed. The parsing was later moved into the server (an argv was sent from the client), but the parse step and intermediate struct was kept.
This change removes that struct and the separate parse step. Argument parsing and printing is now common to all commands (in arguments.c) with each command left with just an optional check function (to validate the arguments at parse time), the exec function and a function to set up any key bindings (renamed from the old init function).
This is overall more simple and consistent.
There should be no changes to any commands behaviour or syntax although as this touches every command please watch for any unexpected changes.
|
Revision tags: OPENBSD_4_7_BASE OPENBSD_4_8_BASE
|
#
1.12 |
|
03-Dec-2009 |
nicm |
Massive spaces->tabs and trailing whitespace cleanup, hopefully for the last time now I've configured emacs to make them displayed in really annoying colours...
|
#
1.11 |
|
13-Nov-2009 |
nicm |
Get rid of the ugly CMD_CHFLAG macro and use a const string (eg "dDU") in the command entry structs and a couple of functions to check/set the flags.
|
#
1.10 |
|
13-Nov-2009 |
nicm |
Destroy panes immediately rather than checking them all every loop.
|
#
1.9 |
|
16-Sep-2009 |
nicm |
Rather than constructing an entire termios struct from ttydefaults.h, just let forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
|
#
1.8 |
|
01-Sep-2009 |
nicm |
When using tmux as a login shell, there is currently no way to specify a shell to be used as a login shell inside tmux, so add a default-shell session option. This sets the shell invoked as a login shell when the default-command option is empty.
The default option value is whichever of $SHELL, getpwuid(getuid())'s pw_shell or /bin/sh is valid first.
Based on a diff from martynas@, changed by me to be a session option rather than a window option.
|
#
1.7 |
|
13-Aug-2009 |
nicm |
When creating a new session from the command-line where there is an external terminal, copy the termios(4) special characters and use them for new windows created in the new session. Suggested by Theo.
|
#
1.6 |
|
08-Aug-2009 |
nicm |
Infrastructure and commands to manage the environment for processes started within tmux.
There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it.
New commands set-environment and show-environment manipulate or display the environments.
A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
|
#
1.5 |
|
26-Jul-2009 |
nicm |
Make all messages sent between the client and server fixed size.
This is the first of two changes to make the protocol more resilient and less sensitive to other changes in the code, particularly with commands. The client now packs argv into a buffer and sends it to the server for parsing, rather than doing it itself and sending the parsed command data.
As a side-effect this also removes a lot of now-unused command marshalling code.
Mixing a server without this change and a client with or vice versa will cause tmux to hang or crash, please ensure that tmux is entirely killed before upgrading.
|
#
1.4 |
|
24-Jul-2009 |
nicm |
Set the active pane when respawning a window - fixes problems when respawning a window with multiple panes.
|
#
1.3 |
|
19-Jul-2009 |
nicm |
Improved layout code.
Each window now has a tree of layout cells associated with it. In this tree, each node is either a horizontal or vertical cell containing a list of other cells running from left-to-right or top-to-bottom, or a leaf cell which is associated with a pane.
The major functional changes are:
- panes may now be split arbitrarily both horizontally (splitw -h, C-b %) and vertically (splitw -v, C-b "); - panes may be resized both horizontally and vertically (resizep -L/-R/-U/-D, bound to C-b left/right/up/down and C-b M-left/right/up/down); - layouts are now applied and then may be modified by resizing or splitting panes, rather than being fixed and reapplied when the window is resized or panes are added; - manual-vertical layout is no longer necessary, and active-only layout is gone (but may return in future); - the main-pane layouts now reduce the size of the main pane to fit all panes if possible.
Thanks to all who tested.
|
#
1.2 |
|
13-Jul-2009 |
nicm |
Having fixed flags for single-character getopt options is a bit hard to maintain and is only going to get worse as more are used. So instead, add a new uint64_t member to cmd_entry which is a bitmask of upper and lowercase options accepted by the command.
This means new single character options can be used without the need to add it explicitly to the list.
|
Revision tags: OPENBSD_4_6_BASE
|
#
1.1 |
|
01-Jun-2009 |
nicm |
Import tmux, a terminal multiplexor allowing (among other things) a single terminal to be switched between several different windows and programs displayed on one terminal be detached from one terminal and moved to another.
ok deraadt pirofti
|