summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/server.c
AgeCommit message (Collapse)Author
2010-09-26Two new options:Nicholas Marriott
- 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-26Modify the permissions on the socket when adding or removing +x to showNicholas Marriott
attached sessions, rather than replacing them.
2010-08-19Do not call event_del() for signals after fork(), just use sigaction()Nicholas Marriott
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-04switch back to kqueue for now, since (a) kqueue has been fixed to dealTheo de Raadt
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-07-24kqueue(2) is currently broken when used with /dev/null and a few otherNicholas Marriott
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-06-21Give tmux sockets (but not the containing folder) groupNicholas Marriott
permissions. This allows hardlinks to the sockets to be used more easily.
2010-05-04Put this back in with the initialisation in the right order.Nicholas Marriott
2010-05-04Revert last change, it appears to be broken somehow.Nicholas Marriott
2010-05-03Make signal handler setup/teardown two common functions instead of six,Nicholas Marriott
and reset SIGCHLD after fork to fix problems with some shells. From Romain Francois.
2010-04-06Merge copy mode and output mode, dropping the latter. Idea and code fromNicholas Marriott
Micah Cowan.
2010-03-22Nuke unused variable.Nicholas Marriott
2010-02-06Use the array.h code for the causes list.Nicholas Marriott
2010-02-06Instead of bailing out on the first configuration file error, carry on,Nicholas Marriott
collecting all the errors, then start with the active window in more mode displaying them.
2010-01-30Ignore SIGHUP as well.Nicholas Marriott
2009-12-03Massive spaces->tabs and trailing whitespace cleanup, hopefully for the lastNicholas Marriott
time now I've configured emacs to make them displayed in really annoying colours...
2009-12-02Close the pane if the process died due to a signal, not just if it exitedNicholas Marriott
normally.
2009-11-26Remove a couple of unused arguments where possible, and add /* ARGSUSED */ toNicholas Marriott
the rest to reduce lint output.
2009-11-13Destroy panes immediately rather than checking them all every loop.Nicholas Marriott
2009-11-11Free the pane bufferevent when the fd is closed (the signal could come beforeNicholas Marriott
the error callback).
2009-11-11Only need to chmod +x or -x the socket when a client is created, lost orNicholas Marriott
attached, rather than every event loop.
2009-11-05EVLOOP_ONCE takes care of the wakeup, so no need to call event_loopexit(NULL).Nicholas Marriott
2009-11-05Now all timers are events, there is no longer any need to wake up every 50 ms -Nicholas Marriott
only wake up when an event happens.
2009-11-04Move status timer check into the global once-per-second timer, this could maybeNicholas Marriott
be done better but one every second is better than once every 50 ms.
2009-11-04Don't reenlist the client imsg event every loop, instead have a small functionNicholas Marriott
to it and call it after the event triggers or after a imsg is added.
2009-11-04Tell the client to exit on configuration file error.Nicholas Marriott
2009-11-04Convert the window pane (pty master side) fd over to use a bufferevent.Nicholas Marriott
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-04Call event_init() before loading the config file, since potentially it couldNicholas Marriott
set up events.
2009-11-04Switch jobs over to use a bufferevent.Nicholas Marriott
2009-11-04Initial changes to move tmux to libevent.Nicholas Marriott
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-03Change session and client activity and creation time members to have moreNicholas Marriott
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-02Reorder slightly to tidy code.Nicholas Marriott
2009-10-27Move the poll registration functions into the server-*.c files.Nicholas Marriott
2009-10-26tabs are better; ok nicmTheo de Raadt
2009-10-26Clear signal flags /before/ taking action and continue afterwards to reduceNicholas Marriott
chance of dropping signals. Pointed out by deraadt@.
2009-10-22Split the server code handling clients, jobs and windows off into separateNicholas Marriott
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-13When a session is unattached, reset its activity timer to prevent it lockingNicholas Marriott
instantly when reattached.
2009-10-12Similarly add a tty_cursor_pane function to tidy up most of the calls.Nicholas Marriott
2009-10-12_absolute is redundant, just use tty_region.Nicholas Marriott
2009-10-12Cleanup: use two functions for region setting, one for absolute and one insideNicholas Marriott
pane.
2009-10-11Add a pipe-pane command to allow a pane to be piped to a shell command, forNicholas Marriott
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-11Switch run-shell over to queue the command in the background like #().Nicholas Marriott
2009-10-11Collect status from dead jobs and don't invoke the callback until bothNicholas Marriott
all input (the socket is closed) and status is available.
2009-10-11Clean up by introducing a wrapper struct for mouse clicks rather than passingNicholas Marriott
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-11Braek some bits out of server_fill_client() that aren't really related toNicholas Marriott
polling into their own function.
2009-10-10Put all jobs on a global all_jobs list and use that in server.c instead ofNicholas Marriott
running through all the clients.
2009-10-10Rather than running status-left, status-right and window title #() with popenNicholas Marriott
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-10New option, mouse-select-pane. If on, the mouse may be used to select theNicholas Marriott
current pane. Suggested by sthen@ and also by someone else ages ago who I have forgotten.
2009-10-10Add "grouped sessions" which have independent name, options, current window andNicholas Marriott
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.
2009-10-10Support for individual session idle time locking. May be enabled by turning offNicholas Marriott
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.
2009-10-10Instead of passing a struct pollfd ** around through various functions, buildNicholas Marriott
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.