> Your patch looks good to me. Please install it. > > One drawback of such approach is that it > doesn't allow completion for multiple face names (there is the file > emacs-lisp/crm.el distribued with Emacs that could be used here but > it is not up-to-date). > > Could you tell me more about the problem? If this package no longer > works, we ought to fix it. Is there an actual bug?
With fixed crm.el, I want to submit a new patch which uses completing-read-multiple. It allows to simultaneously read multiple face names separated by comma, and even to use complete-in-turn on each of them. Index: lisp/faces.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/faces.el,v retrieving revision 1.327 diff -c -r1.327 faces.el *** lisp/faces.el 30 Jun 2005 15:04:57 -0000 1.327 --- lisp/faces.el 2 Jul 2005 00:08:08 -0000 *************** *** 869,875 **** (aliasfaces nil) (nonaliasfaces nil) faces) ! ;; Make a list of the named faces that the `face' property uses. (if (and (listp faceprop) ;; Don't treat an attribute spec as a list of faces. (not (keywordp (car faceprop))) --- 869,878 ---- (aliasfaces nil) (nonaliasfaces nil) faces) ! ;; Try to get a face name from the buffer. ! (if (memq (intern-soft (thing-at-point 'symbol)) (face-list)) ! (setq faces (list (intern-soft (thing-at-point 'symbol))))) ! ;; Add the named faces that the `face' property uses. (if (and (listp faceprop) ;; Don't treat an attribute spec as a list of faces. (not (keywordp (car faceprop))) *************** *** 879,888 **** (push f faces))) (if (symbolp faceprop) (push faceprop faces))) - ;; If there are none, try to get a face name from the buffer. - (if (and (null faces) - (memq (intern-soft (thing-at-point 'symbol)) (face-list))) - (setq faces (list (intern-soft (thing-at-point 'symbol))))) ;; Build up the completion tables. (mapatoms (lambda (s) --- 882,887 ---- *************** *** 896,917 **** (unless multiple (if faces (setq faces (list (car faces))))) (let* ((input ;; Read the input. ! (completing-read (if (or faces string-describing-default) (format "%s (default %s): " prompt ! (if faces (mapconcat 'symbol-name faces ", ") string-describing-default)) (format "%s: " prompt)) ! (complete-in-turn nonaliasfaces aliasfaces) nil t)) ;; Canonicalize the output. (output ! (if (equal input "") ! faces ! (if (stringp input) ! (list (intern input)) ! input)))) ;; Return either a list of faces or just one face. (if multiple output --- 895,921 ---- (unless multiple (if faces (setq faces (list (car faces))))) + (require 'crm) (let* ((input ;; Read the input. ! (completing-read-multiple (if (or faces string-describing-default) (format "%s (default %s): " prompt ! (if faces (mapconcat 'symbol-name faces ",") string-describing-default)) (format "%s: " prompt)) ! (complete-in-turn nonaliasfaces aliasfaces) ! nil nil nil nil ! (if faces (mapconcat 'symbol-name faces ",")))) ;; Canonicalize the output. (output ! (cond ((or (equal input "") (equal input '(""))) ! faces) ! ((stringp input) ! (mapcar 'intern (split-string input ", *" t))) ! ((listp input) ! (mapcar 'intern input)) ! (input)))) ;; Return either a list of faces or just one face. (if multiple output -- Juri Linkov http://www.jurta.org/emacs/ _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel