From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.help Subject: Re: Eval keymapp in a macros Date: Mon, 02 Aug 2021 22:33:04 +0200 Message-ID: <87bl6fy4cf.fsf@web.de> References: Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="12527"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:dCbTTviOorAC7MUK8XN9YniPQIw= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Mon Aug 02 22:33:50 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 1mAedB-00032U-RZ for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 02 Aug 2021 22:33:49 +0200 Original-Received: from localhost ([::1]:59704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mAedA-0005PI-Cb for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 02 Aug 2021 16:33:48 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mAecd-0005Ou-Uv for help-gnu-emacs@gnu.org; Mon, 02 Aug 2021 16:33:15 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:56858) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mAecc-0004gO-9P for help-gnu-emacs@gnu.org; Mon, 02 Aug 2021 16:33:15 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mAeca-0002Qm-5E for help-gnu-emacs@gnu.org; Mon, 02 Aug 2021 22:33:12 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.25, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, NICE_REPLY_C=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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:132323 Archived-At: Arthur Miller writes: > #+begin_src emacs-lisp > > (defmacro with-key-map (mapname &rest body) > `(let ((map ,mapname)) > (dolist (def '(,@body)) > (define-key map > (if (vectorp (car def)) (car def) > (read-kbd-macro (car def))) > (if (or (listp (cdr def)) > (functionp (cdr def))) > (cdr def) > (if (eval `(keymapp ,(cdr def))) > (eval (cdr def)))))))) > > #+end_src Unfortunately you didn't show how you use it. What's the purpose of your macro? Anyway, `macroexpand' or `macroexpand-1' your call to see what happens. My hypothesis is that (cdr def) evals to a symbol (that is bound to a keymap) - like `global-map', and not a keymap. So the expansion of a macro call would actually test e.g. (keymapp 'global-map) --> nil Note that nothing in BODY is ever evaluated (it's behind a quote). My tip when writing a macro (do you really need one btw?): Write an example call and then the desired expansion down. Only after that write down the macro implementation that offers exactly that expansion. You can later do that in your head, but if you skip that step you get all the surprises and pitfalls that macros are known for. Michael.