help-gnu-emacs
[Top][All Lists]
Advanced

[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 <address@hidden> 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]