[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: parametrized function definition
From: |
Joe Bloggs |
Subject: |
Re: parametrized function definition |
Date: |
Wed, 09 Jul 2008 15:44:13 +0100 |
User-agent: |
Gnus/5.110006 (No Gnus v0.6) Emacs/21.4 (gnu/linux) |
Thien-Thi Nguyen <ttn@gnuvola.org> writes:
> () "Lennart Borgman (gmail)" <lennart.borgman@gmail.com>
> () Wed, 09 Jul 2008 09:06:30 +0200
>
> > (defun set-local-key-insert ()
> > "set a local key to insert some text"
> > (interactive)
> > (let (keystring textinsert)
> > (setq keystring (read-key-sequence "Key combination to bind: "))
> > (setq textinsert (read-string "Text to insert: "))
> > (local-set-key (read-kbd-macro keystring)
> > (lambda () (interactive)
> > (insert textinsert)))))
>
> You can remove textinsert from let and make it a defvar instead.
>
> (defvar textinsert nil)
>
> Yes, but that would defeat the presumed intention of using `textinsert'
> as a local variable. Practically, this means `set-local-key-insert'
> invocations clobber previous invocations' state (last invocation wins).
>
> Probably OP wants `lexical-let'.
>
> thi
lexical-let did the job, thanks:
(require 'cl)
(defun set-local-key-insert ()
"set a local key to insert some text"
(interactive)
(let (keystring)
(setq keystring (read-key-sequence "Key combination to bind: "))
(lexical-let (textinsert)
(setq textinsert (read-string "Text to insert: "))
(local-set-key (read-kbd-macro keystring) (lambda () (interactive)
(insert textinsert)))
)
)
)