Disable logging in the short form of the test Makefile rules
[bpt/emacs.git] / lisp / scroll-bar.el
index 0a37305..2990e8e 100644 (file)
@@ -1,17 +1,17 @@
 ;;; scroll-bar.el --- window system-independent scroll bar support
 
-;; Copyright (C) 1993, 1994, 1995, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2014 Free Software Foundation, Inc.
 
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: hardware
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -31,6 +29,7 @@
 ;;; Code:
 
 (require 'mouse)
+(eval-when-compile (require 'cl-lib))
 
 \f
 ;;;; Utilities.
@@ -81,11 +80,9 @@ 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."
+  "Set the scroll bar mode to VALUE and put the new value into effect.
+See the `scroll-bar-mode' variable for possible values to use."
   (if scroll-bar-mode
       (setq previous-scroll-bar-mode scroll-bar-mode))
 
@@ -96,7 +93,7 @@ This is nil while loading `scroll-bar.el', and t afterward.")
                                              scroll-bar-mode)))))
 
 (defcustom scroll-bar-mode default-frame-scroll-bars
-  "*Specify whether to have vertical scroll bars, and on which side.
+  "Specify whether to have vertical scroll bars, and on which side.
 Possible values are nil (no scroll bars), `left' (scroll bars on left)
 and `right' (scroll bars on right).
 To set this variable in a Lisp program, use `set-scroll-bar-mode'
@@ -109,27 +106,28 @@ 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)
-  "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 negative,
-turn off scroll bars; otherwise, turn on scroll bars."
-  (interactive "P")
+(defun get-scroll-bar-mode ()
+  (declare (gv-setter set-scroll-bar-mode))
+  scroll-bar-mode)
 
-  ;; 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))))
+(define-minor-mode scroll-bar-mode
+  "Toggle vertical scroll bars on all frames (Scroll Bar mode).
+With a prefix argument ARG, enable Scroll Bar mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil.
+
+This command applies to all frames that exist and frames to be
+created in the future."
+  :variable ((get-scroll-bar-mode)
+             . (lambda (v) (set-scroll-bar-mode
+                       (if v (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.
@@ -149,7 +147,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."
@@ -158,7 +156,7 @@ Horizontal scroll bars aren't implemented yet."
 \f
 ;;;; Buffer navigation using the scroll bar.
 
-;;; This was used for up-events on button 2, but no longer.
+;; This was used for up-events on button 2, but no longer.
 (defun scroll-bar-set-window-start (event)
   "Set the window start according to where the scroll bar is dragged.
 EVENT should be a scroll bar click or drag event."
@@ -166,8 +164,7 @@ EVENT should be a scroll bar click or drag event."
   (let* ((end-position (event-end event))
         (window (nth 0 end-position))
         (portion-whole (nth 2 end-position)))
-    (save-excursion
-      (set-buffer (window-buffer window))
+    (with-current-buffer (window-buffer window)
       (save-excursion
        (goto-char (+ (point-min)
                      (scroll-bar-scale portion-whole
@@ -197,8 +194,7 @@ EVENT should be a scroll bar click or drag event."
         portion-start
         next-portion-start
         (current-start (window-start window)))
-    (save-excursion
-      (set-buffer (window-buffer window))
+    (with-current-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)
@@ -215,13 +211,13 @@ EVENT should be a scroll bar click or drag event."
         (window (nth 0 start-position))
         (portion-whole (nth 2 start-position)))
     (save-excursion
-      (set-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)))))
+      (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.
@@ -341,7 +337,7 @@ EVENT should be a scroll bar click."
 \f
 ;;;; Bindings.
 
-;;; For now, we'll set things up to work like xterm.
+;; For now, we'll set things up to work like xterm.
 (cond ((and (boundp 'x-toolkit-scroll-bars) x-toolkit-scroll-bars)
        (global-set-key [vertical-scroll-bar mouse-1]
                       'scroll-bar-toolkit-scroll))
@@ -360,5 +356,4 @@ EVENT should be a scroll bar click."
 \f
 (provide 'scroll-bar)
 
-;;; arch-tag: 6f1d01d0-0b1e-4bf8-86db-d491e0f399f3
 ;;; scroll-bar.el ends here