[comp.emacs] Scrolling emacs windows under X using the mouse.

AMANDEL%BRUSP.ANSP.BR@UICVM.UIC.EDU (02/21/90)

____________________________________________________________________
        I just got GNUemacs installed under X, and after fiddling a bit
with the mouse-bound commands, decided I wanted to be able to scroll
emacs windows with the help of the mouse.  Being new to emacs, X an Lisp
I designed this very simple command:

        (defun x-mouse-scroll-down (arg)
           "Scrolls down a page of the window the mouse is pointing at."
           (setq curr-window (selected-window))
           (x-mouse-select arg)
           (scroll-down nil)
           (select-window curr-window))
        (defkey mouse-map x-button-m-left 'x-mouse-scroll-down)

        There is a similar command for scrolling up.   Notice that I do
not want to change anything about the selected window, unless that is
the window I am pointing at.
        This command works fine except on one condition: when
scroll-down aborts, with the message "beginning of buffer".  In that
case, the mouse window stays selected.
        I have tried things like surrounding the call to scroll-down
with catch or save-excursion, to no avail.  Is there a simple solution
to this problem?
        By the way, here goes a suggestion to the X hackers out there:
the X-emacs interface would be much improved if, at user's request,
each emacs window could have scroll bars (vertical and horizontal).

        Arnaldo Mandel
        amandel@brusp.ansp.br
____________________________________________________________________

sarantos@notecnirp.Princeton.EDU (Sarantos Kapidakis) (02/23/90)

Using condition-case, it works fine:

(defun x-mouse-scroll-down (arg)
  "Scrolls down a page of the window the mouse is pointing at."
  (setq curr-window (selected-window))
  (x-mouse-select arg)
  (condition-case nil (scroll-down nil) (beginning-of-buffer))
  (select-window curr-window))
(defun x-mouse-scroll-up (arg)
  "Scrolls down a page of the window the mouse is pointing at."
  (setq curr-window (selected-window))
  (x-mouse-select arg)
  (condition-case nil (scroll-up nil) (end-of-buffer))
  (select-window curr-window))
(define-key mouse-map x-button-m-left 'x-mouse-scroll-down)
(define-key mouse-map x-button-m-right 'x-mouse-scroll-up)

sarantos