]> code.delx.au - gnu-emacs/blobdiff - lisp/fringe.el
pcmpl-ssh-known-hosts tiny change
[gnu-emacs] / lisp / fringe.el
index d7ecd7ec6342a112cc83797bba98b688bd8cb5fb..70a28bd92f916c1ceb943f793f040ad1a734483f 100644 (file)
@@ -1,10 +1,11 @@
-;;; fringe.el --- fringe setup and control
+;;; fringe.el --- fringe setup and control  -*- coding: utf-8 -*-
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Maintainer: FSF
 ;; Keywords: frames
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
@@ -29,7 +30,7 @@
 
 ;; The code is influenced by scroll-bar.el and avoid.el.  The author
 ;; gratefully acknowledge comments and suggestions made by Miles
-;; Bader, Eli Zaretski, Richard Stallman, Pavel Janík and others which
+;; Bader, Eli Zaretskii, Richard Stallman, Pavel Janík and others which
 ;; improved this package.
 
 ;;; Code:
@@ -95,7 +96,7 @@
   "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)
+(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."
@@ -134,29 +135,43 @@ 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
@@ -173,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")
+                 ": ")
+                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.
@@ -260,5 +268,4 @@ SIDE must be the symbol `left' or `right'."
 
 (provide 'fringe)
 
-;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d
 ;;; fringe.el ends here