]> code.delx.au - gnu-emacs/blobdiff - lisp/fringe.el
Make autoloading commands prompt for autoload file (Bug#7989)
[gnu-emacs] / lisp / fringe.el
index 7ea3e8a2b5d1a8027bc9b5f733153ed427ba3b29..ce24bb60100324b114e59f4a773f27638373133f 100644 (file)
@@ -1,17 +1,18 @@
-;;; fringe.el --- fringe setup and control
+;;; fringe.el --- fringe setup and control  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2011 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Maintainer: FSF
 ;; Keywords: frames
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +20,7 @@
 ;; GNU General Public License for more details.
 
 ;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 
 (defvar fringe-mode)
 
-(defun set-fringe-mode-1 (ignore value)
+(defvar fringe-mode-explicit nil
+  "Non-nil means `set-fringe-mode' should really do something.
+This is nil while loading `fringe.el', and t afterward.")
+
+(defun set-fringe-mode-1 (_ignore value)
   "Call `set-fringe-mode' with VALUE.
 See `fringe-mode' for valid values and their effect.
 This is usually invoked when setting `fringe-mode' via customize."
@@ -104,13 +107,14 @@ This is usually invoked when setting `fringe-mode' via customize."
 See `fringe-mode' for possible values and their effect."
   (setq fringe-mode value)
 
-  (modify-all-frames-parameters
-   (list (cons 'left-fringe (if (consp fringe-mode)
-                               (car fringe-mode)
-                             fringe-mode))
-        (cons 'right-fringe (if (consp fringe-mode)
-                                (cdr fringe-mode)
-                              fringe-mode)))))
+  (when fringe-mode-explicit
+    (modify-all-frames-parameters
+     (list (cons 'left-fringe (if (consp fringe-mode)
+                                 (car fringe-mode)
+                               fringe-mode))
+          (cons 'right-fringe (if (consp fringe-mode)
+                                  (cdr fringe-mode)
+                                fringe-mode))))))
 
 ;; For initialization of fringe-mode, take account of changes
 ;; made explicitly to default-frame-alist.
@@ -131,34 +135,52 @@ See `fringe-mode' for possible values and their effect."
       ;; Otherwise impose the user-specified value of fringe-mode.
       (custom-initialize-reset symbol value))))
 
+(defconst fringe-styles
+  '(("default" . nil)
+    ("no-fringes" . 0)
+    ("right-only" . (0 . nil))
+    ("left-only" . (nil . 0))
+    ("half-width" . (4 . 4))
+    ("minimal" . (1 . 1))))
+
 (defcustom fringe-mode nil
-  "*Specify appearance of fringes on all frames.
+  "Specify appearance of fringes on all frames.
 This variable can be nil (the default) meaning the fringes should have
 the default width (8 pixels), it can be an integer value specifying
 the width of both left and right fringe (where 0 means no fringe), or
 a cons cell where car indicates width of left fringe and cdr indicates
 width of right fringe (where again 0 can be used to indicate no
 fringe).
+Note that the actual width may be rounded up to ensure that the sum of
+the width of the left and right fringes is a multiple of the frame's
+character width.  However, a fringe width of 0 is never rounded.
 To set this variable in a Lisp program, use `set-fringe-mode' to make
 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 `set-fringe-style'."
-  :type '(choice (const :tag "Default width" nil)
-                (const :tag "No fringes" 0)
-                (const :tag "Only right" (0 . nil))
-                (const :tag "Only left" (nil . 0))
-                (const :tag "Half width" (5 . 5))
-                (const :tag "Minimal" (1 . 1))
-                (integer :tag "Specific width")
-                (cons :tag "Different left/right sizes"
-                      (integer :tag "Left width")
-                      (integer :tag "Right width")))
+  :type `(choice
+          ,@ (mapcar (lambda (style)
+                      (let ((name
+                             (replace-regexp-in-string "-" " " (car style))))
+                        `(const :tag
+                                ,(concat (capitalize (substring name 0 1))
+                                         (substring name 1))
+                                ,(cdr style))))
+                    fringe-styles)
+          (integer :tag "Specific width")
+          (cons :tag "Different left/right sizes"
+                (integer :tag "Left width")
+                (integer :tag "Right width")))
   :group 'fringe
   :require 'fringe
   :initialize 'fringe-mode-initialize
   :set 'set-fringe-mode-1)
 
+;; We just set fringe-mode, but that was the default.
+;; If it is set again, that is for real.
+(setq fringe-mode-explicit t)
+
 (defun fringe-query-style (&optional all-frames)
   "Query user for fringe style.
 Returns values suitable for left-fringe and right-fringe frame parameters.
@@ -166,27 +188,20 @@ If ALL-FRAMES, the negation of the fringe values in
 `default-frame-alist' is used when user enters the empty string.
 Otherwise the negation of the fringe value in the currently selected
 frame parameter is used."
-  (let ((mode (intern (completing-read
-                      (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))))
-    (cond ((eq mode 'none) 0)
-         ((eq mode 'default) nil)
-         ((eq mode 'left-only) '(nil . 0))
-         ((eq mode 'right-only) '(0 . nil))
-         ((eq mode 'half) '(5 . 5))
-         ((eq mode 'minimal) '(1 . 1))
-         ((eq mode (intern ""))
-          (if (eq 0 (cdr (assq 'left-fringe
-                               (if all-frames
-                                   default-frame-alist
-                                 (frame-parameters (selected-frame))))))
-              nil
-            0)))))
+  (let* ((mode (completing-read
+                (concat
+                 "Select fringe mode for "
+                 (if all-frames "all frames" "selected frame")
+                 " (type ? for list): ")
+                fringe-styles nil t))
+         (style (assoc (downcase mode) fringe-styles)))
+    (if style (cdr style)
+      (if (eq 0 (cdr (assq 'left-fringe
+                           (if all-frames
+                               default-frame-alist
+                             (frame-parameters (selected-frame))))))
+          nil
+        0))))
 
 (defun fringe-mode (&optional mode)
   "Set the default appearance of fringes on all frames.
@@ -253,5 +268,4 @@ SIDE must be the symbol `left' or `right'."
 
 (provide 'fringe)
 
-;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d
 ;;; fringe.el ends here