Juan-Leon Lahoz Garcia <[EMAIL PROTECTED]> writes: > Hi, > > `hide-ifdef-use-define-alist', when invoked interactivelly, does not > know how to complete to the symbols in alist `hide-ifdef-define-alist', > despite it is mandatory to enter one of them.
Good point. > > --- hideif.el.ori Mon Feb 21 09:33:58 2005 > +++ hideif.el Mon Feb 21 10:08:52 2005 > @@ -1061,9 +1061,16 @@ > (cons (cons name (hif-compress-define-list hide-ifdef-env)) > hide-ifdef-define-alist))) > > -(defun hide-ifdef-use-define-alist (name) > +(defun hide-ifdef-use-define-alist (&optional name) > "Set `hide-ifdef-env' to the define list specified by NAME." > - (interactive "SUse define list: ") > + (interactive) > + (unless name > + (setq name > + (completing-read "Use define list: " > + (mapcar (lambda (arg) > + (cons (symbol-name (car arg)) t)) > + hide-ifdef-define-alist) nil t))) > + (if (stringp name) (setq name (intern name))) > (let ((define-list (assoc name hide-ifdef-define-alist))) > (if define-list > (setq hide-ifdef-env This looked more complex than needed at first sight, so I tried this: *** hideif.el 01 Sep 2003 17:45:35 +0200 1.48 --- hideif.el 21 Feb 2005 11:00:21 +0100 *************** *** 958,964 **** (defun hide-ifdef-use-define-alist (name) "Set `hide-ifdef-env' to the define list specified by NAME." ! (interactive "SUse define list: ") (let ((define-list (assoc name hide-ifdef-define-alist))) (if define-list (setq hide-ifdef-env --- 958,967 ---- (defun hide-ifdef-use-define-alist (name) "Set `hide-ifdef-env' to the define list specified by NAME." ! (interactive ! (list (completing-read "Use define list: " ! hide-ifdef-define-alist nil t))) ! (if (stringp name) (setq name (intern name))) (let ((define-list (assoc name hide-ifdef-define-alist))) (if define-list (setq hide-ifdef-env But as you had already discovered, completing-read requires that the alist keys are strings, not symbols. Looking at try-completion and all-completions, there is a strange inconsistency between alists, vectors, and hash tables: In alists and hash tables, the key must be a string, while in vectors, the key must be a symbol... The following patch changes this to accept both strings and symbols as keys in all cases. With this, my simpler patch to hide-ifdef-use-define-alist works. Any objections to installing this ? *** minibuf.c 12 Dec 2004 23:25:36 +0100 1.278 --- minibuf.c 21 Feb 2005 11:15:49 +0100 *************** *** 1257,1263 **** if (!EQ (bucket, zero)) { elt = bucket; ! eltstring = Fsymbol_name (elt); if (XSYMBOL (bucket)->next) XSETSYMBOL (bucket, XSYMBOL (bucket)->next); else --- 1257,1263 ---- if (!EQ (bucket, zero)) { elt = bucket; ! eltstring = elt; if (XSYMBOL (bucket)->next) XSETSYMBOL (bucket, XSYMBOL (bucket)->next); else *************** *** 1284,1289 **** --- 1284,1292 ---- /* Is this element a possible completion? */ + if (SYMBOLP (eltstring)) + eltstring = Fsymbol_name (eltstring); + if (STRINGP (eltstring) && SCHARS (string) <= SCHARS (eltstring) && (tem = Fcompare_strings (eltstring, zero, *************** *** 1512,1518 **** if (!EQ (bucket, zero)) { elt = bucket; ! eltstring = Fsymbol_name (elt); if (XSYMBOL (bucket)->next) XSETSYMBOL (bucket, XSYMBOL (bucket)->next); else --- 1515,1521 ---- if (!EQ (bucket, zero)) { elt = bucket; ! eltstring = elt; if (XSYMBOL (bucket)->next) XSETSYMBOL (bucket, XSYMBOL (bucket)->next); else *************** *** 1539,1544 **** --- 1542,1550 ---- /* Is this element a possible completion? */ + if (SYMBOLP (eltstring)) + eltstring = Fsymbol_name (eltstring); + if (STRINGP (eltstring) && SCHARS (string) <= SCHARS (eltstring) /* If HIDE_SPACES, reject alternatives that start with space -- Kim F. Storm <[EMAIL PROTECTED]> http://www.cua.dk _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel