Commit Graph

546 Commits

Author SHA1 Message Date
Nicholas Marriott
0aab5811ca Use absolute movement if right at the end of the line as it isn't a reliable
place to move from relatively.
2009-10-12 14:54:19 +00:00
Nicholas Marriott
687c4a9fab Use relative cursor movement instead of absolute when possible and when
supported by the terminal to reduce the size of the output data (generally
about 10-20%).
2009-10-12 13:01:18 +00:00
Nicholas Marriott
33ae063cae Permit attributes to be turned off in #[] by prefixing with "no", for example
"noblink".
2009-10-12 11:08:02 +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
0a2a354499 Like linefeed, don't set the scroll region for reverse index unless it will be
needed.

While here, also tidy up a couple of long lines and remove an extraneous blank.
2009-10-11 22:35:10 +00:00
Jason McIntyre
b4ef3e5071 punctuation fix; 2009-10-11 14:12:10 +00:00
Nicholas Marriott
fbb030d7f7 Set the current window pointer to NULL when killing a winlink that is to be
replaced with link-window -k. This prevents it being pushed onto the last
window stack and causing a use-after-free.

Only took me an hour to find this :-/...
2009-10-11 10:39:27 +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
325e20d76d Convert if-shell over to the background job framework as well. 2009-10-11 09:10:57 +00:00
Nicholas Marriott
88f3ffe86e Remove a debugging leftover and add copyright. 2009-10-11 09:04:33 +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
abedfa77da There isn't much point in having a free function if it isn't used.
Also allow a NULL tree.
2009-10-11 07:30:07 +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
b7c364a853 -scroll mode which is dead. 2009-10-10 17:39:55 +00:00
Nicholas Marriott
5aa49e695e Split list-panes off from list-windows. 2009-10-10 17:19:38 +00:00
Nicholas Marriott
2988c594cc Accept key and mouse input for keys in zombified windows if they are in a mode.. 2009-10-10 15:29:34 +00:00
Nicholas Marriott
9ed62eeb91 When a window is zombified and automatic-rename is on, append [dead] to the
name.
2009-10-10 15:23:13 +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
Nicholas Marriott
4658c063d5 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.
2009-10-10 14:51:16 +00:00
Nicholas Marriott
3a20a05a49 There is no point setting the scroll region up for line feeds unless scrolling
is actually going to happen, so don't.
2009-10-10 10:36:46 +00:00
Nicholas Marriott
9dd72b9583 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.
2009-10-10 10:02:48 +00:00
Nicholas Marriott
b7d031cc92 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.
2009-10-10 09:46:11 +00:00
Nicholas Marriott
93b353d353 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.
2009-10-10 09:31:39 +00:00
Nicholas Marriott
bf38a311da The UTF-8 detection idea doesn't work and I am reasonably happy with the
current methods, so remove the (already #ifdef 0'd) code.
2009-10-09 07:33:12 +00:00
Nicholas Marriott
3af09ac946 Add a simple synchronize-panes window option: when set, all input to any pane
that is part of the window is also sent to all other panes in the same
window. Suggested by several, most recently Tomasz Pajor.
2009-10-09 07:27:00 +00:00
Nicholas Marriott
d528184836 Be less aggressive about turning the cursor off, only explicitly turn it off
when tmux is redrawing, otherwise leave in the state set by the application.
2009-10-09 07:23:28 +00:00
Nicholas Marriott
2cb2bb8257 Support J and K for scroll up and scroll down in copy mode with vi keys,
suggested by martynas.
2009-10-07 15:58:40 +00:00
Nicholas Marriott
56ddd3c0b1 Fix comment. 2009-10-07 07:02:40 +00:00
Nicholas Marriott
82efcc32ec Accept ^? for backspace as well as BSpace. 2009-10-06 07:32:26 +00:00
Nicholas Marriott
35ca994ba2 Remove scroll mode which is now redundant, copy mode should be used instead.
The = key binding now does nothing.
2009-10-06 07:19:32 +00:00
Nicholas Marriott
9400fdac77 Make C-Up and C-Down in copy mode scroll the screen up and down one line
without moving the cursor, like Up and Down in scroll mode (which will shortly
disappear).
2009-10-06 07:09:00 +00:00
Nicholas Marriott
4ca2200d83 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.
2009-10-05 18:30:54 +00:00
Jason McIntyre
45043ebf3e tweak previous; 2009-10-04 11:33:35 +00:00
Nicholas Marriott
d42b86d22b Get / and ? the right way round in vi mode, and use : for goto line rather than
g.
2009-10-04 11:18:26 +00:00
Nicholas Marriott
c734789b18 Check for already locked/suspended clients in server_lock_client rather than
its callers.
2009-10-04 10:55:30 +00:00
Nicholas Marriott
205857b232 Add a key string for space ("Space") and document the names, suggested by
guenther@. Also document how to bind " and ', suggested by miod@.
2009-10-04 08:50:05 +00:00
Nicholas Marriott
97ca5711f9 C-v and M-v too. 2009-10-04 08:26:41 +00:00
Nicholas Marriott
123ae9e103 Support C-n/C-p with emacs keys in choice mode, also fix a comment. 2009-10-04 08:23:01 +00:00
Nicholas Marriott
8fa1858a2c New lock-client and lock-session commands to lock an individual client or all
clients attached to a session respectively.
2009-09-24 14:17:09 +00:00
Nicholas Marriott
1764ef81ef Don't allow locked or suspended clients to limit the size of active clients. 2009-09-24 07:02:56 +00:00
Nicholas Marriott
fecf8dc44e Remove PROMPT_HIDDEN code which is now unused. 2009-09-23 14:42:48 +00:00
Nicholas Marriott
9200a0be7a Support -c like sh(1) to execute a command, useful when tmux is a login
shell. Suggested by halex@.

This includes another protocol version increase (the last for now) so again
restart the tmux server before upgrading.
2009-09-23 12:03:30 +00:00
Nicholas Marriott
18ea820cb0 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.
2009-09-23 08:21:57 +00:00
Nicholas Marriott
631a618238 Don't die if the client is detaching (the tty has been closed) after waking up
from locking.
2009-09-23 07:25:31 +00:00
Nicholas Marriott
b01dcd7971 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.
2009-09-23 06:18:47 +00:00