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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: changing a variable with a keystroke


From: Xah Lee
Subject: Re: changing a variable with a keystroke
Date: Wed, 14 Jan 2009 14:05:20 -0800 (PST)
User-agent: G2/1.0


On Jan 14, 3:32 am, Joff <address@hidden> wrote:
> Dear all,
>
>  I'm having trouble trying to create a key combination to set a global
> variable. I have tried putting the following in my .emacs file:
>
> (global-set-key (kbd "C-l") nil)
> (global-set-key (kbd "C-l C-r") '(setq dired-listing-switches "-lR")
>
> and various permutions of the '(setq .. "-lR") part (with a single quote in
> front of the -lR, without the intial single quote etc. This got me various
> errors:
>
> (global-set-key (kbd "C-l C-r") (setq dired-listing-switches -lR))   -->
> Symbol's value as variable is void: -lR
>
> (global-set-key (kbd "C-l C-r") '(setq dired-listing-switches -lR))  -->
> Wrong type argument: commandp, (setq dired-listing-switches -lR) on pressing
> C-l C-r
>
> (global-set-key (kbd "C-l C-r") (setq dired-listing-switches "-lR"))  -->
> Printed -lR into my buffer when I pressed C-l C-r
>
> and so on...

Here's what's wrong with your code. Using pseudo C-like code to
illustrate, what you want is:

setkey(keyCode, functionName)

but what you are doing is:

setkey(keyCode, diredswich = "lr")

So, your second argument is supposed to be a function, but you give it
a expression of what the function is supposed to do.

To fix, you can define your function, then put the function name as
the second arg to setkey. But since elisp has a function construct
(aka lambda), so you don't need to define it separately.

Here's the code:

(global-set-key (kbd "C-l C-r")
 (lambda () (setq dired-listing-switches "-lR"))
) ;; code not tested

-----------------

Note that what you are doing is strange. Depending what you want to
achieve, there are probably better ways.


---------------------


> so then I tried
>
> (defun set_recursive_dired () "Set dired mode to recursive view"
>   (interactive "p")
>   (setq dired-listing-switches "-lR"))
>
> (global-set-key (kbd "C-l") nil)
> (global-set-key (kbd "C-l C-r") 'set_recursive_dired)
> because I thought setq might not be a command (?) which got me:

if you want to define it separately, you can do it like this:

(defun set_recursive_dired ()
  "Set dired mode to recursive view"
  (setq dired-listing-switches "-lR"))

> as you can probably tell, I'm pretty new to lisp/elisp... I have tried
> 'reading the error messages' and have done a lot of googling, which has got
> me this far (and which suggested the above '(defun...set_recursive_dired) )
>
> so could anyone kindly shed some light on why the above don't work, and
> perhaps suggest what I should be trying? Is it a syntax thing or am I
> missing the point completely?

lisp syntax gets a bit used to, but partly also because it is
irregular, and inconsistant in its eval/not-eval expectation in its
various functions ...

my website has a elisp tutorial you might be interested.

  Xah
∑ http://xahlee.org/

reply via email to

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