Mercurial > emacs
changeset 15215:681866822119
(scroll-bar-drag-position): New function.
(scroll-bar-maybe-set-window-start): New function.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 11 May 1996 18:30:16 +0000 |
parents | 308abb9a57f4 |
children | f639c5d732a3 |
files | lisp/scroll-bar.el |
diffstat | 1 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/scroll-bar.el Sat May 11 18:05:52 1996 +0000 +++ b/lisp/scroll-bar.el Sat May 11 18:30:16 1996 +0000 @@ -114,6 +114,38 @@ (beginning-of-line) (set-window-start window (point)))))) +(defun scroll-bar-drag-position (portion-whole) + "Calculate new window start for drag event." + (save-excursion + (goto-char (+ (point-min) + (scroll-bar-scale portion-whole + (- (point-max) (point-min))))) + (beginning-of-line) + (point))) + +(defun scroll-bar-maybe-set-window-start (event) + "Set the window start according to where the scroll bar is dragged. +Only change window start if the new start is substantially different. +EVENT should be a scroll bar click or drag event." + (interactive "e") + (let* ((end-position (event-end event)) + (window (nth 0 end-position)) + (portion-whole (nth 2 end-position)) + (next-portion-whole (cons (1+ (car portion-whole)) + (cdr portion-whole))) + portion-start + next-portion-start + (current-start (window-start window))) + (save-excursion + (set-buffer (window-buffer window)) + (setq portion-start (scroll-bar-drag-position portion-whole)) + (setq next-portion-start (max + (scroll-bar-drag-position next-portion-whole) + (1+ portion-start))) + (if (or (> current-start next-portion-start) + (< current-start portion-start)) + (set-window-start window portion-start))))) + ;; Scroll the window to the proper position for EVENT. (defun scroll-bar-drag-1 (event) (let* ((start-position (event-start event))