From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Tassilo Horn <tassilo@member.fsf.org>
Cc: emacs-devel@gnu.org
Subject: Re: Get a command by its keybinding and also respecting key translation
Date: Sat, 18 Dec 2010 11:16:17 -0500 [thread overview]
Message-ID: <jwvaak3t5zx.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <201012142351.21774.tassilo@member.fsf.org> (Tassilo Horn's message of "Tue, 14 Dec 2010 23:51:21 +0100")
>> > (define-context-key outline-minor-mode-map
>> > (kbd "<tab>")
>> > th-outline-context-p
>> > org-cycle)
>>
>> You can do it this way:
>>
>> (define-key outline-minor-mode-map
>> (kdb "<tab>")
>> `(menu-item "dummy" org-cycle
>> :filter ,(lambda (cmd)
>> (if (th-outline-context-p) cmd))))
> Hm, just for educational purposes, could you please explain the
> backquoting and the comma-substitution of the lambda? I mean, I know
> that `,' in a backquote triggers evaluation, but since a lambda evals to
> itself, what's the point in doing so?
Without backquote and comma, the whole menu-item is just a piece of data
which happens to contain something that looks like a function.
With the backquote and comma, it turns into something that contains
a function, so tools can handle this `lambda' knowing that it *is*
a function (e.g. it can be byte-compiled, can cause warnings if it uses
obsolete functions, can be macro-expanded, ...).
Try to byte-compile
(equal '(lambda () (foo (bar a b c)))
(lambda () (foo (bar a b c))))
to see what I mean. In the presence of lexical-scoping the difference
will be present even without byte-compiling.
Stefan
next prev parent reply other threads:[~2010-12-18 16:16 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-13 18:57 Get a command by its keybinding and also respecting key translation Tassilo Horn
2010-12-14 19:50 ` Stefan Monnier
2010-12-14 22:51 ` Tassilo Horn
2010-12-18 16:16 ` Stefan Monnier [this message]
2010-12-20 8:19 ` Tassilo Horn
2010-12-20 10:09 ` Andreas Schwab
2010-12-20 10:19 ` Tassilo Horn
2010-12-20 10:35 ` David Kastrup
2010-12-20 11:10 ` Tassilo Horn
2010-12-20 11:30 ` Andreas Schwab
2010-12-15 8:21 ` Tassilo Horn
2010-12-15 15:27 ` Tassilo Horn
2010-12-15 15:30 ` Davis Herring
2010-12-15 21:20 ` Tassilo Horn
2010-12-15 22:03 ` Get a command by its keybinding and also respecting keytranslation Drew Adams
2010-12-15 22:17 ` Tassilo Horn
2010-12-15 22:39 ` Drew Adams
2010-12-18 16:27 ` Stefan Monnier
2010-12-18 16:23 ` Get a command by its keybinding and also respecting key translation Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvaak3t5zx.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=tassilo@member.fsf.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.