| Commit message (Collapse) | Author | Age |
... | |
|
|
|
|
| |
Switch run-shell over to queue the command in the background like #().
|
|
|
|
|
|
| |
Collect status from dead jobs and don't invoke the callback until both
all input (the socket is closed) and status is available.
|
|
|
|
|
|
|
|
|
| |
Clean up by introducing a wrapper struct for mouse clicks rather than passing
three u_chars around.
As a side-effect this fixes incorrectly rejecting high cursor positions
(because it was comparing them as signed char), reported by Tom Doherty.
|
|
|
|
|
|
| |
Braek some bits out of server_fill_client() that aren't really related to
polling into their own function.
|
|
|
|
|
|
| |
Put all jobs on a global all_jobs list and use that in server.c instead of
running through all the clients.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rather than running status-left, status-right and window title #() with popen
immediately every redraw, queue them up and run them in the background,
starting each once every status-interval. The actual status line uses the
output from the last run.
This brings several advantages:
- tmux itself may be called from inside #() without causing the server to hang;
- likewise, sleep or similar doesn't cause the server to block;
- commands aren't run excessively often when redrawing;
- commands shared by status-left and status-right, or used multiple times, will
only be run once.
run-shell and if-shell still use system()/popen() but will be changed over to
use this too later.
|
|
|
|
|
|
|
|
| |
New option, mouse-select-pane. If on, the mouse may be used to select the
current pane.
Suggested by sthen@ and also by someone else ages ago who I have forgotten.
|
|
|
|
|
|
|
|
|
|
| |
Add "grouped sessions" which have independent name, options, current window and
so on but where the linked windows are synchronized (ie creating, killing
windows and so on are mirrored between the sessions). A grouped session may be
created by passing -t to new-session.
Had this around for a while, tested by a couple of people.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Support for individual session idle time locking. May be enabled by turning off
the lock-server option (it is on by default). When this is off, each session
locks when it has been idle for the lock-after-time setting. When on, the
entire server locks when ALL sessions have been idle for their individual
lock-after-time settings.
This replaces one global-only option (lock-after-time) with another
(lock-server), but the default behaviour is usually preferable so there don't
seem to be many alternatives.
Diff/idea largely from Thomas Adam, tweaked by me.
|
|
|
|
|
|
|
|
|
| |
Instead of passing a struct pollfd ** around through various functions, build
them into a tree and then convert into a flat poll array before and after poll.
This adds a little code but should reduce annoying problems with ordering when
adding new things that also need to be polled.
|
|
|
|
|
|
|
|
| |
If no target client is specified to commands which accept one, try to guess the
current client, in a similar manner to how sessions already work: if the
current session can be established and has only one client, use that; otherwise
use the most recently created client.
|
|
|
|
|
| |
Don't allow locked or suspended clients to limit the size of active clients.
|
|
|
|
|
|
|
| |
On SIGTERM, just abandon any suspended/locked clients and leave them to it,
otherwise the server will hang around (refusing new connections) until they
exit properly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove the internal tmux locking and instead detach each client and run the
command specified by a new option "lock-command" (by default "lock -np") in
each client.
This means each terminal has to be unlocked individually but simplifies the
code and allows the system password to be used to unlock.
Note that the set-password command is gone, so it will need to be removed from
configuration files, and the -U command line flag has been removed.
This is the third protocol version change so again it is best to stop the tmux
server before upgrading.
|
|
|
|
|
|
|
|
|
|
| |
Permit multiple prefix keys to be defined, separated by commas, for example:
set -g prefix ^a,^b
Any key in the list acts as the prefix. The send-prefix command always sends
the first key in the list.
|
|
|
|
|
| |
Regularise some fatal messages.
|
|
|
|
|
|
|
| |
New option, set-titles-string, to allow the window title to be specified (as
for status-left/right) if set-titles is on. Also only update the title when the
status line is being redrawn.
|
|
|
|
|
| |
The default terminal size should be 80x24, not 80x25.
|
|
|
|
|
| |
Nuke unused server_client_index function, pointed out by martynas@.
|
| |
|
|
|
|
|
| |
Tidy some common code for destroying sessions into a new function.
|
|
|
|
|
|
| |
Permit options such as status-bg to be configured using the entire 256 colour
palette by setting "colour0" to "colour255".
|
|
|
|
|
|
| |
While the display-panes indicator is on screen, make the number keys select the
pane with that index.
|
|
|
|
|
|
| |
Reference count clients and sessions rather than relying on a saved index for
cmd-choose-*.
|
|
|
|
|
|
|
| |
Tiny cleanup.
ok nicm@
|
|
|
|
|
|
|
|
| |
Only redraw all clients once when the backoff timer expires rather than every
second all the time.
Reported by Simon Nicolussi.
|
|
|
|
|
| |
Tell the user when sleeping due to password backoff.
|
|
|
|
|
| |
with the right message.
|
|
|
|
|
|
|
| |
Add a new display-panes command, with two options (display-panes-colour and
display-panes-time), which displays a visual indication of the number of each
pane.
|
|
|
|
|
|
| |
Don't call tty_free unless the client is a terminal, otherwise tty_init hasn't
been called and it may end up doing close(0). From Kalle Olavi Niemitalo.
|
|
|
|
|
|
|
| |
When using source-file, run the commands in the context of the source-file
command rather than with no context. This makes things like attach work from a
file.
|
|
|
|
|
| |
Whoops, getting the comparison the right way round is usually recommended.
|
|
|
|
|
|
|
| |
options_get_number() is relatively expensive and a check for dead panes happens
a lot more often than actually finding one, so instead of getting the option
for every check, get it for every dead window found.
|
| |
|
| |
|
|
|
|
|
|
| |
Reset attributes as well as scroll region before poll(2) and add a big comment
explaining why.
|
|
|
|
|
|
|
|
| |
Initialise log_fd to -1, prevents spurious disconnection of the client when it
ends up as fd 0 (likely if the server is started with "tmux start").
Also add some extra debugging messages to server.c.
|
|
|
|
|
|
| |
Drop the no_stop argument to tty_close and tty_free in favour of a flag in the
tty struct.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Switch tmux to use imsg. This is the last major change to make the
client-server protocol more resilient and make the protocol versioning work
properly. In future, the only things requiring a protocol version bump will be
changes in the message structs, and (when both client and server have this
change) mixing different versions should nicely report an error message.
As a side effect this also makes the code tidier, fixes a problem with the way
errors reported during server startup were handled, and supports fd passing
(which will be used in future).
Looked over by eric@, thanks.
Please note that mixing a client with this change with an older server or vice
versa may cause tmux to crash or hang - tmux should be completely exited before
upgrading.
|
|
|
|
|
|
|
|
| |
Reset the attributes after drawing all or part of the screen, and reset the
region before poll(2). This reduces (but does not eliminate) the chance of the
attributes not being normal if tmux is disconnected without warning (ssh ~.,
reboot from inside, etc).
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If there is an error in the configuration file, don't just exit(1) as this can
cause the client to hang. Instead, send the error message, then mark the client
as bad and start a normal shutdown so the server exits once the error is
written.
This also allows some code duplicating daemon(3) to be trimmed and logging to
begin earlier.
Prompted by Theo noticing the behaviour on error wasn't documented.
|
|
|
|
|
|
|
|
| |
Next step towards customisable mode keys: build each default table of keys
into a named tree on start and use that for lookups. Also add command to string
translation tables and modify list-keys to show the mode key bindings (new
-t argument).
|
|
|
|
|
|
|
| |
Permit commands to be bound to key presses without the prefix key first. The
new -n flag to bind-key and unbind-key sets or removes these bindings, and
list-key shows them in []s.
|
|
|
|
|
|
| |
Make some functions which return unused values void (mostly found by lint) and
tweak a redundant expression in window_pane_set_mode.
|
|
|
|
|
|
| |
Display the number of failed password attempts (if any) when the server is
locked. From Tom Doherty.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
If these are enabled (and the monitor-activity, bell-action and monitor-content
options are configurated appropriately), when activity, a bell, or content is
detected, a message is shown.
Also tidy up the bell/activity/content code in server.c slightly and fix a
couple of errors.
|
|
|
|
|
| |
redraw it as to draw the entire screen, just skip all lines but the last.
|
|
|
|
|
|
| |
non-whitespace character. ^ with vi and M-m with emacs key bindings. Another
from Kalle Olavi Niemitalo, thanks.
|
|
|
|
|
| |
user-specified one.
|