* Re: [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map'
[not found] ` <E1YHEHT-00086o-LX@vcs.savannah.gnu.org>
@ 2015-01-30 18:18 ` Stefan Monnier
2015-01-30 18:20 ` Oleh Krehel
0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-01-30 18:18 UTC (permalink / raw)
To: Oleh Krehel; +Cc: emacs-devel
> hydra.el (defhydra): Use `clear-temporary-overlay-map'
Hmm... when/where is this function defined?
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map'
2015-01-30 18:18 ` [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map' Stefan Monnier
@ 2015-01-30 18:20 ` Oleh Krehel
2015-01-30 20:02 ` Oleh Krehel
2015-01-30 21:06 ` Stefan Monnier
0 siblings, 2 replies; 5+ messages in thread
From: Oleh Krehel @ 2015-01-30 18:20 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> hydra.el (defhydra): Use `clear-temporary-overlay-map'
>
> Hmm... when/where is this function defined?
It's generated by legacy code in at least in Emacs 24.3.4. Newest
Emacs doesn't have it. It's a hack, but I need the older Emacs
versions to work. See the old code:
(defun set-temporary-overlay-map (map &optional keep-pred)
"Set MAP as a temporary keymap taking precedence over most other keymaps.
Note that this does NOT take precedence over the \"overriding\" maps
`overriding-terminal-local-map' and `overriding-local-map' (or the
`keymap' text property). Unlike those maps, if no match for a key is
found in MAP, the normal key lookup sequence then continues.
Normally, MAP is used only once. If the optional argument
KEEP-PRED is t, MAP stays active if a key from MAP is used.
KEEP-PRED can also be a function of no arguments: if it returns
non-nil then MAP stays active."
(let* ((clearfunsym (make-symbol "clear-temporary-overlay-map"))
(overlaysym (make-symbol "t"))
(alist (list (cons overlaysym map)))
(clearfun
;; FIXME: Use lexical-binding.
`(lambda ()
(unless ,(cond ((null keep-pred) nil)
((eq t keep-pred)
`(eq this-command
(lookup-key ',map
(this-command-keys-vector))))
(t `(funcall ',keep-pred)))
(set ',overlaysym nil) ;Just in case.
(remove-hook 'pre-command-hook ',clearfunsym)
(setq emulation-mode-map-alists
(delq ',alist emulation-mode-map-alists))))))
(set overlaysym overlaysym)
(fset clearfunsym clearfun)
(add-hook 'pre-command-hook clearfunsym)
;; FIXME: That's the keymaps with highest precedence, except for
;; the `keymap' text-property ;-(
(push alist emulation-mode-map-alists)))
Oleh
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map'
2015-01-30 18:20 ` Oleh Krehel
@ 2015-01-30 20:02 ` Oleh Krehel
2015-01-30 21:06 ` Stefan Monnier
1 sibling, 0 replies; 5+ messages in thread
From: Oleh Krehel @ 2015-01-30 20:02 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
Oleh Krehel <ohwoeowho@gmail.com> writes:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>>> hydra.el (defhydra): Use `clear-temporary-overlay-map'
>>
>> Hmm... when/where is this function defined?
>
> It's generated by legacy code in at least in Emacs 24.3.4. Newest
> Emacs doesn't have it. It's a hack, but I need the older Emacs
> versions to work. See the old code:
>
> (defun set-temporary-overlay-map (map &optional keep-pred)
> "Set MAP as a temporary keymap taking precedence over most other keymaps.
> Note that this does NOT take precedence over the \"overriding\" maps
> `overriding-terminal-local-map' and `overriding-local-map' (or the
> `keymap' text property). Unlike those maps, if no match for a key is
> found in MAP, the normal key lookup sequence then continues.
>
> Normally, MAP is used only once. If the optional argument
> KEEP-PRED is t, MAP stays active if a key from MAP is used.
> KEEP-PRED can also be a function of no arguments: if it returns
> non-nil then MAP stays active."
> (let* ((clearfunsym (make-symbol "clear-temporary-overlay-map"))
> (overlaysym (make-symbol "t"))
> (alist (list (cons overlaysym map)))
> (clearfun
> ;; FIXME: Use lexical-binding.
> `(lambda ()
> (unless ,(cond ((null keep-pred) nil)
> ((eq t keep-pred)
> `(eq this-command
> (lookup-key ',map
> (this-command-keys-vector))))
> (t `(funcall ',keep-pred)))
> (set ',overlaysym nil) ;Just in case.
> (remove-hook 'pre-command-hook ',clearfunsym)
> (setq emulation-mode-map-alists
> (delq ',alist emulation-mode-map-alists))))))
> (set overlaysym overlaysym)
> (fset clearfunsym clearfun)
> (add-hook 'pre-command-hook clearfunsym)
> ;; FIXME: That's the keymaps with highest precedence, except for
> ;; the `keymap' text-property ;-(
> (push alist emulation-mode-map-alists)))
Oops, I see now that the change wasn't actually working. See the next
fixing commit. Is there a more straightforward way to programmatically
disable the effect of `set-temporary-overlay-map'?
Oleh
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map'
2015-01-30 18:20 ` Oleh Krehel
2015-01-30 20:02 ` Oleh Krehel
@ 2015-01-30 21:06 ` Stefan Monnier
2015-01-30 21:40 ` Oleh Krehel
1 sibling, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-01-30 21:06 UTC (permalink / raw)
To: Oleh Krehel; +Cc: emacs-devel
>>> hydra.el (defhydra): Use `clear-temporary-overlay-map'
>> Hmm... when/where is this function defined?
> It's generated by legacy code in at least in Emacs 24.3.4.
No, that's a misunderstanding:
> (let* ((clearfunsym (make-symbol "clear-temporary-overlay-map"))
This creates a symbol whose name is "clear-temporary-overlay-map" but
this symbol is different from the one you get with:
'clear-temporary-overlay-map
So you can't call this function the way you do it.
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map'
2015-01-30 21:06 ` Stefan Monnier
@ 2015-01-30 21:40 ` Oleh Krehel
0 siblings, 0 replies; 5+ messages in thread
From: Oleh Krehel @ 2015-01-30 21:40 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On Fri, Jan 30, 2015 at 10:06 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>>>> hydra.el (defhydra): Use `clear-temporary-overlay-map'
>>> Hmm... when/where is this function defined?
>> It's generated by legacy code in at least in Emacs 24.3.4.
>
> No, that's a misunderstanding:
>
>> (let* ((clearfunsym (make-symbol "clear-temporary-overlay-map"))
>
> This creates a symbol whose name is "clear-temporary-overlay-map" but
> this symbol is different from the one you get with:
>
> 'clear-temporary-overlay-map
>
> So you can't call this function the way you do it.
Yes, I got it. It had to be interned, but it wasn't.
See the newer commit, it does something different.
Oleh
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-01-30 21:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20150130161848.31066.83266@vcs.savannah.gnu.org>
[not found] ` <E1YHEHT-00086o-LX@vcs.savannah.gnu.org>
2015-01-30 18:18 ` [elpa] master 785f837 6/8: hydra.el (defhydra): Use `clear-temporary-overlay-map' Stefan Monnier
2015-01-30 18:20 ` Oleh Krehel
2015-01-30 20:02 ` Oleh Krehel
2015-01-30 21:06 ` Stefan Monnier
2015-01-30 21:40 ` Oleh Krehel
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).