From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: storm@cua.dk (Kim F. Storm) Newsgroups: gmane.emacs.devel Subject: Re: Making hide-ifdef-use-define-alist more user friendly Date: Mon, 21 Feb 2005 11:28:08 +0100 Message-ID: References: <200502210903.j1L933jt024808@il06exr01.mot.com> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1108986900 8310 80.91.229.2 (21 Feb 2005 11:55:00 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 21 Feb 2005 11:55:00 +0000 (UTC) Cc: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Feb 21 12:55:00 2005 Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1D3C9J-0000LK-HO for ged-emacs-devel@m.gmane.org; Mon, 21 Feb 2005 12:54:49 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D3CQF-00032Y-Dh for ged-emacs-devel@m.gmane.org; Mon, 21 Feb 2005 07:12:19 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1D3BAU-0002Ua-Gc for emacs-devel@gnu.org; Mon, 21 Feb 2005 05:51:59 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1D3BAQ-0002UB-Eo for emacs-devel@gnu.org; Mon, 21 Feb 2005 05:51:55 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D3B9d-0002DB-IE for emacs-devel@gnu.org; Mon, 21 Feb 2005 05:51:05 -0500 Original-Received: from [212.88.64.25] (helo=mail-relay.sonofon.dk) by monty-python.gnu.org with smtp (Exim 4.34) id 1D3AnS-0002Nw-2v for emacs-devel@gnu.org; Mon, 21 Feb 2005 05:28:10 -0500 Original-Received: (qmail 91030 invoked from network); 21 Feb 2005 10:28:08 -0000 Original-Received: from unknown (HELO kfs-l.imdomain.dk.cua.dk) (213.83.150.2) by 0 with SMTP; 21 Feb 2005 10:28:08 -0000 Original-To: Juan-Leon Lahoz Garcia In-Reply-To: <200502210903.j1L933jt024808@il06exr01.mot.com> (Juan-Leon Lahoz Garcia's message of "Mon, 21 Feb 2005 03:03:03 -0600 (CST)") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org X-MailScanner-To: ged-emacs-devel@m.gmane.org Xref: main.gmane.org gmane.emacs.devel:33668 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:33668 Juan-Leon Lahoz Garcia 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 http://www.cua.dk