From: phillip.lord@russet.org.uk (Phillip Lord)
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: help-gnu-emacs@gnu.org
Subject: Re: using use-package
Date: Wed, 29 Jun 2016 18:02:16 +0100 [thread overview]
Message-ID: <87furwvsh3.fsf@russet.org.uk> (raw)
In-Reply-To: <jwv37nw30o5.fsf-monnier+gmane.emacs.help@gnu.org> (Stefan Monnier's message of "Wed, 29 Jun 2016 03:38:50 -0400")
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>>>> Well I would have thought that needing eval-after-load and relatives
>>>>> is evidence of a badly written (in Stefan's sense) package
>> Yeah, I missed the "not" in this paragraph.
>>> I do think it's a problem, but admittedly, the way keymaps are normally
>>> setup there's no standard&easy way for the package to "do the right
>>> thing".
>> But not evidence of a badly written package:-)
>
> Not until "the right thing to do" is designed and implemented, no.
What about something like this below? We can now do something like:
(extend-key 'fake-feature-map "\C-f" 'foward-char)
It has the same syntax as define-key but works whether fake-feature-map
has been defined or not. Could be macro'd to remove the quote, of course.
Phil
(defvar extend-key--pending-definitions nil
"Key definitions to occur on load")
(defun extend-key--define-now (keymap-symbol key def)
"In KEYMAP-SYMBOL define KEY with definition DEF."
(define-key (symbol-value keymap-symbol) key def))
(defun extend-key--define-later (keymap-symbol key def)
"In KEYMAP-SYMBOL define KEY with definition DEF, once
KEYMAP-SYMBOL has been defined."
(setq
extend-key--pending-definitions
(cons
(list keymap-symbol key def)
extend-key--pending-definitions)))
(defun extend-key--after-load-function (_)
(setq extend-key--pending-definitions
(seq-filter
(lambda (n)
(seq-let
[keymap-symbol key def] n
(when (extend-key--boundp keymap-symbol)
(extend-key--define-now keymap-symbol key def))))
extend-key--pending-definitions)))
(add-hook 'after-load-functions
'extend-key--after-load-function)
(defun extend-key--boundp (keymap-symbol)
(or (boundp keymap-symbol)
(fboundp keymap-symbol)))
(defun extend-key (keymap-symbol key def)
"When KEYMAP-SYMBOL is defined, define key sequence KEY as DEF."
(if (extend-key--boundp keymap-symbol)
(extend-key--define-now keymap-symbol key def)
(extend-key--define-later keymap-symbol key def)))
next prev parent reply other threads:[~2016-06-29 17:02 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.7817.1438700509.904.help-gnu-emacs@gnu.org>
2015-08-05 5:35 ` using use-package Rusi
2015-08-05 5:57 ` Ian Zimmerman
[not found] ` <mailman.7832.1438754275.904.help-gnu-emacs@gnu.org>
2015-08-05 16:34 ` Rusi
2015-08-05 17:24 ` Ian Zimmerman
[not found] ` <mailman.7851.1438795470.904.help-gnu-emacs@gnu.org>
2015-08-06 1:34 ` Rusi
2015-08-06 1:54 ` Ian Zimmerman
[not found] ` <mailman.7873.1438826104.904.help-gnu-emacs@gnu.org>
2015-08-06 5:06 ` Rusi
2015-08-07 20:11 ` Grant Rettke
[not found] ` <mailman.7956.1438978281.904.help-gnu-emacs@gnu.org>
2015-08-08 2:36 ` Rusi
2015-08-08 23:24 ` Stefan Monnier
2015-08-10 2:25 ` Grant Rettke
2015-08-10 9:52 ` Phillip Lord
2015-08-10 21:25 ` Stefan Monnier
2015-08-10 22:32 ` Phillip Lord
[not found] ` <mailman.8096.1439241947.904.help-gnu-emacs@gnu.org>
2016-06-28 13:02 ` Rusi
2016-06-28 13:10 ` Phillip Lord
[not found] ` <mailman.235.1467119445.26859.help-gnu-emacs@gnu.org>
2016-06-28 13:14 ` Rusi
2016-06-28 13:30 ` Phillip Lord
2016-06-28 22:05 ` Stefan Monnier
2016-06-28 22:34 ` Phillip Lord
2016-06-29 7:38 ` Stefan Monnier
2016-06-29 17:02 ` Phillip Lord [this message]
2016-06-29 17:15 ` Drew Adams
2016-06-29 17:20 ` Phillip Lord
2016-06-30 7:25 ` Stefan Monnier
2016-06-30 9:04 ` Stefan Monnier
2016-06-30 14:03 ` Phillip Lord
2016-06-30 18:32 ` Stefan Monnier
2016-06-29 7:28 ` Andreas Röhler
[not found] ` <mailman.8067.1439200345.904.help-gnu-emacs@gnu.org>
2015-08-10 12:14 ` Rusi
2015-08-11 9:20 ` Sebastien Vauban
2015-08-11 10:04 ` Nicolas Richard
2015-08-11 11:05 ` Alexis
2015-08-11 11:16 ` Nicolas Richard
2015-08-11 11:25 ` Alexis
2015-08-11 20:42 ` Phillip Lord
2015-08-11 5:44 ` John Wiegley
2015-08-11 15:22 ` Stefan Monnier
2015-08-11 20:36 ` Phillip Lord
2015-08-12 16:09 ` John Wiegley
[not found] ` <mailman.8114.1439272212.904.help-gnu-emacs@gnu.org>
2015-08-12 17:52 ` Rusi
2015-08-12 18:20 ` Ian Zimmerman
2015-08-13 1:13 ` Stefan Monnier
2015-08-13 7:25 ` tomas
2015-08-13 15:08 ` Stefan Monnier
2015-08-13 20:14 ` tomas
[not found] ` <mailman.8280.1439496850.904.help-gnu-emacs@gnu.org>
2015-08-13 20:31 ` Stefan Monnier
2015-08-13 21:11 ` tomas
2015-08-13 21:52 ` Michael Heerdegen
2015-08-13 22:10 ` Stefan Monnier
2015-08-13 22:12 ` John Mastro
2015-08-13 22:25 ` Rasmus
2015-08-13 22:50 ` Stefan Monnier
2015-08-15 13:56 ` Rasmus
[not found] ` <mailman.8383.1439647006.904.help-gnu-emacs@gnu.org>
2015-08-15 15:46 ` Stefan Monnier
2015-08-14 4:09 ` Thierry Volpiatto
2015-08-13 9:07 ` John Wiegley
2015-08-13 12:40 ` Phillip Lord
2015-08-13 15:24 ` Stefan Monnier
2015-08-13 16:02 ` Phillip Lord
2015-08-13 21:19 ` Stefan Monnier
2015-08-14 9:16 ` Phillip Lord
[not found] ` <mailman.8319.1439543792.904.help-gnu-emacs@gnu.org>
2015-08-14 13:59 ` Stefan Monnier
2015-08-14 14:41 ` Phillip Lord
[not found] ` <mailman.8328.1439563291.904.help-gnu-emacs@gnu.org>
2015-08-14 16:54 ` Stefan Monnier
[not found] ` <mailman.8263.1439481769.904.help-gnu-emacs@gnu.org>
2015-08-13 16:15 ` Stefan Monnier
2015-08-13 18:40 ` John Wiegley
2015-08-14 2:21 ` John Yates
2015-08-14 9:35 ` Phillip Lord
[not found] ` <mailman.8304.1439518900.904.help-gnu-emacs@gnu.org>
2015-08-14 13:51 ` Stefan Monnier
2015-08-14 16:10 ` John Yates
[not found] ` <mailman.8321.1439544925.904.help-gnu-emacs@gnu.org>
2015-08-14 14:04 ` Stefan Monnier
2015-08-14 14:49 ` Drew Adams
2015-08-14 16:06 ` Phillip Lord
2015-08-14 17:41 ` Drew Adams
[not found] ` <mailman.8226.1439428438.904.help-gnu-emacs@gnu.org>
2015-08-13 2:07 ` Rusi
[not found] ` <mailman.7988.1439076276.904.help-gnu-emacs@gnu.org>
2015-08-09 2:43 ` Rusi
2015-08-09 13:17 ` Stefan Monnier
2015-08-09 16:14 ` Rusi
2015-08-09 16:25 ` Emanuel Berg
2015-08-09 16:45 ` Stefan Monnier
2015-08-09 17:03 ` Rusi
2015-08-09 17:17 ` Stefan Monnier
2015-08-09 17:30 ` Rusi
2015-08-09 17:45 ` Stefan Monnier
2015-08-11 1:23 ` Robert Thorpe
2015-08-11 2:05 ` Emanuel Berg
2015-08-11 20:49 ` Phillip Lord
2015-08-13 15:27 ` Stefan Monnier
2015-08-14 5:12 ` Nikolay Kudryavtsev
2015-08-14 5:23 ` Edward Knyshov
2015-08-14 6:28 ` Nikolay Kudryavtsev
2015-08-14 6:44 ` Edward Knyshov
2015-08-14 6:46 ` Edward Knyshov
2015-08-14 6:47 ` Edward Knyshov
2015-08-14 9:29 ` Phillip Lord
[not found] ` <mailman.8104.1439256204.904.help-gnu-emacs@gnu.org>
2015-08-12 17:46 ` Rusi
2015-08-10 2:19 ` Grant Rettke
[not found] ` <mailman.8054.1439173196.904.help-gnu-emacs@gnu.org>
2015-08-10 3:41 ` Rusi
2015-08-04 15:01 Sharon Kimble
2015-08-04 15:46 ` Chunyang Xu
2015-08-04 16:35 ` Phillip Lord
2015-08-04 18:24 ` Sharon Kimble
2015-08-04 19:18 ` Grant Rettke
2015-08-04 21:24 ` Phillip Lord
2015-08-05 1:20 ` Grant Rettke
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=87furwvsh3.fsf@russet.org.uk \
--to=phillip.lord@russet.org.uk \
--cc=help-gnu-emacs@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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.