-;;; fringe.el --- change fringes appearance in various ways
+;;; fringe.el --- fringe setup and control
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
;; Author: Simon Josefsson <simon@josefsson.org>
;; Maintainer: FSF
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
-;; This file contains helpful functions for customizing the appearance
-;; of the fringe.
+;; This file contains code to initialize the built-in fringe bitmaps
+;; as well as helpful functions for customizing the appearance of the
+;; fringe.
;; The code is influenced by scroll-bar.el and avoid.el. The author
;; gratefully acknowledge comments and suggestions made by Miles
(defgroup fringe nil
"Window fringes."
- :version "21.4"
+ :version "22.1"
:group 'frames)
-;; Standard fringe bitmaps
+;; Define the built-in fringe bitmaps and setup default mappings
-(defmacro fringe-bitmap-p (symbol)
- "Return non-nil if SYMBOL is a fringe bitmap."
- `(get ,symbol 'fringe))
-
-(defvar fringe-bitmaps)
-
-(unless (or (not (boundp 'fringe-bitmaps))
- (get 'left-truncation 'fringe))
- (let ((bitmaps '(left-truncation right-truncation
- up-arrow down-arrow
- continued-line continuation-line
- overlay-arrow
+(when (boundp 'fringe-bitmaps)
+ (let ((bitmaps '(question-mark
+ left-arrow right-arrow up-arrow down-arrow
+ left-curly-arrow right-curly-arrow
+ left-triangle right-triangle
top-left-angle top-right-angle
bottom-left-angle bottom-right-angle
left-bracket right-bracket
- filled-box-cursor hollow-box-cursor hollow-square
- bar-cursor hbar-cursor
+ filled-rectangle hollow-rectangle
+ filled-square hollow-square
+ vertical-bar horizontal-bar
empty-line))
- (bn 2))
+ (bn 1))
(while bitmaps
(push (car bitmaps) fringe-bitmaps)
(put (car bitmaps) 'fringe bn)
(setq bitmaps (cdr bitmaps)
- bn (1+ bn)))))
+ bn (1+ bn))))
+
+ (setq-default fringe-indicator-alist
+ '((truncation . (left-arrow right-arrow))
+ (continuation . (left-curly-arrow right-curly-arrow))
+ (overlay-arrow . right-triangle)
+ (up . up-arrow)
+ (down . down-arrow)
+ (top . (top-left-angle top-right-angle))
+ (bottom . (bottom-left-angle bottom-right-angle
+ top-right-angle top-left-angle))
+ (top-bottom . (left-bracket right-bracket
+ top-right-angle top-left-angle))
+ (empty-line . empty-line)
+ (unknown . question-mark)))
+
+ (setq-default fringe-cursor-alist
+ '((box . filled-rectangle)
+ (hollow . hollow-rectangle)
+ (bar . vertical-bar)
+ (hbar . horizontal-bar)
+ (hollow-small . hollow-square))))
+
+
+(defmacro fringe-bitmap-p (symbol)
+ "Return non-nil if SYMBOL is a fringe bitmap."
+ `(get ,symbol 'fringe))
;; Control presence of fringes
;; Otherwise impose the user-specified value of fringe-mode.
(custom-initialize-reset symbol value))))
-;;;###autoload
(defcustom fringe-mode nil
"*Specify appearance of fringes on all frames.
This variable can be nil (the default) meaning the fringes should have
it take real effect.
Setting the variable with a customization buffer also takes effect.
If you only want to modify the appearance of the fringe in one frame,
-you can use the interactive function `toggle-fringe'"
+you can use the interactive function `set-fringe-style'."
:type '(choice (const :tag "Default width" nil)
(const :tag "No fringes" 0)
(const :tag "Only right" (0 . nil))
Otherwise the negation of the fringe value in the currently selected
frame parameter is used."
(let ((mode (intern (completing-read
- "Select fringe mode for all frames (type ? for list): "
+ (concat
+ "Select fringe mode for "
+ (if all-frames "all frames" "selected frame")
+ " (type ? for list): ")
'(("none") ("default") ("left-only")
("right-only") ("half") ("minimal"))
nil t))))
nil
0)))))
-;;;###autoload
(defun fringe-mode (&optional mode)
"Set the default appearance of fringes on all frames.
(interactive (list (fringe-query-style 'all-frames)))
(set-fringe-mode mode))
-;;;###autoload
(defun set-fringe-style (&optional mode)
"Set the default appearance of fringes on the selected frame.
0)
(float (frame-char-width))))
-;; Fake defvar. Real definition using defcustom is below. The fake
-;; defvar is necessary because `fringe-indicators' and
-;; `set-fringe-indicators-1' mutually use each other.
-(defvar fringe-indicators)
-
-(defun set-fringe-indicators-1 (ignore value)
- "Set fringe indicators according to VALUE.
-This is usually invoked when setting `fringe-indicators' via customize."
- (setq fringe-indicators value)
- (setq default-indicate-empty-lines nil)
- (setq default-indicate-buffer-boundaries
- (cond
- ((memq value '(left right t))
- value)
- ((eq value 'box)
- '((top . left) (bottom . right)))
- ((eq value 'mixed)
- '((top . left) (t . right)))
- ((eq value 'empty)
- (setq default-indicate-empty-lines t)
- nil)
- (t nil))))
-
-;;;###autoload
-(defcustom fringe-indicators nil
- "Visually indicate buffer boundaries and scrolling.
-Setting this variable, changes `default-indicate-buffer-boundaries'."
- :type '(choice (const :tag "No indicators" nil)
- (const :tag "On left" left)
- (const :tag "On right" right)
- (const :tag "Opposite, no arrows" box)
- (const :tag "Opposite, arrows right" mixed)
- (const :tag "Empty lines" empty))
- :group 'fringe
- :require 'fringe
- :set 'set-fringe-indicators-1)
-
(provide 'fringe)
;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d