From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jean Louis Newsgroups: gmane.emacs.help Subject: Re: Example use of macro to minimize and generalize the code Date: Tue, 1 Jun 2021 02:59:25 +0300 Message-ID: References: <87k0nfesns.fsf@zoho.eu> <87mtsbd31w.fsf@zoho.eu> <87a6oad81r.fsf@zoho.eu> <87y2buscef.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21545"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mutt/2.0.7+183 (3d24855) (2021-05-28) Cc: help-gnu-emacs@gnu.org To: Michael Heerdegen Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Tue Jun 01 02:03:08 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lnrsB-0005Q3-B2 for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 01 Jun 2021 02:03:07 +0200 Original-Received: from localhost ([::1]:49786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lnrs9-0003XC-Cj for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 31 May 2021 20:03:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42034) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lnrrm-0003X1-Le for help-gnu-emacs@gnu.org; Mon, 31 May 2021 20:02:42 -0400 Original-Received: from stw1.rcdrun.com ([217.170.207.13]:33435) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lnrrk-0007j5-VW for help-gnu-emacs@gnu.org; Mon, 31 May 2021 20:02:42 -0400 Original-Received: from localhost ([::ffff:197.157.0.35]) (AUTH: PLAIN admin, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by stw1.rcdrun.com with ESMTPSA id 00000000000ADF27.0000000060B5791D.0000073C; Mon, 31 May 2021 17:02:37 -0700 Mail-Followup-To: Michael Heerdegen , help-gnu-emacs@gnu.org Content-Disposition: inline In-Reply-To: <87y2buscef.fsf@web.de> Received-SPF: pass client-ip=217.170.207.13; envelope-from=bugs@gnu.support; helo=stw1.rcdrun.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_SORBS_WEB=1.5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:130412 Archived-At: * Michael Heerdegen [2021-06-01 02:38]: > Jean Louis writes: > > > (defmacro when-tabulated-id (table id &rest body) > > (declare (indent 2) (debug t)) > > (ignore id) > > `(if id > > (progn > > ,@body) > > (if (or (eq ,table 'any) > > (string-equal ,table rcd-current-table)) > > (let ((id (tabulated-list-get-id))) > > (if id > > (progn ,@body) > > (message "Did not get ID"))) > > (message "This function is for table `%s' only" ,table)))) > > There is something wrong with that definition however: the variable `id' > is completely ignored, specifying something at that argument position is > redundant. I appreciate all comments. > Tt may "work" by accident if the symbol `id' happens to be dynamically > bound to the same thing that you specify as argument, but only when that > exact variable name is used and only in dynamically binding Lisp. You guessed it well, I am using it this way: (defun hyperscope-tabulated-action (&optional id) (interactive) (when-tabulated-id "hyobjects" id (hyperscope-ring id) (hyperscope-action id))) As there are many different tables which all have its ID, so the macro has to make sure it is invoked in the right table. There could be other ways to check that. Programs have their lexical binding true, maybe that one you did not expect. Such functions can be invoked programmatically or interactively, interactively there is check if there is right database table in the tabulated-list-mode, as otherwise it gives a warning that it is not invoked in that other different table. > Normally the byte compiler warns about this kind of problem - of course > only if you don't silence it ;-) That is why `ignore' is there. Ignore is there to suppress the byte compiler warning just as you guessed it. Otherwise: In when-tabulated-id: rcd-cf.el:165:45: Warning: Unused lexical argument `id' -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns Sign an open letter in support of Richard M. Stallman https://stallmansupport.org/