annotate lisp/fringe.el @ 72863:526dc1f36b09

(produce_image_glyph): Automatically crop wide images at right window edge so we can draw the cursor on the same row to avoid confusing redisplay by placing the cursor outside the visible window area.
author Kim F. Storm <storm@cua.dk>
date Thu, 14 Sep 2006 09:37:44 +0000
parents 64b2a2990f41
children e3694f1cb928 f271076dab2d d1c5430c5bff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
69070
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
1 ;;; fringe.el --- fringe setup and control
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
2
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64762
diff changeset
3 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
4
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
5 ;; Author: Simon Josefsson <simon@josefsson.org>
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
6 ;; Maintainer: FSF
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
7 ;; Keywords: frames
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
8
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
10
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
14 ;; any later version.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
15
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
20
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
24 ;; Boston, MA 02110-1301, USA.
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
25
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
26 ;;; Commentary:
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
27
69070
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
28 ;; This file contains code to initialize the built-in fringe bitmaps
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
29 ;; as well as helpful functions for customizing the appearance of the
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
30 ;; fringe.
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
31
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
32 ;; The code is influenced by scroll-bar.el and avoid.el. The author
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
33 ;; gratefully acknowledge comments and suggestions made by Miles
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
34 ;; Bader, Eli Zaretski, Richard Stallman, Pavel Janík and others which
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
35 ;; improved this package.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
36
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
37 ;;; Code:
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
38
58597
fa269b651143 (fringe): New defgroup.
Kim F. Storm <storm@cua.dk>
parents: 57538
diff changeset
39 (defgroup fringe nil
fa269b651143 (fringe): New defgroup.
Kim F. Storm <storm@cua.dk>
parents: 57538
diff changeset
40 "Window fringes."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 58599
diff changeset
41 :version "22.1"
58597
fa269b651143 (fringe): New defgroup.
Kim F. Storm <storm@cua.dk>
parents: 57538
diff changeset
42 :group 'frames)
fa269b651143 (fringe): New defgroup.
Kim F. Storm <storm@cua.dk>
parents: 57538
diff changeset
43
69070
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
44 ;; Define the built-in fringe bitmaps and setup default mappings
57261
075de3b1e798 (fringe-bitmap-p): New macro.
Kim F. Storm <storm@cua.dk>
parents: 54399
diff changeset
45
69072
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
46 (when (boundp 'fringe-bitmaps)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
47 (let ((bitmaps '(question-mark
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
48 left-arrow right-arrow up-arrow down-arrow
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
49 left-curly-arrow right-curly-arrow
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
50 left-triangle right-triangle
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
51 top-left-angle top-right-angle
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
52 bottom-left-angle bottom-right-angle
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
53 left-bracket right-bracket
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
54 filled-rectangle hollow-rectangle
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
55 filled-square hollow-square
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
56 vertical-bar horizontal-bar
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
57 empty-line))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
58 (bn 1))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
59 (while bitmaps
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
60 (push (car bitmaps) fringe-bitmaps)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
61 (put (car bitmaps) 'fringe bn)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
62 (setq bitmaps (cdr bitmaps)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
63 bn (1+ bn))))
53890
5588b6cc6fba (no-fringe-bitmap, undef-fringe-bitmap)
Kim F. Storm <storm@cua.dk>
parents: 53257
diff changeset
64
69072
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
65 (setq-default fringe-indicator-alist
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
66 '((truncation . (left-arrow right-arrow))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
67 (continuation . (left-curly-arrow right-curly-arrow))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
68 (overlay-arrow . right-triangle)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
69 (up . up-arrow)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
70 (down . down-arrow)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
71 (top . (top-left-angle top-right-angle))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
72 (bottom . (bottom-left-angle bottom-right-angle
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
73 top-right-angle top-left-angle))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
74 (top-bottom . (left-bracket right-bracket
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
75 top-right-angle top-left-angle))
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
76 (empty-line . empty-line)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
77 (unknown . question-mark)))
69050
c0e9f855475e (fringe-bitmaps): Update to new bitmap names.
Kim F. Storm <storm@cua.dk>
parents: 68651
diff changeset
78
69072
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
79 (setq-default fringe-cursor-alist
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
80 '((box . filled-rectangle)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
81 (hollow . hollow-rectangle)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
82 (bar . vertical-bar)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
83 (hbar . horizontal-bar)
64b2a2990f41 Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 69070
diff changeset
84 (hollow-small . hollow-square))))
53890
5588b6cc6fba (no-fringe-bitmap, undef-fringe-bitmap)
Kim F. Storm <storm@cua.dk>
parents: 53257
diff changeset
85
69070
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
86
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
87 (defmacro fringe-bitmap-p (symbol)
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
88 "Return non-nil if SYMBOL is a fringe bitmap."
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
89 `(get ,symbol 'fringe))
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
90
efaafdfc3b2c *** empty log message ***
Kim F. Storm <storm@cua.dk>
parents: 69066
diff changeset
91
53890
5588b6cc6fba (no-fringe-bitmap, undef-fringe-bitmap)
Kim F. Storm <storm@cua.dk>
parents: 53257
diff changeset
92 ;; Control presence of fringes
5588b6cc6fba (no-fringe-bitmap, undef-fringe-bitmap)
Kim F. Storm <storm@cua.dk>
parents: 53257
diff changeset
93
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
94 (defvar fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
95
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
96 (defun set-fringe-mode-1 (ignore value)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
97 "Call `set-fringe-mode' with VALUE.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
98 See `fringe-mode' for valid values and their effect.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
99 This is usually invoked when setting `fringe-mode' via customize."
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
100 (set-fringe-mode value))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
101
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
102 (defun set-fringe-mode (value)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
103 "Set `fringe-mode' to VALUE and put the new value into effect.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
104 See `fringe-mode' for possible values and their effect."
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
105 (setq fringe-mode value)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
106
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
107 ;; Apply it to default-frame-alist.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
108 (let ((parameter (assq 'left-fringe default-frame-alist)))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
109 (if (consp parameter)
45524
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
110 (setcdr parameter (if (consp fringe-mode)
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
111 (car fringe-mode)
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
112 fringe-mode))
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
113 (setq default-frame-alist
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
114 (cons (cons 'left-fringe (if (consp fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
115 (car fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
116 fringe-mode))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
117 default-frame-alist))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
118 (let ((parameter (assq 'right-fringe default-frame-alist)))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
119 (if (consp parameter)
45524
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
120 (setcdr parameter (if (consp fringe-mode)
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
121 (cdr fringe-mode)
f48a8ed9d03a (set-fringe-mode): Work when updating
Simon Josefsson <jas@extundo.com>
parents: 45518
diff changeset
122 fringe-mode))
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
123 (setq default-frame-alist
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
124 (cons (cons 'right-fringe (if (consp fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
125 (cdr fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
126 fringe-mode))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
127 default-frame-alist))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
128
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
129 ;; Apply it to existing frames.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
130 (let ((frames (frame-list)))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
131 (while frames
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
132 (modify-frame-parameters
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
133 (car frames)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
134 (list (cons 'left-fringe (if (consp fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
135 (car fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
136 fringe-mode))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
137 (cons 'right-fringe (if (consp fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
138 (cdr fringe-mode)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
139 fringe-mode))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
140 (setq frames (cdr frames)))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
141
57538
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
142 ;; For initialization of fringe-mode, take account of changes
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
143 ;; made explicitly to default-frame-alist.
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
144 (defun fringe-mode-initialize (symbol value)
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
145 (let* ((left-pair (assq 'left-fringe default-frame-alist))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
146 (right-pair (assq 'right-fringe default-frame-alist))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
147 (left (cdr left-pair))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
148 (right (cdr right-pair)))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
149 (if (or left-pair right-pair)
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
150 ;; If there's something in default-frame-alist for fringes,
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
151 ;; don't change it, but reflect that into the value of fringe-mode.
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
152 (progn
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
153 (setq fringe-mode (cons left right))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
154 (if (equal fringe-mode '(nil . nil))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
155 (setq fringe-mode nil))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
156 (if (equal fringe-mode '(0 . 0))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
157 (setq fringe-mode 0)))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
158 ;; Otherwise impose the user-specified value of fringe-mode.
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
159 (custom-initialize-reset symbol value))))
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
160
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
161 (defcustom fringe-mode nil
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
162 "*Specify appearance of fringes on all frames.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
163 This variable can be nil (the default) meaning the fringes should have
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
164 the default width (8 pixels), it can be an integer value specifying
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
165 the width of both left and right fringe (where 0 means no fringe), or
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
166 a cons cell where car indicates width of left fringe and cdr indicates
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
167 width of right fringe (where again 0 can be used to indicate no
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
168 fringe).
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
169 To set this variable in a Lisp program, use `set-fringe-mode' to make
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
170 it take real effect.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
171 Setting the variable with a customization buffer also takes effect.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
172 If you only want to modify the appearance of the fringe in one frame,
64192
258eefd93f5c (fringe-mode): Add period in docstring.
Juri Linkov <juri@jurta.org>
parents: 64180
diff changeset
173 you can use the interactive function `set-fringe-style'."
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
174 :type '(choice (const :tag "Default width" nil)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
175 (const :tag "No fringes" 0)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
176 (const :tag "Only right" (0 . nil))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
177 (const :tag "Only left" (nil . 0))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
178 (const :tag "Half width" (5 . 5))
45518
182c7dd36ef1 Fix :type of `fringe-mode' for last modification.
Simon Josefsson <jas@extundo.com>
parents: 45516
diff changeset
179 (const :tag "Minimal" (1 . 1))
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
180 (integer :tag "Specific width")
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
181 (cons :tag "Different left/right sizes"
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
182 (integer :tag "Left width")
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
183 (integer :tag "Right width")))
58597
fa269b651143 (fringe): New defgroup.
Kim F. Storm <storm@cua.dk>
parents: 57538
diff changeset
184 :group 'fringe
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
185 :require 'fringe
57538
6f85a547ab10 (fringe-mode-initialize): New function.
Richard M. Stallman <rms@gnu.org>
parents: 57507
diff changeset
186 :initialize 'fringe-mode-initialize
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
187 :set 'set-fringe-mode-1)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
188
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
189 (defun fringe-query-style (&optional all-frames)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
190 "Query user for fringe style.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
191 Returns values suitable for left-fringe and right-fringe frame parameters.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
192 If ALL-FRAMES, the negation of the fringe values in
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
193 `default-frame-alist' is used when user enters the empty string.
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
194 Otherwise the negation of the fringe value in the currently selected
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
195 frame parameter is used."
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
196 (let ((mode (intern (completing-read
64192
258eefd93f5c (fringe-mode): Add period in docstring.
Juri Linkov <juri@jurta.org>
parents: 64180
diff changeset
197 (concat
258eefd93f5c (fringe-mode): Add period in docstring.
Juri Linkov <juri@jurta.org>
parents: 64180
diff changeset
198 "Select fringe mode for "
258eefd93f5c (fringe-mode): Add period in docstring.
Juri Linkov <juri@jurta.org>
parents: 64180
diff changeset
199 (if all-frames "all frames" "selected frame")
258eefd93f5c (fringe-mode): Add period in docstring.
Juri Linkov <juri@jurta.org>
parents: 64180
diff changeset
200 " (type ? for list): ")
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
201 '(("none") ("default") ("left-only")
45516
6b848a738ec6 (fringe-query-style): New fringe style "minimal".
Simon Josefsson <jas@extundo.com>
parents: 45493
diff changeset
202 ("right-only") ("half") ("minimal"))
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
203 nil t))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
204 (cond ((eq mode 'none) 0)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
205 ((eq mode 'default) nil)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
206 ((eq mode 'left-only) '(nil . 0))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
207 ((eq mode 'right-only) '(0 . nil))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
208 ((eq mode 'half) '(5 . 5))
45516
6b848a738ec6 (fringe-query-style): New fringe style "minimal".
Simon Josefsson <jas@extundo.com>
parents: 45493
diff changeset
209 ((eq mode 'minimal) '(1 . 1))
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
210 ((eq mode (intern ""))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
211 (if (eq 0 (cdr (assq 'left-fringe
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
212 (if all-frames
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
213 default-frame-alist
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
214 (frame-parameters (selected-frame))))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
215 nil
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
216 0)))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
217
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
218 (defun fringe-mode (&optional mode)
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
219 "Set the default appearance of fringes on all frames.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
220
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
221 When called interactively, query the user for MODE. Valid values
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
222 for MODE include `none', `default', `left-only', `right-only',
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
223 `minimal' and `half'.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
224
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
225 When used in a Lisp program, MODE can be a cons cell where the
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
226 integer in car specifies the left fringe width and the integer in
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
227 cdr specifies the right fringe width. MODE can also be a single
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
228 integer that specifies both the left and the right fringe width.
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
229 If a fringe width specification is nil, that means to use the
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
230 default width (8 pixels). This command may round up the left and
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
231 right width specifications to ensure that their sum is a multiple
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
232 of the character width of a frame. It never rounds up a fringe
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
233 width of 0.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
234
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
235 Fringe widths set by `set-window-fringes' override the default
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
236 fringe widths set by this command. This command applies to all
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
237 frames that exist and frames to be created in the future. If you
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
238 want to set the default appearance of fringes on the selected
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
239 frame only, see the command `set-fringe-style'."
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
240 (interactive (list (fringe-query-style 'all-frames)))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
241 (set-fringe-mode mode))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
242
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
243 (defun set-fringe-style (&optional mode)
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
244 "Set the default appearance of fringes on the selected frame.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
245
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
246 When called interactively, query the user for MODE. Valid values
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
247 for MODE include `none', `default', `left-only', `right-only',
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
248 `minimal' and `half'.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
249
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
250 When used in a Lisp program, MODE can be a cons cell where the
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
251 integer in car specifies the left fringe width and the integer in
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
252 cdr specifies the right fringe width. MODE can also be a single
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
253 integer that specifies both the left and the right fringe width.
52854
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
254 If a fringe width specification is nil, that means to use the
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
255 default width (8 pixels). This command may round up the left and
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
256 right width specifications to ensure that their sum is a multiple
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
257 of the character width of a frame. It never rounds up a fringe
f6ac1fc587f8 (fringe-mode): Use active voice in docstring.
Lute Kamstra <lute@gnu.org>
parents: 52832
diff changeset
258 width of 0.
52832
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
259
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
260 Fringe widths set by `set-window-fringes' override the default
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
261 fringe widths set by this command. If you want to set the
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
262 default appearance of fringes on all frames, see the command
43bad0db6791 (fringe-mode): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
263 `fringe-mode'."
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
264 (interactive (list (fringe-query-style)))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
265 (modify-frame-parameters
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
266 (selected-frame)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
267 (list (cons 'left-fringe (if (consp mode) (car mode) mode))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
268 (cons 'right-fringe (if (consp mode) (cdr mode) mode)))))
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
269
54399
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
270 (defsubst fringe-columns (side &optional real)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
271 "Return the width, measured in columns, of the fringe area on SIDE.
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
272 If optional argument REAL is non-nil, return a real floating point
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
273 number instead of a rounded integer value.
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
274 SIDE must be the symbol `left' or `right'."
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
275 (funcall (if real '/ 'ceiling)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
276 (or (funcall (if (eq side 'left) 'car 'cadr)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
277 (window-fringes))
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
278 0)
ad02f6299e9a 2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 53890
diff changeset
279 (float (frame-char-width))))
57261
075de3b1e798 (fringe-bitmap-p): New macro.
Kim F. Storm <storm@cua.dk>
parents: 54399
diff changeset
280
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
281 (provide 'fringe)
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
282
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50127
diff changeset
283 ;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d
45493
6d49cede6000 Initial version.
Simon Josefsson <jas@extundo.com>
parents:
diff changeset
284 ;;; fringe.el ends here