summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2015-04-19 21:34:22 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2015-04-19 21:34:22 +0000
commit68c2616c45d126c97295bff8430d37e93eef75c4 (patch)
treec7f6701e23dd1b6e06d49cca9288192bacf0021e /usr.bin/tmux/window.c
parentfb36becc81957f91d6731e0138a72f45adf221cd (diff)
Rewrite of tmux mouse support which was a mess. Instead of having
options for "mouse-this" and "mouse-that", mouse events may be bound as keys and there is one option "mouse" that turns on mouse support entirely (set -g mouse on). See the new MOUSE SUPPORT section of the man page for description of the key names and new flags (-t= to specify the pane or window under mouse as a target, and send-keys -M to pass through a mouse event). The default builtin bindings for the mouse are: bind -n MouseDown1Pane select-pane -t=; send-keys -M bind -n MouseDown1Status select-window -t= bind -n MouseDrag1Pane copy-mode -M bind -n MouseDrag1Border resize-pane -M To get the effect of turning mode-mouse off, do: unbind -n MouseDrag1Pane unbind -temacs-copy MouseDrag1Pane The old mouse options are now gone, set-option -q may be used to suppress warnings if mixing configuration files.
Diffstat (limited to 'usr.bin/tmux/window.c')
-rw-r--r--usr.bin/tmux/window.c51
1 files changed, 24 insertions, 27 deletions
diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c
index 5f4c6cecfdc..0d7832d676c 100644
--- a/usr.bin/tmux/window.c
+++ b/usr.bin/tmux/window.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window.c,v 1.117 2015/04/19 21:05:27 nicm Exp $ */
+/* $OpenBSD: window.c,v 1.118 2015/04/19 21:34:21 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -387,6 +387,18 @@ window_resize(struct window *w, u_int sx, u_int sy)
}
int
+window_has_pane(struct window *w, struct window_pane *wp)
+{
+ struct window_pane *wp1;
+
+ TAILQ_FOREACH(wp1, &w->panes, entry) {
+ if (wp1 == wp)
+ return (1);
+ }
+ return (0);
+}
+
+int
window_set_active_pane(struct window *w, struct window_pane *wp)
{
if (wp == w->active)
@@ -1052,52 +1064,37 @@ window_pane_reset_mode(struct window_pane *wp)
}
void
-window_pane_key(struct window_pane *wp, struct session *sess, int key)
+window_pane_key(struct window_pane *wp, struct client *c, struct session *s,
+ int key, struct mouse_event *m)
{
struct window_pane *wp2;
+ if (KEYC_IS_MOUSE(key) && m == NULL)
+ return;
+
if (wp->mode != NULL) {
if (wp->mode->key != NULL)
- wp->mode->key(wp, sess, key);
+ wp->mode->key(wp, c, s, key, m);
return;
}
if (wp->fd == -1 || wp->flags & PANE_INPUTOFF)
return;
- input_key(wp, key);
+ input_key(wp, key, m);
+
+ if (KEYC_IS_MOUSE(key))
+ return;
if (options_get_number(&wp->window->options, "synchronize-panes")) {
TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
if (wp2 == wp || wp2->mode != NULL)
continue;
if (wp2->fd != -1 && window_pane_visible(wp2))
- input_key(wp2, key);
+ input_key(wp2, key, NULL);
}
}
}
-void
-window_pane_mouse(struct window_pane *wp, struct session *sess,
- struct mouse_event *m)
-{
- if (!window_pane_visible(wp))
- return;
-
- if (m->x < wp->xoff || m->x >= wp->xoff + wp->sx)
- return;
- if (m->y < wp->yoff || m->y >= wp->yoff + wp->sy)
- return;
- m->x -= wp->xoff;
- m->y -= wp->yoff;
-
- if (wp->mode != NULL) {
- if (wp->mode->mouse != NULL &&
- options_get_number(&wp->window->options, "mode-mouse"))
- wp->mode->mouse(wp, sess, m);
- } else if (wp->fd != -1)
- input_mouse(wp, sess, m);
-}
-
int
window_pane_visible(struct window_pane *wp)
{