annotate lisp/scroll-bar.el @ 42307:922f0ef2951b

(balance-windows): Use new PRESERVE-BEFORE arg to enlarge-window. Use save-selected-window. Don't try to resize windows that end at the bottom "level". Retry changing the sizes until the windows get the desired sizes. Discount the minibuffer when computing total height available.
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Dec 2001 10:34:39 +0000
parents 253f761ad37b
children 4c0ca26cfc69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 36803
diff changeset
1 ;;; scroll-bar.el --- window system-independent scroll bar support
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
2
36803
4b1f1bdaf676 (toplevel): Test if `x-toolkit-scroll-bars' is
Gerd Moellmann <gerd@gnu.org>
parents: 34871
diff changeset
3 ;; Copyright (C) 1993, 1994, 1995, 1999, 2000, 2001
4b1f1bdaf676 (toplevel): Test if `x-toolkit-scroll-bars' is
Gerd Moellmann <gerd@gnu.org>
parents: 34871
diff changeset
4 ;; Free Software Foundation, Inc.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
5
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
6 ;; Maintainer: FSF
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
7 ;; Keywords: hardware
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
9 ;; This file is part of GNU Emacs.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
10
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
14 ;; any later version.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
15
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
19 ;; GNU General Public License for more details.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
20
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
21 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
24 ;; Boston, MA 02111-1307, USA.
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
25
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
26 ;;; Commentary:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
27
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
28 ;; Window-system-independent bindings of mouse clicks on the scroll bar.
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
29 ;; Presently emulates the scroll-bar behavior of xterm.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
30
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
31 ;;; Code:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
32
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1772
diff changeset
33 (require 'mouse)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1772
diff changeset
34
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
35
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
36 ;;;; Utilities.
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
37
7222
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
38 (defun scroll-bar-event-ratio (event)
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
39 "Given a scroll bar event EVENT, return the scroll bar position as a ratio.
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
40 The value is a cons cell (PORTION . WHOLE) containing two integers
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
41 whose ratio gives the event's vertical position in the scroll bar, with 0
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
42 referring to the top and 1 to the bottom."
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
43 (nth 2 event))
3dae5675cd3e (scroll-bar-event-ratio): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4469
diff changeset
44
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
45 (defun scroll-bar-scale (num-denom whole)
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
46 "Given a pair (NUM . DENOM) and WHOLE, return (/ (* NUM WHOLE) DENOM).
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
47 This is handy for scaling a position on a scroll bar into real units,
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
48 like buffer positions. If SCROLL-BAR-POS is the (PORTION . WHOLE) pair
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
49 from a scroll bar event, then (scroll-bar-scale SCROLL-BAR-POS
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
50 \(buffer-size)) is the position in the current buffer corresponding to
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
51 that scroll bar position."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
52 ;; We multiply before we divide to maintain precision.
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
53 ;; We use floating point because the product of a large buffer size
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
54 ;; with a large scroll bar portion can easily overflow a lisp int.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
55 (truncate (/ (* (float (car num-denom)) whole) (cdr num-denom))))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
56
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
57
1954
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
58 ;;;; Helpful functions for enabling and disabling scroll bars.
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
59
18480
f0c705a82dca (scroll-bar-mode): Extra defvar to avoid warning.
Richard M. Stallman <rms@gnu.org>
parents: 18479
diff changeset
60 (defvar scroll-bar-mode)
f0c705a82dca (scroll-bar-mode): Extra defvar to avoid warning.
Richard M. Stallman <rms@gnu.org>
parents: 18479
diff changeset
61
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
62 (defvar scroll-bar-mode-explicit nil
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
63 "Non-nil means `set-scroll-bar-mode' should really do something.
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
64 This is nil while loading `scroll-bar.el', and t afterward.")
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
65
20129
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
66 (defun set-scroll-bar-mode-1 (ignore value)
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
67 (set-scroll-bar-mode value))
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
68
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
69 (defun set-scroll-bar-mode (value)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
70 "Set `scroll-bar-mode' to VALUE and put the new value into effect."
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
71 (setq scroll-bar-mode value)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
72
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
73 (when scroll-bar-mode-explicit
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
74 ;; Apply it to default-frame-alist.
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
75 (let ((parameter (assq 'vertical-scroll-bars default-frame-alist)))
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
76 (if (consp parameter)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
77 (setcdr parameter scroll-bar-mode)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
78 (setq default-frame-alist
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
79 (cons (cons 'vertical-scroll-bars scroll-bar-mode)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
80 default-frame-alist))))
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
81
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
82 ;; Apply it to existing frames.
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
83 (let ((frames (frame-list)))
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
84 (while frames
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
85 (modify-frame-parameters
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
86 (car frames)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
87 (list (cons 'vertical-scroll-bars scroll-bar-mode)))
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
88 (setq frames (cdr frames))))))
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
89
21734
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
90 (defcustom scroll-bar-mode
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
91 (if (eq system-type 'windows-nt) 'right 'left)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
92 "*Specify whether to have vertical scroll bars, and on which side.
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
93 Possible values are nil (no scroll bars), `left' (scroll bars on left)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
94 and `right' (scroll bars on right).
22908
53b018832269 (scroll-bar-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21734
diff changeset
95 To set this variable in a Lisp program, use `set-scroll-bar-mode'
53b018832269 (scroll-bar-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21734
diff changeset
96 to make it take real effect.
53b018832269 (scroll-bar-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21734
diff changeset
97 Setting the variable with a customization buffer also takes effect."
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
98 :type '(choice (const :tag "none (nil)")
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
99 (const left)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
100 (const right))
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
101 :group 'frames
20129
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
102 :set 'set-scroll-bar-mode-1)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
103
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
104 ;; We just set scroll-bar-mode, but that was the default.
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
105 ;; If it is set again, that is for real.
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
106 (setq scroll-bar-mode-explicit t)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
107
1954
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
108 (defun scroll-bar-mode (flag)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
109 "Toggle display of vertical scroll bars on all frames.
1954
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
110 This command applies to all frames that exist and frames to be
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
111 created in the future.
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
112 With a numeric argument, if the argument is negative,
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
113 turn off scroll bars; otherwise, turn on scroll bars."
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
114 (interactive "P")
4469
abb585cf9188 (scroll-bar-mode): If FLAG is non-nil, set it to its prefix-numeric-value.
Roland McGrath <roland@gnu.org>
parents: 3613
diff changeset
115 (if flag (setq flag (prefix-numeric-value flag)))
3613
f37a9c897699 * scroll-bar.el (scroll-bar-mode): Variable deleted.
Jim Blandy <jimb@redhat.com>
parents: 3588
diff changeset
116
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
117 ;; Tweedle the variable according to the argument.
20129
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
118 (set-scroll-bar-mode (if (null flag) (not scroll-bar-mode)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
119 (and (or (not (numberp flag)) (>= flag 0))
21734
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
120 (if (eq system-type 'windows-nt) 'right 'left)))))
3613
f37a9c897699 * scroll-bar.el (scroll-bar-mode): Variable deleted.
Jim Blandy <jimb@redhat.com>
parents: 3588
diff changeset
121
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
122 (defun toggle-scroll-bar (arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
123 "Toggle whether or not the selected frame has vertical scroll bars.
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
124 With arg, turn vertical scroll bars on if and only if arg is positive.
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
125 The variable `scroll-bar-mode' controls which side the scroll bars are on
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
126 when they are turned on; if it is nil, they go on the left."
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
127 (interactive "P")
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
128 (if (null arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
129 (setq arg
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
130 (if (cdr (assq 'vertical-scroll-bars
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
131 (frame-parameters (selected-frame))))
20061
fb0d3082b28c (toggle-scroll-bar): Call prefix-numeric-value.
Karl Heuer <kwzh@gnu.org>
parents: 19683
diff changeset
132 -1 1))
fb0d3082b28c (toggle-scroll-bar): Call prefix-numeric-value.
Karl Heuer <kwzh@gnu.org>
parents: 19683
diff changeset
133 (setq arg (prefix-numeric-value arg)))
21734
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
134 (modify-frame-parameters
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
135 (selected-frame)
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
136 (list (cons 'vertical-scroll-bars
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
137 (if (> arg 0)
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
138 (or scroll-bar-mode
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
139 (if (eq system-type 'windows-nt) 'right 'left)))))))
3613
f37a9c897699 * scroll-bar.el (scroll-bar-mode): Variable deleted.
Jim Blandy <jimb@redhat.com>
parents: 3588
diff changeset
140
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
141 (defun toggle-horizontal-scroll-bar (arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
142 "Toggle whether or not the selected frame has horizontal scroll bars.
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
143 With arg, turn horizontal scroll bars on if and only if arg is positive.
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
144 Horizontal scroll bars aren't implemented yet."
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
145 (interactive "P")
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
146 (error "Horizontal scroll bars aren't implemented yet"))
1954
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
147
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
148 ;;;; Buffer navigation using the scroll bar.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
149
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
150 ;;; This was used for up-events on button 2, but no longer.
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
151 (defun scroll-bar-set-window-start (event)
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
152 "Set the window start according to where the scroll bar is dragged.
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
153 EVENT should be a scroll bar click or drag event."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
154 (interactive "e")
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1772
diff changeset
155 (let* ((end-position (event-end event))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
156 (window (nth 0 end-position))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
157 (portion-whole (nth 2 end-position)))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
158 (save-excursion
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
159 (set-buffer (window-buffer window))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
160 (save-excursion
3588
9685f1d5545b * scroll-bar.el (scroll-bar-set-window-start): Remember that the
Jim Blandy <jimb@redhat.com>
parents: 3508
diff changeset
161 (goto-char (+ (point-min)
9685f1d5545b * scroll-bar.el (scroll-bar-set-window-start): Remember that the
Jim Blandy <jimb@redhat.com>
parents: 3508
diff changeset
162 (scroll-bar-scale portion-whole
9685f1d5545b * scroll-bar.el (scroll-bar-set-window-start): Remember that the
Jim Blandy <jimb@redhat.com>
parents: 3508
diff changeset
163 (- (point-max) (point-min)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
164 (beginning-of-line)
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
165 (set-window-start window (point))))))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
166
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
167 (defun scroll-bar-drag-position (portion-whole)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
168 "Calculate new window start for drag event."
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
169 (save-excursion
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
170 (goto-char (+ (point-min)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
171 (scroll-bar-scale portion-whole
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
172 (- (point-max) (point-min)))))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
173 (beginning-of-line)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
174 (point)))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
175
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
176 (defun scroll-bar-maybe-set-window-start (event)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
177 "Set the window start according to where the scroll bar is dragged.
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
178 Only change window start if the new start is substantially different.
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
179 EVENT should be a scroll bar click or drag event."
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
180 (interactive "e")
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
181 (let* ((end-position (event-end event))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
182 (window (nth 0 end-position))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
183 (portion-whole (nth 2 end-position))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
184 (next-portion-whole (cons (1+ (car portion-whole))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
185 (cdr portion-whole)))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
186 portion-start
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
187 next-portion-start
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
188 (current-start (window-start window)))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
189 (save-excursion
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
190 (set-buffer (window-buffer window))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
191 (setq portion-start (scroll-bar-drag-position portion-whole))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
192 (setq next-portion-start (max
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
193 (scroll-bar-drag-position next-portion-whole)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
194 (1+ portion-start)))
19683
af32e336d12c (scroll-bar-maybe-set-window-start): Change window
Geoff Voelker <voelker@cs.washington.edu>
parents: 18891
diff changeset
195 (if (or (>= current-start next-portion-start)
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
196 (< current-start portion-start))
15264
0eb55cad57c6 (scroll-bar-maybe-set-window-start): Always set
Karl Heuer <kwzh@gnu.org>
parents: 15215
diff changeset
197 (set-window-start window portion-start)
0eb55cad57c6 (scroll-bar-maybe-set-window-start): Always set
Karl Heuer <kwzh@gnu.org>
parents: 15215
diff changeset
198 ;; Always set window start, to ensure scroll bar position is updated.
0eb55cad57c6 (scroll-bar-maybe-set-window-start): Always set
Karl Heuer <kwzh@gnu.org>
parents: 15215
diff changeset
199 (set-window-start window current-start)))))
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
200
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
201 ;; Scroll the window to the proper position for EVENT.
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
202 (defun scroll-bar-drag-1 (event)
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
203 (let* ((start-position (event-start event))
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
204 (window (nth 0 start-position))
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
205 (portion-whole (nth 2 start-position)))
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
206 (save-excursion
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
207 (set-buffer (window-buffer window))
3508
dea00c8a47a6 (scroll-bar-drag-1):
Richard M. Stallman <rms@gnu.org>
parents: 3129
diff changeset
208 ;; Calculate position relative to the accessible part of the buffer.
dea00c8a47a6 (scroll-bar-drag-1):
Richard M. Stallman <rms@gnu.org>
parents: 3129
diff changeset
209 (goto-char (+ (point-min)
dea00c8a47a6 (scroll-bar-drag-1):
Richard M. Stallman <rms@gnu.org>
parents: 3129
diff changeset
210 (scroll-bar-scale portion-whole
dea00c8a47a6 (scroll-bar-drag-1):
Richard M. Stallman <rms@gnu.org>
parents: 3129
diff changeset
211 (- (point-max) (point-min)))))
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
212 (beginning-of-line)
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
213 (set-window-start window (point)))))
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
214
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
215 (defun scroll-bar-drag (event)
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
216 "Scroll the window by dragging the scroll bar slider.
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
217 If you click outside the slider, the window scrolls to bring the slider there."
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
218 (interactive "e")
11145
fb77829412af (scroll-bar-drag): Bind echo-keystrokes to 0.
Richard M. Stallman <rms@gnu.org>
parents: 10555
diff changeset
219 (let* (done
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
220 (echo-keystrokes 0)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
221 (end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
222 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
223 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
224 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
225 (setq before-scroll point-before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
226 (save-selected-window
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
227 (select-window window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
228 (setq before-scroll
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
229 (or before-scroll (point))))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
230 (scroll-bar-drag-1 event)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
231 (track-mouse
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
232 (while (not done)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
233 (setq event (read-event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
234 (if (eq (car-safe event) 'mouse-movement)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
235 (setq event (read-event)))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
236 (cond ((eq (car-safe event) 'scroll-bar-movement)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
237 (scroll-bar-drag-1 event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
238 (t
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
239 ;; Exit when we get the drag event; ignore that event.
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
240 (setq done t)))))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
241 (sit-for 0)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
242 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
243 (setq point-before-scroll before-scroll))))
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
244
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
245 (defun scroll-bar-scroll-down (event)
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
246 "Scroll the window's top line down to the location of the scroll bar click.
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
247 EVENT should be a scroll bar click."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
248 (interactive "e")
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
249 (let* ((end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
250 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
251 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
252 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
253 (setq before-scroll point-before-scroll))
23248
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
254 (unwind-protect
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
255 (save-selected-window
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
256 (let ((portion-whole (nth 2 end-position)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
257 (select-window window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
258 (setq before-scroll
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
259 (or before-scroll (point)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
260 (scroll-down
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
261 (scroll-bar-scale portion-whole (1- (window-height)))))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
262 (sit-for 0))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
263 (with-current-buffer (window-buffer window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
264 (setq point-before-scroll before-scroll)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
265
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
266 (defun scroll-bar-scroll-up (event)
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
267 "Scroll the line next to the scroll bar click to the top of the window.
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
268 EVENT should be a scroll bar click."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
269 (interactive "e")
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
270 (let* ((end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
271 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
272 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
273 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
274 (setq before-scroll point-before-scroll))
23248
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
275 (unwind-protect
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
276 (save-selected-window
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
277 (let ((portion-whole (nth 2 end-position)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
278 (select-window window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
279 (setq before-scroll
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
280 (or before-scroll (point)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
281 (scroll-up
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
282 (scroll-bar-scale portion-whole (1- (window-height)))))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
283 (sit-for 0))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
284 (with-current-buffer (window-buffer window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
285 (setq point-before-scroll before-scroll)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
286
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
287
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
288 ;;; Tookit scroll bars.
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
289
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
290 (defun scroll-bar-toolkit-scroll (event)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
291 (interactive "e")
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
292 (let* ((end-position (event-end event))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
293 (window (nth 0 end-position))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
294 (part (nth 4 end-position))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
295 before-scroll)
27421
34b81c946198 (scroll-bar-timer): Variable removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26510
diff changeset
296 (cond ((eq part 'end-scroll))
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
297 (t
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
298 (with-current-buffer (window-buffer window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
299 (setq before-scroll point-before-scroll))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
300 (save-selected-window
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
301 (select-window window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
302 (setq before-scroll (or before-scroll (point)))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
303 (cond ((eq part 'above-handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
304 (scroll-up '-))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
305 ((eq part 'below-handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
306 (scroll-up nil))
26510
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
307 ((eq part 'ratio)
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
308 (let* ((portion-whole (nth 2 end-position))
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
309 (lines (scroll-bar-scale portion-whole
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
310 (1- (window-height)))))
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
311 (scroll-up (cond ((not (zerop lines)) lines)
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
312 ((< (car portion-whole) 0) -1)
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
313 (t 1)))))
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
314 ((eq part 'up)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
315 (scroll-up -1))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
316 ((eq part 'down)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
317 (scroll-up 1))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
318 ((eq part 'top)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
319 (set-window-start window (point-min)))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
320 ((eq part 'bottom)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
321 (goto-char (point-max))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
322 (recenter))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
323 ((eq part 'handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
324 (scroll-bar-drag-1 event))))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
325 (sit-for 0)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
326 (with-current-buffer (window-buffer window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
327 (setq point-before-scroll before-scroll))))))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
328
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
329
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
330
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
331 ;;;; Bindings.
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
332
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
333 ;;; For now, we'll set things up to work like xterm.
36803
4b1f1bdaf676 (toplevel): Test if `x-toolkit-scroll-bars' is
Gerd Moellmann <gerd@gnu.org>
parents: 34871
diff changeset
334 (cond ((and (boundp 'x-toolkit-scroll-bars) x-toolkit-scroll-bars)
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
335 (global-set-key [vertical-scroll-bar mouse-1]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
336 'scroll-bar-toolkit-scroll))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
337 (t
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
338 (global-set-key [vertical-scroll-bar mouse-1]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
339 'scroll-bar-scroll-up)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
340 (global-set-key [vertical-scroll-bar drag-mouse-1]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
341 'scroll-bar-scroll-up)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
342 (global-set-key [vertical-scroll-bar down-mouse-2]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
343 'scroll-bar-drag)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
344 (global-set-key [vertical-scroll-bar mouse-3]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
345 'scroll-bar-scroll-down)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
346 (global-set-key [vertical-scroll-bar drag-mouse-3]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
347 'scroll-bar-scroll-down)))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
348
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
349
1973
3a08dacd8bfb These are in preparation for a more thorough renaming to occur soon.
Jim Blandy <jimb@redhat.com>
parents: 1954
diff changeset
350 (provide 'scroll-bar)
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
351
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
352 ;;; scroll-bar.el ends here