]> code.delx.au - gnu-emacs/blobdiff - lisp/scroll-bar.el
(sendmail-query-once): Add an autoload cookie.
[gnu-emacs] / lisp / scroll-bar.el
index c28a417a8f38dfb2b9192048376b4edbe2106e77..54f2ba765b590f9617776d61ba9ccb4b3e5b77d5 100644 (file)
@@ -1,10 +1,10 @@
 ;;; scroll-bar.el --- window system-independent scroll bar support
 
-;; Copyright (C) 1993, 1994, 1995, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2011 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: hardware
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
@@ -29,6 +29,7 @@
 ;;; Code:
 
 (require 'mouse)
+(eval-when-compile (require 'cl))
 
 \f
 ;;;; Utilities.
@@ -79,9 +80,6 @@ SIDE must be the symbol `left' or `right'."
   "Non-nil means `set-scroll-bar-mode' should really do something.
 This is nil while loading `scroll-bar.el', and t afterward.")
 
-(defun set-scroll-bar-mode-1 (ignore value)
-  (set-scroll-bar-mode value))
-
 (defun set-scroll-bar-mode (value)
   "Set `scroll-bar-mode' to VALUE and put the new value into effect."
   (if scroll-bar-mode
@@ -107,27 +105,23 @@ Setting the variable with a customization buffer also takes effect."
   ;; The default value for :initialize would try to use :set
   ;; when processing the file in cus-dep.el.
   :initialize 'custom-initialize-default
-  :set 'set-scroll-bar-mode-1)
+  :set (lambda (_sym val) (set-scroll-bar-mode val)))
 
 ;; We just set scroll-bar-mode, but that was the default.
 ;; If it is set again, that is for real.
 (setq scroll-bar-mode-explicit t)
 
-(defun scroll-bar-mode (&optional flag)
+(defun get-scroll-bar-mode () scroll-bar-mode)
+(defsetf get-scroll-bar-mode set-scroll-bar-mode)
+(define-minor-mode scroll-bar-mode
   "Toggle display of vertical scroll bars on all frames.
 This command applies to all frames that exist and frames to be
 created in the future.
 With a numeric argument, if the argument is positive
 turn on scroll bars; otherwise turn off scroll bars."
-  (interactive "P")
-
-  ;; Tweedle the variable according to the argument.
-  (set-scroll-bar-mode (if (if (null flag)
-                              (not scroll-bar-mode)
-                            (setq flag (prefix-numeric-value flag))
-                            (or (not (numberp flag)) (> flag 0)))
-                          (or previous-scroll-bar-mode
-                              default-frame-scroll-bars))))
+  :variable (eq (get-scroll-bar-mode)
+                (or previous-scroll-bar-mode
+                    default-frame-scroll-bars)))
 
 (defun toggle-scroll-bar (arg)
   "Toggle whether or not the selected frame has vertical scroll bars.
@@ -147,7 +141,7 @@ when they are turned on; if it is nil, they go on the left."
               (if (> arg 0)
                   (or scroll-bar-mode default-frame-scroll-bars))))))
 
-(defun toggle-horizontal-scroll-bar (arg)
+(defun toggle-horizontal-scroll-bar (_arg)
   "Toggle whether or not the selected frame has horizontal scroll bars.
 With arg, turn horizontal scroll bars on if and only if arg is positive.
 Horizontal scroll bars aren't implemented yet."
@@ -210,13 +204,14 @@ EVENT should be a scroll bar click or drag event."
   (let* ((start-position (event-start event))
         (window (nth 0 start-position))
         (portion-whole (nth 2 start-position)))
-    (with-current-buffer (window-buffer window)
-      ;; Calculate position relative to the accessible part of the buffer.
-      (goto-char (+ (point-min)
-                   (scroll-bar-scale portion-whole
-                                     (- (point-max) (point-min)))))
-      (vertical-motion 0 window)
-      (set-window-start window (point)))))
+    (save-excursion
+      (with-current-buffer (window-buffer window)
+       ;; Calculate position relative to the accessible part of the buffer.
+       (goto-char (+ (point-min)
+                     (scroll-bar-scale portion-whole
+                                       (- (point-max) (point-min)))))
+       (vertical-motion 0 window)
+       (set-window-start window (point))))))
 
 (defun scroll-bar-drag (event)
   "Scroll the window by dragging the scroll bar slider.
@@ -355,5 +350,4 @@ EVENT should be a scroll bar click."
 \f
 (provide 'scroll-bar)
 
-;; arch-tag: 6f1d01d0-0b1e-4bf8-86db-d491e0f399f3
 ;;; scroll-bar.el ends here