]> code.delx.au - gnu-emacs/blobdiff - lisp/scroll-bar.el
(insert-for-yank): Set yank-undo-function after calling FUNCTION,
[gnu-emacs] / lisp / scroll-bar.el
index d8e21921458b0fc3f2c3bcd0597f363860958624..74fd948ee684c19fb1f8eba2076033a77840ea3b 100644 (file)
@@ -1,6 +1,7 @@
-;;; scroll-bar.el --- window system-independent scroll bar support.
+;;; scroll-bar.el --- window system-independent scroll bar support
 
 
-;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 1999, 2000, 2001
+;;  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: hardware
 
 ;; Maintainer: FSF
 ;; Keywords: hardware
@@ -87,7 +88,9 @@ This is nil while loading `scroll-bar.el', and t afterward.")
        (setq frames (cdr frames))))))
 
 (defcustom scroll-bar-mode
        (setq frames (cdr frames))))))
 
 (defcustom scroll-bar-mode
-  (if (eq system-type 'windows-nt) 'right 'left)
+  (cond ((eq system-type 'windows-nt) 'right)
+       ((featurep 'mac-carbon) 'right)
+       (t 'left))
   "*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).
   "*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).
@@ -98,13 +101,16 @@ Setting the variable with a customization buffer also takes effect."
                 (const left)
                 (const right))
   :group 'frames
                 (const left)
                 (const right))
   :group 'frames
+  ;; 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)
 
 ;; 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)
 
   :set 'set-scroll-bar-mode-1)
 
 ;; 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 (flag)
+(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.
   "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.
@@ -116,7 +122,9 @@ turn off scroll bars; otherwise, turn on scroll bars."
   ;; Tweedle the variable according to the argument.
   (set-scroll-bar-mode (if (null flag) (not scroll-bar-mode)
                         (and (or (not (numberp flag)) (>= flag 0))
   ;; Tweedle the variable according to the argument.
   (set-scroll-bar-mode (if (null flag) (not scroll-bar-mode)
                         (and (or (not (numberp flag)) (>= flag 0))
-                             (if (eq system-type 'windows-nt) 'right 'left)))))
+                             (cond ((eq system-type 'windows-nt) 'right)
+                                   ((featurep 'mac-carbon) 'right)
+                                   (t 'left))))))
 
 (defun toggle-scroll-bar (arg)
   "Toggle whether or not the selected frame has vertical scroll bars.
 
 (defun toggle-scroll-bar (arg)
   "Toggle whether or not the selected frame has vertical scroll bars.
@@ -135,7 +143,9 @@ when they are turned on; if it is nil, they go on the left."
    (list (cons 'vertical-scroll-bars
               (if (> arg 0)
                   (or scroll-bar-mode
    (list (cons 'vertical-scroll-bars
               (if (> arg 0)
                   (or scroll-bar-mode
-                      (if (eq system-type 'windows-nt) 'right 'left)))))))
+                      (cond ((eq system-type 'windows-nt) 'right)
+                            ((featurep 'mac-carbon) 'right)
+                            (t 'left))))))))
 
 (defun toggle-horizontal-scroll-bar (arg)
   "Toggle whether or not the selected frame has horizontal scroll bars.
 
 (defun toggle-horizontal-scroll-bar (arg)
   "Toggle whether or not the selected frame has horizontal scroll bars.
@@ -284,16 +294,66 @@ EVENT should be a scroll bar click."
        (setq point-before-scroll before-scroll)))))
 
 \f
        (setq point-before-scroll before-scroll)))))
 
 \f
-;;;; Bindings.
+;;; Tookit scroll bars.
 
 
-;;; For now, we'll set things up to work like xterm.
-(global-set-key [vertical-scroll-bar mouse-1] 'scroll-bar-scroll-up)
-(global-set-key [vertical-scroll-bar drag-mouse-1] 'scroll-bar-scroll-up)
+(defun scroll-bar-toolkit-scroll (event)
+  (interactive "e")
+  (let* ((end-position (event-end event))
+        (window (nth 0 end-position))
+        (part (nth 4 end-position))
+        before-scroll)
+    (cond ((eq part 'end-scroll))
+         (t
+          (with-current-buffer (window-buffer window)
+            (setq before-scroll point-before-scroll))
+          (save-selected-window
+            (select-window window)
+            (setq before-scroll (or before-scroll (point)))
+            (cond ((eq part 'above-handle)
+                   (scroll-up '-))
+                  ((eq part 'below-handle)
+                   (scroll-up nil))
+                  ((eq part 'ratio)
+                   (let* ((portion-whole (nth 2 end-position))
+                          (lines (scroll-bar-scale portion-whole
+                                                   (1- (window-height)))))
+                     (scroll-up (cond ((not (zerop lines)) lines)
+                                      ((< (car portion-whole) 0) -1)
+                                      (t 1)))))
+                  ((eq part 'up)
+                   (scroll-up -1))
+                  ((eq part 'down)
+                   (scroll-up 1))
+                  ((eq part 'top)
+                   (set-window-start window (point-min)))
+                  ((eq part 'bottom)
+                   (goto-char (point-max))
+                   (recenter))
+                  ((eq part 'handle)
+                   (scroll-bar-drag-1 event))))
+          (sit-for 0)
+          (with-current-buffer (window-buffer window)
+            (setq point-before-scroll before-scroll))))))
 
 
-(global-set-key [vertical-scroll-bar down-mouse-2] 'scroll-bar-drag)
 
 
-(global-set-key [vertical-scroll-bar mouse-3] 'scroll-bar-scroll-down)
-(global-set-key [vertical-scroll-bar drag-mouse-3] 'scroll-bar-scroll-down)
+\f
+;;;; Bindings.
+
+;;; 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))
+      (t
+       (global-set-key [vertical-scroll-bar mouse-1]
+                      'scroll-bar-scroll-up)
+       (global-set-key [vertical-scroll-bar drag-mouse-1]
+                      'scroll-bar-scroll-up)
+       (global-set-key [vertical-scroll-bar down-mouse-2]
+                      'scroll-bar-drag)
+       (global-set-key [vertical-scroll-bar mouse-3]
+                      'scroll-bar-scroll-down)
+       (global-set-key [vertical-scroll-bar drag-mouse-3]
+                      'scroll-bar-scroll-down)))
 
 \f
 (provide 'scroll-bar)
 
 \f
 (provide 'scroll-bar)