Nicholas Marriott
cc42614fa9
Change from a per-session stack of buffers to one global stack which is
...
much more convenient and also simplifies lot of code. This renders
copy-buffer useless and makes buffer-limit now a server option.
By Tiago Cunha.
2010-12-30 23:16:18 +00:00
Nicholas Marriott
acf13ce978
Store sessions in an RB tree by name rather than a list, this is tidier
...
and allows them to easily be shown sorted in various lists
(list-sessions/choose-sessions).
Keep a session index which is used in a couple of places internally but
make it an ever-increasing number rather than filling in gaps with new
sessions.
2010-12-21 22:37:59 +00:00
Nicholas Marriott
248fb14f08
Merge the before and after attach client code into one in client.c
...
(instead of two in tmux.c and client.c).
2010-10-18 20:00:02 +00:00
Nicholas Marriott
f56b4ec2ff
Trying to set FD_CLOEXEC on every fd is a lost cause, just use
...
closefrom() before exec.
2010-10-16 08:31:55 +00:00
Nicholas Marriott
9a7cde0c9b
Two new options:
...
- server option "exit-unattached" makes the server exit when no clients
are attached, even if sessions are present;
- session option "destroy-unattached" destroys a session once no clients
are attached to it.
These are useful for preventing tmux remaining in the background where
it is undesirable and when using tmux as a login shell to keep a limit
on new sessions.
2010-09-26 20:43:30 +00:00
Nicholas Marriott
66152010a7
Modify the permissions on the socket when adding or removing +x to show
...
attached sessions, rather than replacing them.
2010-09-26 18:51:48 +00:00
Nicholas Marriott
e3be9b1951
Do not call event_del() for signals after fork(), just use sigaction()
...
directly instead - calling libevent functions after fork() w/o
event_reinit() is a bad idea, even if in this case it was harmless.
2010-08-19 18:29:01 +00:00
Theo Deraadt
4274a7ec89
switch back to kqueue for now, since (a) kqueue has been fixed to deal
...
with strange devices and (b) since there appears to be a bull in the
poll code in libevent as well...
requested by nicm who is away
2010-08-04 19:46:13 +00:00
Nicholas Marriott
bf09b00fe9
kqueue(2) is currently broken when used with /dev/null and a few other
...
devices.
An upcoming fix for some problems with the client stdout/stderr handling
relies on it working, so make tmux force libevent to use poll(2) via
EVENT_NOKQUEUE, until we have fixed kqueue.
2010-07-24 19:25:31 +00:00
Nicholas Marriott
ad466a69aa
Give tmux sockets (but not the containing folder) group
...
permissions. This allows hardlinks to the sockets to be used more
easily.
2010-06-21 00:18:57 +00:00
Nicholas Marriott
c4a2fdf15b
Put this back in with the initialisation in the right order.
2010-05-04 17:28:16 +00:00
Nicholas Marriott
af5e0bd15a
Revert last change, it appears to be broken somehow.
2010-05-04 08:48:06 +00:00
Nicholas Marriott
ec1d37b1b2
Make signal handler setup/teardown two common functions instead of six,
...
and reset SIGCHLD after fork to fix problems with some shells. From
Romain Francois.
2010-05-03 16:06:32 +00:00
Nicholas Marriott
ac9daf92d7
Merge copy mode and output mode, dropping the latter. Idea and code from
...
Micah Cowan.
2010-04-06 21:35:44 +00:00
Nicholas Marriott
509ce7f766
Nuke unused variable.
2010-03-22 19:11:54 +00:00
Nicholas Marriott
4651180503
Use the array.h code for the causes list.
2010-02-06 23:22:27 +00:00
Nicholas Marriott
8aba77b7be
Instead of bailing out on the first configuration file error, carry on,
...
collecting all the errors, then start with the active window in more mode
displaying them.
2010-02-06 17:15:33 +00:00
Nicholas Marriott
65c9004550
Ignore SIGHUP as well.
2010-01-30 19:05:18 +00:00
Nicholas Marriott
15a64b805e
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...
2009-12-03 22:50:09 +00:00
Nicholas Marriott
459e9de81a
Close the pane if the process died due to a signal, not just if it exited
...
normally.
2009-12-02 15:06:14 +00:00
Nicholas Marriott
4ca857e0e9
Remove a couple of unused arguments where possible, and add /* ARGSUSED */ to
...
the rest to reduce lint output.
2009-11-26 21:37:13 +00:00
Nicholas Marriott
8e47966225
Destroy panes immediately rather than checking them all every loop.
2009-11-13 17:33:07 +00:00
Nicholas Marriott
08a8ccf46b
Free the pane bufferevent when the fd is closed (the signal could come before
...
the error callback).
2009-11-11 13:24:42 +00:00
Nicholas Marriott
2756437f4b
Only need to chmod +x or -x the socket when a client is created, lost or
...
attached, rather than every event loop.
2009-11-11 08:00:42 +00:00
Nicholas Marriott
25c604fb1c
EVLOOP_ONCE takes care of the wakeup, so no need to call event_loopexit(NULL).
2009-11-05 08:50:32 +00:00
Nicholas Marriott
38e13942ac
Now all timers are events, there is no longer any need to wake up every 50 ms -
...
only wake up when an event happens.
2009-11-05 08:48:15 +00:00
Nicholas Marriott
946ed97273
Move status timer check into the global once-per-second timer, this could maybe
...
be done better but one every second is better than once every 50 ms.
2009-11-04 23:42:51 +00:00
Nicholas Marriott
b3c4956efe
Don't reenlist the client imsg event every loop, instead have a small function
...
to it and call it after the event triggers or after a imsg is added.
2009-11-04 23:12:43 +00:00
Nicholas Marriott
fde36fccc3
Tell the client to exit on configuration file error.
2009-11-04 22:47:34 +00:00
Nicholas Marriott
a02c7e804c
Convert the window pane (pty master side) fd over to use a bufferevent.
...
The evbuffer API is very similar to the existing tmux buffer API so this was
remarkably painless. Not many possible ways to do it, I suppose.
2009-11-04 22:43:11 +00:00
Nicholas Marriott
06ffed3216
Call event_init() before loading the config file, since potentially it could
...
set up events.
2009-11-04 22:40:36 +00:00
Nicholas Marriott
4d6091379b
Switch jobs over to use a bufferevent.
2009-11-04 21:04:43 +00:00
Nicholas Marriott
abf3a5d50e
Initial changes to move tmux to libevent.
...
This moves the client-side loops are pretty much fully over to event-based only
(tmux.c and client.c) but server-side (server.c and friends) treats libevent as
a sort of clever poll, waking up after every event to run various things.
Moving the server stuff over to bufferevents and timers and so on will come
later.
2009-11-04 20:50:11 +00:00
Nicholas Marriott
5289da29ba
Change session and client activity and creation time members to have more
...
meaningful names.
Also, remove the code to try and update the session activity time for the
command client when a command message is received as is pointless because it
des not have a session.
2009-11-03 20:29:47 +00:00
Nicholas Marriott
992dd86309
Reorder slightly to tidy code.
2009-11-02 12:48:44 +00:00
Nicholas Marriott
37ffdff5ba
Move the poll registration functions into the server-*.c files.
2009-10-27 13:03:33 +00:00
Theo Deraadt
ed62d1263c
tabs are better; ok nicm
2009-10-26 21:42:04 +00:00
Nicholas Marriott
a8b1379ccb
Clear signal flags /before/ taking action and continue afterwards to reduce
...
chance of dropping signals. Pointed out by deraadt@.
2009-10-26 21:38:18 +00:00
Nicholas Marriott
eddcc3dfa9
Split the server code handling clients, jobs and windows off into separate
...
files from server.c (merging server-msg.c into the client file) and rather than
iterating over each set after poll(), allow a callback to be specified when the
fd is added and just walk once over the returned pollfds calling each callback
where needed.
More to come, getting this in so it is tested.
2009-10-22 19:41:51 +00:00
Nicholas Marriott
9294cb099f
When a session is unattached, reset its activity timer to prevent it locking
...
instantly when reattached.
2009-10-13 06:14:08 +00:00
Nicholas Marriott
762459954f
Similarly add a tty_cursor_pane function to tidy up most of the calls.
2009-10-12 09:29:58 +00:00
Nicholas Marriott
972a6f5656
_absolute is redundant, just use tty_region.
2009-10-12 09:16:59 +00:00
Nicholas Marriott
f05b32f7ad
Cleanup: use two functions for region setting, one for absolute and one inside
...
pane.
2009-10-12 09:09:35 +00:00
Nicholas Marriott
64b5f39656
Add a pipe-pane command to allow a pane to be piped to a shell command, for
...
example:
pipe-pane 'cat >~/out'
No arguments stops outputing and closes the pipe; the -o flag toggles a pipe
and on and off (useful for key bindings).
Suggested by espie@.
2009-10-11 10:04:27 +00:00
Nicholas Marriott
cebc988dd4
Switch run-shell over to queue the command in the background like #().
2009-10-11 08:58:05 +00:00
Nicholas Marriott
ff4b4e667a
Collect status from dead jobs and don't invoke the callback until both
...
all input (the socket is closed) and status is available.
2009-10-11 07:20:16 +00:00
Nicholas Marriott
4bc0f6e7e9
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.
2009-10-11 07:01:10 +00:00
Nicholas Marriott
f68ade7b1d
Braek some bits out of server_fill_client() that aren't really related to
...
polling into their own function.
2009-10-11 00:53:14 +00:00
Nicholas Marriott
095ecf2d90
Put all jobs on a global all_jobs list and use that in server.c instead of
...
running through all the clients.
2009-10-10 18:42:14 +00:00
Nicholas Marriott
6bca92db4d
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.
2009-10-10 15:03:01 +00:00