[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: parametrized function definition
From: |
weber |
Subject: |
Re: parametrized function definition |
Date: |
Wed, 9 Jul 2008 05:46:42 -0700 (PDT) |
User-agent: |
G2/1.0 |
On Jul 8, 2:07 pm, Joe Bloggs <w...@cares.invalid> wrote:
> Hi, I am trying to write a function that allows me to quickly bind a key
> combination
> to insert arbitrary text:
>
> (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)))
> )
> )
>
> However, this doesn't work since textinsert is not evaluated until the
> function is called with the keybinding. How can I get this to work properly?
> I am new to elisp so I imagine it's very simple.
>
> Thanks.
Hi Joe.
You have to use some special syntax to that textinsert is evaluated
(so your lambda will insert the contents of textinsert, and not the
symbol textinsert)
I also rewrote your let, because it looks nicer this way, but you can
keep the setqs you if want :)
(defun set-local-key-insert ()
"set a local key to insert some text"
(interactive)
(let ((keystring (read-key-sequence "Key combination to bind: "))
(textinsert (read-string "Text to insert: ")))
(local-set-key (read-kbd-macro keystring) `(lambda ()
(interactive) (insert ,textinsert)))))
The significant changes are the backquote before the lambda, and the
comma before textinsert.
Take a look at the help for this function with C-h f `
HTH
weber