]> code.delx.au - gnu-emacs/blobdiff - lisp/facemenu.el
Say "standard settings" instead of "factory settings".
[gnu-emacs] / lisp / facemenu.el
index 0cef2a00a499d2c2c6930e409b3f2c7527431f90..70047bfa366675b1e4397c473f75992e3b5d01f6 100644 (file)
 ;;      (italic      . [?\H-i])
 ;;      (bold-italic . [?\H-l])
 ;;      (underline   . [?\H-u])))
+;;   (facemenu-update)
 ;;   (setq facemenu-keymap global-map)
-;;   (setq facemenu-key nil)
 ;;   (define-key global-map [?\H-c] 'facemenu-set-foreground) ; set fg color
 ;;   (define-key global-map [?\H-C] 'facemenu-set-background) ; set bg color
-;;   (require 'facemenu)
 ;;
 ;; The order of the faces that appear in the menu and their keybindings can be
 ;; controlled by setting the variables `facemenu-keybindings' and
 ;;; Provide some binding for startup:
 ;;;###autoload (define-key global-map "\M-g" 'facemenu-keymap)
 ;;;###autoload (autoload 'facemenu-keymap "facemenu" "Keymap for face-changing commands." t 'keymap)
-
-(defvar facemenu-key "\M-g"
-  "Prefix key to use for facemenu commands.")
+  
+;; Global bindings:
+(define-key global-map [C-down-mouse-2] 'facemenu-menu)
+(define-key global-map "\M-g" 'facemenu-keymap)
 
 (defvar facemenu-keybindings
   '((default     . "d")
   "Alist of interesting faces and keybindings. 
 Each element is itself a list: the car is the name of the face,
 the next element is the key to use as a keyboard equivalent of the menu item;
-the binding is made in facemenu-keymap.
+the binding is made in `facemenu-keymap'.
 
 The faces specifically mentioned in this list are put at the top of
 the menu, in the order specified.  All other faces which are defined,
@@ -122,13 +122,13 @@ If you change this variable after loading facemenu.el, you will need to call
 `facemenu-update' to make it take effect.")
 
 (defvar facemenu-new-faces-at-end t
-  "Where in the menu to insert newly-created faces.
+  "*Where in the menu to insert newly-created faces.
 This should be nil to put them at the top of the menu, or t to put them
 just before \"Other\" at the end.")
 
 (defvar facemenu-unlisted-faces
   '(modeline region secondary-selection highlight scratch-face)
-  "List of faces not to include in the Face menu.
+  "*List of faces not to include in the Face menu.
 You can set this list before loading facemenu.el, or add a face to it before
 creating that face if you do not want it to be listed.  If you change the
 variable so as to eliminate faces that have already been added to the menu,
@@ -253,7 +253,7 @@ This function is passed the FACE to set, and must return a string which is
 inserted.")
 
 (defvar facemenu-remove-face-function nil
-  "When non-`nil' function called to remove faces.
+  "When non-nil, this is a function called to remove faces.
 This function is passed the START and END of text to change.
 May also be `t' meaning to use `facemenu-add-face-function'.")
 
@@ -269,10 +269,6 @@ If null, `facemenu-read-color' will set it.")
 You can call this to update things if you change any of the menu configuration
 variables."
   (interactive)
-  
-  ;; Global bindings:
-  (define-key global-map [C-down-mouse-2] 'facemenu-menu)
-  (if facemenu-key (define-key global-map facemenu-key 'facemenu-keymap))
 
   ;; Add each defined face to the menu.
   (facemenu-iterate 'facemenu-add-new-face
@@ -360,7 +356,7 @@ typing a character to insert cancels the specification."
 This sets the `invisible' text property; it can be undone with
 `facemenu-remove-special'."
   (interactive "r")
-  (put-text-property start end 'invisible t))
+  (add-text-properties start end '(invisible t)))
 
 ;;;###autoload
 (defun facemenu-set-intangible (start end)
@@ -368,7 +364,7 @@ This sets the `invisible' text property; it can be undone with
 This sets the `intangible' text property; it can be undone with
 `facemenu-remove-special'."
   (interactive "r")
-  (put-text-property start end 'intangible t))
+  (add-text-properties start end '(intangible t)))
 
 ;;;###autoload
 (defun facemenu-set-read-only (start end)
@@ -376,7 +372,7 @@ This sets the `intangible' text property; it can be undone with
 This sets the `read-only' text property; it can be undone with
 `facemenu-remove-special'."
   (interactive "r")
-  (put-text-property start end 'read-only t))
+  (add-text-properties start end '(read-only t)))
 
 ;;;###autoload
 (defun facemenu-remove-props (start end)
@@ -408,20 +404,34 @@ These special properties include `invisible', `intangible' and `read-only'."
   "Pop up a buffer listing text-properties at LOCATION."
   (interactive "d")
   (let ((props (text-properties-at p))
+       category
        str)
     (if (null props)
        (message "None")
       (if (and (not (cdr (cdr props)))
+              (not (eq (car props) 'category))
               (< (length (setq str (format "Text property at %d:  %s  %S"
                                            p (car props) (car (cdr props)))))
                  (frame-width)))
-         (message str)
+         (message "%s" str)
        (with-output-to-temp-buffer "*Text Properties*"
          (princ (format "Text properties at %d:\n\n" p))
          (while props
+           (if (eq (car props) 'category)
+               (setq category (car (cdr props))))
            (princ (format "%-20s %S\n"
                           (car props) (car (cdr props))))
-           (setq props (cdr (cdr props)))))))))
+           (setq props (cdr (cdr props))))
+         (if category
+             (progn
+               (setq props (symbol-plist category))
+               (princ (format "\nCategory %s:\n\n" category))
+               (while props
+                 (princ (format "%-20s %S\n"
+                                (car props) (car (cdr props))))
+                 (if (eq (car props) 'category)
+                     (setq category (car (cdr props))))
+                 (setq props (cdr (cdr props)))))))))))
 
 ;;;###autoload
 (defun facemenu-read-color (&optional prompt)
@@ -477,7 +487,7 @@ This function queries the window-system server to find out what the
 color names mean.  It returns nil if the colors differ or if it can't
 determine the correct answer."
   (cond ((equal a b) t)
-       ((and (or (eq window-system 'x) (eq window-system 'win32))
+       ((and (memq window-system '(x w32))
              (equal (x-color-values a) (x-color-values b))))
        ((eq window-system 'pc)
         (and (x-color-defined-p a) (x-color-defined-p b)
@@ -583,22 +593,35 @@ or nil if given a bad color."
   "Add a FACE to the appropriate Face menu.
 Automatically called when a new face is created."
   (let* ((name (symbol-name face))
-        (menu (cond ((string-match "^fg:" name) 
-                     (setq name (substring name 3))
-                     'facemenu-foreground-menu)
-                    ((string-match "^bg:" name) 
-                     (setq name (substring name 3))
-                     'facemenu-background-menu)
-                    (t 'facemenu-face-menu)))
+        menu docstring
         (key (cdr (assoc face facemenu-keybindings)))
         function menu-val)
+    (cond ((string-match "^fg:" name) 
+          (setq name (substring name 3))
+          (setq docstring
+                (format "Select foreground color %s for subsequent insertion."
+                        name))
+          (setq menu 'facemenu-foreground-menu))
+         ((string-match "^bg:" name) 
+          (setq name (substring name 3))
+          (setq docstring
+                (format "Select background color %s for subsequent insertion."
+                        name))
+          (setq menu 'facemenu-background-menu))
+         (t
+          (setq docstring
+                (format "Select face `%s' for subsequent insertion."
+                        name))
+          (setq menu 'facemenu-face-menu)))
     (cond ((eq t facemenu-unlisted-faces))
          ((memq face facemenu-unlisted-faces))
          (key ; has a keyboard equivalent.  These go at the front.
           (setq function (intern (concat "facemenu-set-" name)))
           (fset function
-                (` (lambda () (interactive)
-                     (facemenu-set-face (quote (, face))))))
+                `(lambda ()
+                   ,docstring
+                   (interactive)
+                   (facemenu-set-face (quote (, face)))))
           (define-key 'facemenu-keymap key (cons name function))
           (define-key menu key (cons name function)))
          ((facemenu-iterate ; check if equivalent face is already in the menu
@@ -618,7 +641,7 @@ Automatically called when a new face is created."
   nil) ; Return nil for facemenu-iterate
 
 (defun facemenu-complete-face-list (&optional oldlist)
-  "Return list of all faces that are look different.
+  "Return list of all faces that look different.
 Starts with given ALIST of faces, and adds elements only if they display 
 differently from any face already on the list.
 The faces on ALIST will end up at the end of the returned list, in reverse