summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input-keys.c9
-rw-r--r--server-client.c28
-rw-r--r--tmux.19
-rw-r--r--tmux.h4
-rw-r--r--window-copy.c29
5 files changed, 52 insertions, 27 deletions
diff --git a/input-keys.c b/input-keys.c
index d18c4041..f799f09f 100644
--- a/input-keys.c
+++ b/input-keys.c
@@ -1,4 +1,4 @@
-/* $Id: input-keys.c,v 1.48 2011-01-07 14:34:45 tcunha Exp $ */
+/* $Id: input-keys.c,v 1.49 2011-04-25 20:33:42 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -219,5 +219,12 @@ input_mouse(struct window_pane *wp, struct mouse_event *m)
buf[len++] = m->y + 33;
}
bufferevent_write(wp->event, buf, len);
+ } else if ((m->b & MOUSE_BUTTON) != MOUSE_2) {
+ if (options_get_number(&wp->window->options, "mode-mouse") &&
+ window_pane_set_mode(wp, &window_copy_mode) == 0) {
+ window_copy_init_from_pane(wp);
+ if (wp->mode->mouse != NULL)
+ wp->mode->mouse(wp, NULL, m);
+ }
}
}
diff --git a/server-client.c b/server-client.c
index f29dd314..1e567152 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1,4 +1,4 @@
-/* $Id: server-client.c,v 1.56 2011-04-18 21:07:58 nicm Exp $ */
+/* $Id: server-client.c,v 1.57 2011-04-25 20:33:42 tcunha Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -313,7 +313,13 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
if (key == KEYC_MOUSE) {
if (c->flags & CLIENT_READONLY)
return;
- if (options_get_number(oo, "mouse-select-pane")) {
+ if (options_get_number(oo, "mouse-select-pane") &&
+ ((!(mouse->b & MOUSE_DRAG) && mouse->b != MOUSE_UP) ||
+ wp->mode != &window_copy_mode)) {
+ /*
+ * Allow pane switching in copy mode only by mouse down
+ * (click).
+ */
window_set_active_at(w, mouse->x, mouse->y);
server_redraw_window_borders(w);
wp = w->active;
@@ -444,6 +450,7 @@ server_client_reset_state(struct client *c)
struct window_pane *wp = w->active;
struct screen *s = wp->screen;
struct options *oo = &c->session->options;
+ struct options *wo = &w->options;
int status, mode;
tty_region(&c->tty, 0, c->tty.sy - 1);
@@ -459,14 +466,15 @@ server_client_reset_state(struct client *c)
* none.
*/
mode = s->mode;
- if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
- options_get_number(oo, "mouse-select-pane") &&
- (mode & ALL_MOUSE_MODES) == 0)
- mode |= MODE_MOUSE_STANDARD;
-
- if (options_get_number(oo, "mouse-select-window") &&
- (mode & ALL_MOUSE_MODES) == 0)
- mode |= MODE_MOUSE_STANDARD;
+ if ((mode & ALL_MOUSE_MODES) == 0) {
+ if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
+ options_get_number(oo, "mouse-select-pane") == 0)
+ mode |= MODE_MOUSE_STANDARD;
+ else if (options_get_number(oo, "mouse-select-window"))
+ mode |= MODE_MOUSE_STANDARD;
+ else if (options_get_number(wo, "mode-mouse"))
+ mode |= MODE_MOUSE_STANDARD;
+ }
/*
* Set UTF-8 mouse input if required. If the terminal is UTF-8, the
diff --git a/tmux.1 b/tmux.1
index e5f2af56..e353beb4 100644
--- a/tmux.1
+++ b/tmux.1
@@ -1,4 +1,4 @@
-.\" $Id: tmux.1,v 1.308 2011-04-18 21:07:58 nicm Exp $
+.\" $Id: tmux.1,v 1.309 2011-04-25 20:33:42 tcunha Exp $
.\"
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\"
@@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: April 18 2011 $
+.Dd $Mdocdate: April 19 2011 $
.Dt TMUX 1
.Os
.Sh NAME
@@ -2314,8 +2314,9 @@ contains
.Op Ic on | off
.Xc
Mouse state in modes.
-If on, the mouse may be used to copy a selection by dragging in copy mode, or
-to select an option in choice mode.
+If on, the mouse may be used to enter copy mode and copy a selection by
+dragging, to enter copy mode and scroll with the mouse wheel, or to select an
+option in choice mode.
.Pp
.It Xo Ic monitor-activity
.Op Ic on | off
diff --git a/tmux.h b/tmux.h
index c860b6ac..a2e11151 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1,4 +1,4 @@
-/* $Id: tmux.h,v 1.620 2011-04-18 21:07:58 nicm Exp $ */
+/* $Id: tmux.h,v 1.621 2011-04-25 20:33:42 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1077,6 +1077,7 @@ struct mouse_event {
#define MOUSE_3 2
#define MOUSE_UP 3
#define MOUSE_BUTTON 3
+#define MOUSE_DRAG 32
#define MOUSE_45 64
u_int x;
u_int y;
@@ -1424,6 +1425,7 @@ void tty_cmd_clearstartofline(struct tty *, const struct tty_ctx *);
void tty_cmd_clearstartofscreen(struct tty *, const struct tty_ctx *);
void tty_cmd_deletecharacter(struct tty *, const struct tty_ctx *);
void tty_cmd_deleteline(struct tty *, const struct tty_ctx *);
+void tty_cmd_erasecharacter(struct tty *, const struct tty_ctx *);
void tty_cmd_insertcharacter(struct tty *, const struct tty_ctx *);
void tty_cmd_insertline(struct tty *, const struct tty_ctx *);
void tty_cmd_linefeed(struct tty *, const struct tty_ctx *);
diff --git a/window-copy.c b/window-copy.c
index 6d21d5f0..d31c744b 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1,4 +1,4 @@
-/* $Id: window-copy.c,v 1.128 2011-04-06 22:18:56 nicm Exp $ */
+/* $Id: window-copy.c,v 1.129 2011-04-25 20:33:42 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -760,11 +760,11 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
/* ARGSUSED */
void
window_copy_mouse(
- struct window_pane *wp, unused struct session *sess, struct mouse_event *m)
+ struct window_pane *wp, struct session *sess, struct mouse_event *m)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
- u_int i;
+ u_int i, old_cy;
if (m->x >= screen_size_x(s))
return;
@@ -777,8 +777,11 @@ window_copy_mouse(
for (i = 0; i < 5; i++)
window_copy_cursor_up(wp, 0);
} else if ((m->b & MOUSE_BUTTON) == MOUSE_2) {
+ old_cy = data->cy;
for (i = 0; i < 5; i++)
window_copy_cursor_down(wp, 0);
+ if (old_cy == data->cy)
+ goto reset_mode;
}
return;
}
@@ -792,15 +795,9 @@ window_copy_mouse(
window_copy_update_cursor(wp, m->x, m->y);
if (window_copy_update_selection(wp))
window_copy_redraw_screen(wp);
- } else {
- s->mode &= ~MODE_MOUSE_ANY;
- s->mode |= MODE_MOUSE_STANDARD;
- if (sess != NULL) {
- window_copy_copy_selection(wp);
- window_pane_reset_mode(wp);
- }
+ return;
}
- return;
+ goto reset_mode;
}
/* Otherwise if other buttons pressed, start selection and motion. */
@@ -812,6 +809,16 @@ window_copy_mouse(
window_copy_start_selection(wp);
window_copy_redraw_screen(wp);
}
+
+ return;
+
+reset_mode:
+ s->mode &= ~MODE_MOUSE_ANY;
+ s->mode |= MODE_MOUSE_STANDARD;
+ if (sess != NULL) {
+ window_copy_copy_selection(wp);
+ window_pane_reset_mode(wp);
+ }
}
void