I'm happy without an option and just to hardcode 3 lines which is pretty standard, so how about this (also with some trivial tidying).
I don't have a scroll wheel here but I'll take your word for it if you say it works :-). Index: input-keys.c =================================================================== RCS file: /cvs/src/usr.bin/tmux/input-keys.c,v retrieving revision 1.26 diff -u -p -r1.26 input-keys.c --- input-keys.c 10 Jul 2012 11:53:01 -0000 1.26 +++ input-keys.c 24 Sep 2012 13:15:48 -0000 @@ -204,6 +204,21 @@ input_mouse(struct window_pane *wp, stru { char buf[10]; size_t len; + int i, lines; + + /* Shift + mouse wheel scrolling: fake cursor key press events. */ + if (m->b & (MOUSE_45|MOUSE_SHIFT)) { + lines = (m->b & MOUSE_CTRL) ? 3 : 1; + if (m->b & MOUSE_ESCAPE) + lines *= 3; + for (i = 0; i < lines; i++) { + if ((m->b & MOUSE_BUTTON) == MOUSE_1) + input_key(wp, KEYC_UP); + else + input_key(wp, KEYC_DOWN); + } + return; + } if (wp->screen->mode & ALL_MOUSE_MODES) { if (wp->screen->mode & MODE_MOUSE_UTF8) { @@ -223,7 +238,7 @@ input_mouse(struct window_pane *wp, stru return; } - if ((m->b & 3) != 1 && + if ((m->b & MOUSE_BUTTON) != MOUSE_2 && options_get_number(&wp->window->options, "mode-mouse") == 1) { if (window_pane_set_mode(wp, &window_copy_mode) == 0) { window_copy_init_from_pane(wp); On Sun, Sep 16, 2012 at 11:46:54PM +0200, Marcel Partap wrote: > Scrolling mouse wheel while shift modifier key is held generates > fake cursor key events. With ctrl modifier added, speed is multi- > plied by the value of "mouse-scroll-speedup" variable (default 3). > --- > examples/tmux.vim | 2 +- > input-keys.c | 18 ++++++++++++++++-- > options-table.c | 7 +++++++ > tmux.1 | 15 +++++++++++++++ > 4 files changed, 39 insertions(+), 3 deletions(-) > > diff --git a/examples/tmux.vim b/examples/tmux.vim > index 8a66c00..6040a55 100644 > --- a/examples/tmux.vim > +++ b/examples/tmux.vim > @@ -51,7 +51,7 @@ syn keyword tmuxOptsSet > \ display-panes-[active-]colour display-[panes-]time history-limit > \ lock-after-time lock-command lock-server message-[command-]attr > \ message-[command-]bg message-[command-]fg message-limit > - \ mouse-resize-pane mouse-select-pane mouse-select-window mouse-utf8 > + \ mouse-resize-pane mouse-select-pane mouse-select-window > mouse-scroll-speedup mouse-utf8 > \ pane-[active-]border-bg pane-[active-]border-fg prefix prefix2 > \ renumber-windows repeat-time set-remain-on-exit set-titles > \ set-titles-string status status-attr status-bg status-fg > diff --git a/input-keys.c b/input-keys.c > index 2b8533d..ca740fe 100644 > --- a/input-keys.c > +++ b/input-keys.c > @@ -203,6 +203,20 @@ input_mouse(struct window_pane *wp, struct mouse_event > *m) > { > char buf[10]; > size_t len; > + int i, lines, speedup; > + > + /* Shift + mouse wheel scrolling: fake cursor key press events. */ > + if (m->b & MOUSE_45 && m->b & MOUSE_SHIFT) { > + speedup = options_get_number(&global_s_options, > "mouse-scroll-speedup"); > + /* + ctrl modifier: scroll at high speed. */ > + lines = (m->b & MOUSE_CTRL) ? speedup : 1; > + /* + meta modifier (alt): scroll at high^2 speed. */ > + if (m->b & MOUSE_ESCAPE) > + lines *= speedup; > + for (i = 0; i < lines; i++) > + input_key(wp, (m->b & MOUSE_BUTTON) == MOUSE_1 ? > KEYC_UP : KEYC_DOWN); > + return; > + } > > if (wp->screen->mode & ALL_MOUSE_MODES) { > if (wp->screen->mode & MODE_MOUSE_UTF8) { > @@ -222,13 +236,13 @@ input_mouse(struct window_pane *wp, struct mouse_event > *m) > return; > } > > - if ((m->b & 3) != 1 && > + if ((m->b & MOUSE_BUTTON) != MOUSE_2 && > options_get_number(&wp->window->options, "mouse-copy-mode") == 1) { > if (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); > + return; > } > - return; > } > } > diff --git a/options-table.c b/options-table.c > index 2762f8f..4e20e96 100644 > --- a/options-table.c > +++ b/options-table.c > @@ -238,6 +238,13 @@ const struct options_table_entry session_options_table[] > = { > .default_num = 0 > }, > > + { .name = "mouse-scroll-speedup", > + .type = OPTIONS_TABLE_NUMBER, > + .minimum = 0, > + .maximum = INT_MAX, > + .default_num = 3 > + }, > + > { .name = "mouse-utf8", > .type = OPTIONS_TABLE_FLAG, > .default_num = 0 > diff --git a/tmux.1 b/tmux.1 > index 15702c6..1b4c5fa 100644 > --- a/tmux.1 > +++ b/tmux.1 > @@ -335,6 +335,16 @@ Key bindings may be changed with the > and > .Ic unbind-key > commands. > +.Sh MOUSE INPUT > +If > +.Nm > +is run within a terminal emulator that generates xterm-compatible control > sequences, various aspects may be controlled by mouse (see > +.Ic mouse-* > +options for reference). Regardless of these settings, mouse input is always > passed through as-is to mouse-capable programs. Notable exception is the > Shift-modifier in combination with the mouse scroll wheel; this makes > +.Nm > +generate fake key up/down presses to effectively enable wheel scrolling even > in programs which do not natively support it. Wheel scrolling speed can be > increased by holding Ctrl and/or Alt (meta) modifiers, each multiplying speed > by the value of the > +.Ic mouse-scroll-speedup > +option. > .Sh COMMANDS > This section contains a list of the commands supported by > .Nm . > @@ -2235,6 +2245,11 @@ The mouse click is also passed through to the > application as normal. > .Xc > If on, clicking the mouse on a window name in the status line will select > that > window. > +.It Ic mouse-scroll-speedup Ar number > +Multiplication factor applied to mouse scrolling speed if Ctrl or Alt (meta) > +modifiers are held. The increase is cumulative, i.e. pressing both modifiers > +squares the speedup. > +The default is 3. > .It Xo Ic mouse-utf8 > .Op Ic on | off > .Xc > -- > 1.7.10.4 > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://ad.doubleclick.net/clk;258768047;13503038;j? > http://info.appdynamics.com/FreeJavaPerformanceDownload.html > _______________________________________________ > tmux-users mailing list > tmux-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tmux-users ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users