annotate lisp/scroll-bar.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 280c8ae2476d
children 417b1e4d63cd
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
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1993, 1994, 1995, 1999, 2000, 2001, 2002, 2003,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105994
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 108242
diff changeset
8 ;; Package: emacs
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
9
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
10 ;; This file is part of GNU Emacs.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; (at your option) any later version.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
16
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
17 ;; 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
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
20 ;; GNU General Public License for more details.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
21
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
24
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
25 ;;; Commentary:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
26
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
27 ;; 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
28 ;; Presently emulates the scroll-bar behavior of xterm.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12040
diff changeset
29
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
30 ;;; Code:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2233
diff changeset
31
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1772
diff changeset
32 (require 'mouse)
108242
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
33 (eval-when-compile (require 'cl))
1821
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
54399
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
57 (defun scroll-bar-columns (side)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
58 "Return the width, measured in columns, of the vertical scrollbar on SIDE.
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
59 SIDE must be the symbol `left' or `right'."
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
60 (let* ((wsb (window-scroll-bars))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
61 (vtype (nth 2 wsb))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
62 (cols (nth 1 wsb)))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
63 (cond
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
64 ((not (memq side '(left right)))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
65 (error "`left' or `right' expected instead of %S" side))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
66 ((and (eq vtype side) cols))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
67 ((eq (frame-parameter nil 'vertical-scroll-bars) side)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
68 ;; nil means it's a non-toolkit scroll bar, and its width in
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
69 ;; columns is 14 pixels rounded up.
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
70 (ceiling (or (frame-parameter nil 'scroll-bar-width) 14)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
71 (frame-char-width)))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
72 (0))))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 52558
diff changeset
73
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
74
1954
059d99d03aae * term/x-win.el (scroll-bar-mode, scroll-bar-mode): Move these
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
75 ;;;; 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
76
18480
f0c705a82dca (scroll-bar-mode): Extra defvar to avoid warning.
Richard M. Stallman <rms@gnu.org>
parents: 18479
diff changeset
77 (defvar scroll-bar-mode)
74982
3b9c6c0ac744 (previous-scroll-bar-mode): New variable
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
78 (defvar previous-scroll-bar-mode nil)
18480
f0c705a82dca (scroll-bar-mode): Extra defvar to avoid warning.
Richard M. Stallman <rms@gnu.org>
parents: 18479
diff changeset
79
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
80 (defvar scroll-bar-mode-explicit nil
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
81 "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
82 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
83
20129
a68db1ead5cf (set-scroll-bar-mode): Take just one arg.
Karl Heuer <kwzh@gnu.org>
parents: 20061
diff changeset
84 (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
85 "Set `scroll-bar-mode' to VALUE and put the new value into effect."
74982
3b9c6c0ac744 (previous-scroll-bar-mode): New variable
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
86 (if scroll-bar-mode
3b9c6c0ac744 (previous-scroll-bar-mode): New variable
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
87 (setq previous-scroll-bar-mode scroll-bar-mode))
3b9c6c0ac744 (previous-scroll-bar-mode): New variable
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
88
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
89 (setq scroll-bar-mode value)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
90
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
91 (when scroll-bar-mode-explicit
83496
f271076dab2d Fix toolbars on X frames when Emacs is started on a tty. (Reported by Richard Lewis.)
Karoly Lorentey <lorentey@elte.hu>
parents: 68651
diff changeset
92 (modify-all-frames-parameters (list (cons 'vertical-scroll-bars
f271076dab2d Fix toolbars on X frames when Emacs is started on a tty. (Reported by Richard Lewis.)
Karoly Lorentey <lorentey@elte.hu>
parents: 68651
diff changeset
93 scroll-bar-mode)))))
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
94
52558
3fb606ea8bf6 (set-scroll-bar-mode): Initialize to new built-in variable
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
95 (defcustom scroll-bar-mode default-frame-scroll-bars
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
96 "Specify whether to have vertical scroll bars, and on which side.
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
97 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
98 and `right' (scroll bars on right).
22908
53b018832269 (scroll-bar-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21734
diff changeset
99 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
100 to make it take real effect.
53b018832269 (scroll-bar-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21734
diff changeset
101 Setting the variable with a customization buffer also takes effect."
50398
1b58100e624c (scroll-bar-mode): Correctly specify `nil' choice.
Miles Bader <miles@gnu.org>
parents: 49016
diff changeset
102 :type '(choice (const :tag "none (nil)" nil)
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
103 (const left)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
104 (const right))
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
105 :group 'frames
47494
06a428ab2fcb (scroll-bar-mode): Specify :initialize.
Richard M. Stallman <rms@gnu.org>
parents: 42851
diff changeset
106 ;; The default value for :initialize would try to use :set
06a428ab2fcb (scroll-bar-mode): Specify :initialize.
Richard M. Stallman <rms@gnu.org>
parents: 42851
diff changeset
107 ;; when processing the file in cus-dep.el.
06a428ab2fcb (scroll-bar-mode): Specify :initialize.
Richard M. Stallman <rms@gnu.org>
parents: 42851
diff changeset
108 :initialize 'custom-initialize-default
108242
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
109 :set (lambda (sym val) (set-scroll-bar-mode val)))
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
110
18891
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
111 ;; 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
112 ;; 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
113 (setq scroll-bar-mode-explicit t)
86c0d896480e (scroll-bar-mode-explicit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18480
diff changeset
114
108242
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
115 (defun get-scroll-bar-mode () scroll-bar-mode)
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
116 (defsetf get-scroll-bar-mode set-scroll-bar-mode)
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
117 (define-minor-mode scroll-bar-mode
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
118 "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
119 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
120 created in the future.
102248
6a544631f99f * scroll-bar.el (scroll-bar-mode): Turn off scroll bars when
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
121 With a numeric argument, if the argument is positive
6a544631f99f * scroll-bar.el (scroll-bar-mode): Turn off scroll bars when
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
122 turn on scroll bars; otherwise turn off scroll bars."
108242
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
123 :variable (eq (get-scroll-bar-mode)
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
124 (or previous-scroll-bar-mode
dc6153a5f4f7 Use define-minor-mode in more cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107262
diff changeset
125 default-frame-scroll-bars)))
3613
f37a9c897699 * scroll-bar.el (scroll-bar-mode): Variable deleted.
Jim Blandy <jimb@redhat.com>
parents: 3588
diff changeset
126
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
127 (defun toggle-scroll-bar (arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
128 "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
129 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
130 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
131 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
132 (interactive "P")
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
133 (if (null arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
134 (setq arg
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
135 (if (cdr (assq 'vertical-scroll-bars
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
136 (frame-parameters (selected-frame))))
20061
fb0d3082b28c (toggle-scroll-bar): Call prefix-numeric-value.
Karl Heuer <kwzh@gnu.org>
parents: 19683
diff changeset
137 -1 1))
fb0d3082b28c (toggle-scroll-bar): Call prefix-numeric-value.
Karl Heuer <kwzh@gnu.org>
parents: 19683
diff changeset
138 (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
139 (modify-frame-parameters
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
140 (selected-frame)
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
141 (list (cons 'vertical-scroll-bars
807f4e7fa560 (scroll-bar-mode, toggle-scroll-bar): By default,
Geoff Voelker <voelker@cs.washington.edu>
parents: 21427
diff changeset
142 (if (> arg 0)
52558
3fb606ea8bf6 (set-scroll-bar-mode): Initialize to new built-in variable
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
143 (or scroll-bar-mode default-frame-scroll-bars))))))
3613
f37a9c897699 * scroll-bar.el (scroll-bar-mode): Variable deleted.
Jim Blandy <jimb@redhat.com>
parents: 3588
diff changeset
144
18479
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
145 (defun toggle-horizontal-scroll-bar (arg)
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
146 "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
147 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
148 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
149 (interactive "P")
dedaafd841c0 (toggle-scroll-bar): Moved from frame.el.
Richard M. Stallman <rms@gnu.org>
parents: 15264
diff changeset
150 (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
151
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
152 ;;;; Buffer navigation using the scroll bar.
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
153
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102248
diff changeset
154 ;; 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
155 (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
156 "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
157 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
158 (interactive "e")
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1772
diff changeset
159 (let* ((end-position (event-end event))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
160 (window (nth 0 end-position))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
161 (portion-whole (nth 2 end-position)))
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102248
diff changeset
162 (with-current-buffer (window-buffer window)
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
163 (save-excursion
3588
9685f1d5545b * scroll-bar.el (scroll-bar-set-window-start): Remember that the
Jim Blandy <jimb@redhat.com>
parents: 3508
diff changeset
164 (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
165 (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
166 (- (point-max) (point-min)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
167 (beginning-of-line)
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
168 (set-window-start window (point))))))
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
169
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
170 (defun scroll-bar-drag-position (portion-whole)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
171 "Calculate new window start for drag event."
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
172 (save-excursion
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
173 (goto-char (+ (point-min)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
174 (scroll-bar-scale portion-whole
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
175 (- (point-max) (point-min)))))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
176 (beginning-of-line)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
177 (point)))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
178
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
179 (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
180 "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
181 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
182 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
183 (interactive "e")
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
184 (let* ((end-position (event-end event))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
185 (window (nth 0 end-position))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
186 (portion-whole (nth 2 end-position))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
187 (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
188 (cdr portion-whole)))
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
189 portion-start
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
190 next-portion-start
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
191 (current-start (window-start window)))
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102248
diff changeset
192 (with-current-buffer (window-buffer window)
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
193 (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
194 (setq next-portion-start (max
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
195 (scroll-bar-drag-position next-portion-whole)
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
196 (1+ portion-start)))
19683
af32e336d12c (scroll-bar-maybe-set-window-start): Change window
Geoff Voelker <voelker@cs.washington.edu>
parents: 18891
diff changeset
197 (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
198 (< current-start portion-start))
15264
0eb55cad57c6 (scroll-bar-maybe-set-window-start): Always set
Karl Heuer <kwzh@gnu.org>
parents: 15215
diff changeset
199 (set-window-start window portion-start)
0eb55cad57c6 (scroll-bar-maybe-set-window-start): Always set
Karl Heuer <kwzh@gnu.org>
parents: 15215
diff changeset
200 ;; 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
201 (set-window-start window current-start)))))
15215
681866822119 (scroll-bar-drag-position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
202
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
203 ;; 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
204 (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
205 (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
206 (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
207 (portion-whole (nth 2 start-position)))
107262
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
208 (save-excursion
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
209 (with-current-buffer (window-buffer window)
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
210 ;; Calculate position relative to the accessible part of the buffer.
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
211 (goto-char (+ (point-min)
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
212 (scroll-bar-scale portion-whole
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
213 (- (point-max) (point-min)))))
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
214 (vertical-motion 0 window)
251ddf5539cc scroll-bar.el (scroll-bar-drag-1): Add save-excursion, bug #5654.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
215 (set-window-start window (point))))))
2698
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
216
6940c6b5d988 (scroll-bar-drag, scroll-bar-drag-1): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
217 (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
218 "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
219 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
220 (interactive "e")
11145
fb77829412af (scroll-bar-drag): Bind echo-keystrokes to 0.
Richard M. Stallman <rms@gnu.org>
parents: 10555
diff changeset
221 (let* (done
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
222 (echo-keystrokes 0)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
223 (end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
224 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
225 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
226 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
227 (setq before-scroll point-before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
228 (save-selected-window
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
229 (select-window window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
230 (setq before-scroll
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
231 (or before-scroll (point))))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
232 (scroll-bar-drag-1 event)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
233 (track-mouse
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
234 (while (not done)
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 (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
237 (setq event (read-event)))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
238 (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
239 (scroll-bar-drag-1 event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
240 (t
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
241 ;; 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
242 (setq done t)))))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
243 (sit-for 0)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
244 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
245 (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
246
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
247 (defun scroll-bar-scroll-down (event)
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
248 "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
249 EVENT should be a scroll bar click."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
250 (interactive "e")
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
251 (let* ((end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
252 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
253 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
254 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
255 (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
256 (unwind-protect
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
257 (save-selected-window
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
258 (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
259 (select-window window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
260 (setq before-scroll
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
261 (or before-scroll (point)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
262 (scroll-down
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
263 (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
264 (sit-for 0))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
265 (with-current-buffer (window-buffer window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
266 (setq point-before-scroll before-scroll)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
267
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
268 (defun scroll-bar-scroll-up (event)
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
269 "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
270 EVENT should be a scroll bar click."
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
271 (interactive "e")
21427
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
272 (let* ((end-position (event-end event))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
273 (window (nth 0 end-position))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
274 (before-scroll))
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
275 (with-current-buffer (window-buffer window)
b5a5ac474741 (scroll-bar-drag): Set point-before-scroll
Richard M. Stallman <rms@gnu.org>
parents: 20129
diff changeset
276 (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
277 (unwind-protect
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
278 (save-selected-window
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
279 (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
280 (select-window window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
281 (setq before-scroll
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
282 (or before-scroll (point)))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
283 (scroll-up
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
284 (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
285 (sit-for 0))
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
286 (with-current-buffer (window-buffer window)
6119bb0ddd69 (scroll-bar-scroll-down, scroll-bar-scroll-up):
Karl Heuer <kwzh@gnu.org>
parents: 22908
diff changeset
287 (setq point-before-scroll before-scroll)))))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
288
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
289
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
290 ;;; Tookit scroll bars.
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
291
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
292 (defun scroll-bar-toolkit-scroll (event)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
293 (interactive "e")
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
294 (let* ((end-position (event-end event))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
295 (window (nth 0 end-position))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
296 (part (nth 4 end-position))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
297 before-scroll)
27421
34b81c946198 (scroll-bar-timer): Variable removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26510
diff changeset
298 (cond ((eq part 'end-scroll))
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
299 (t
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
300 (with-current-buffer (window-buffer window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
301 (setq before-scroll point-before-scroll))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
302 (save-selected-window
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
303 (select-window window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
304 (setq before-scroll (or before-scroll (point)))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
305 (cond ((eq part 'above-handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
306 (scroll-up '-))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
307 ((eq part 'below-handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
308 (scroll-up nil))
26510
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
309 ((eq part 'ratio)
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
310 (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
311 (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
312 (1- (window-height)))))
6866d2a9a421 (scroll-bar-toolkit-scroll): add handling of the `ratio'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 24981
diff changeset
313 (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
314 ((< (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
315 (t 1)))))
24981
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
316 ((eq part 'up)
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 'down)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
319 (scroll-up 1))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
320 ((eq part 'top)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
321 (set-window-start window (point-min)))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
322 ((eq part 'bottom)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
323 (goto-char (point-max))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
324 (recenter))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
325 ((eq part 'handle)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
326 (scroll-bar-drag-1 event))))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
327 (sit-for 0)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
328 (with-current-buffer (window-buffer window)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
329 (setq point-before-scroll before-scroll))))))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
330
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
331
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
332
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
333 ;;;; Bindings.
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
334
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102248
diff changeset
335 ;; 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
336 (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
337 (global-set-key [vertical-scroll-bar mouse-1]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
338 'scroll-bar-toolkit-scroll))
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
339 (t
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
340 (global-set-key [vertical-scroll-bar 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 drag-mouse-1]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
343 'scroll-bar-scroll-up)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
344 (global-set-key [vertical-scroll-bar down-mouse-2]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
345 'scroll-bar-drag)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
346 (global-set-key [vertical-scroll-bar mouse-3]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
347 'scroll-bar-scroll-down)
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
348 (global-set-key [vertical-scroll-bar drag-mouse-3]
55c4349025cb (scroll-bar-timer): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23248
diff changeset
349 'scroll-bar-scroll-down)))
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
350
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
351
1973
3a08dacd8bfb These are in preparation for a more thorough renaming to occur soon.
Jim Blandy <jimb@redhat.com>
parents: 1954
diff changeset
352 (provide 'scroll-bar)
1772
86f58433c8aa * scrollbar.el: New file.
Jim Blandy <jimb@redhat.com>
parents: 1768
diff changeset
353
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
354 ;; arch-tag: 6f1d01d0-0b1e-4bf8-86db-d491e0f399f3
1981
bde0ca7e33b3 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1973
diff changeset
355 ;;; scroll-bar.el ends here