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

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

Re: Bug, or newbie error?


From: Eric Abrahamsen
Subject: Re: Bug, or newbie error?
Date: Fri, 01 Jul 2011 20:36:07 -0400
User-agent: Gnus/5.110018 (No Gnus v0.18) Emacs/23.2 (gnu/linux)

On Fri, Jul 01 2011, weemattisnot wrote:

> I am trying to write a bit of lisp to go in my .emacs file that binds
> C-1 to a command to change the color of the selected text (in
> enriched text minor-mode). I have success running the command M-x
> facemenu-set-foreground where I am prompted for a color, I type red,
> and it changes the selected region red. But, when I try to bind this
> command to a key-press, it doesn't work correctly, changing the color
> of the text at the very end of the document (such that if I add any
> text at the end of the document, it will be red). Here is my .emacs
> lisp (defun headingone () (interactive) (facemenu-set-foreground
> "red") ) (global-set-key (kbd "C-1") 'headingone) Have I done
> something wrong here? Any suggestions are welcome. Thank you in
> advance. Weemattisnot
>  
> View this message in context: Bug, or newbie error?
> Sent from the Emacs - Help mailing list archive at Nabble.com.

If you look at the documentation for facemenu-set-foreground you'll see
that it takes one mandatory argument (the color), and two optional
arguments (point and mark). Since your command is calling this function,
your command needs to first collect all the input that the function
might need. That means your command needs to use the interactive code
(see "Interactive Codes" in the e-lisp manual) that picks up the region.
That happens to be "r". Since "r" passes your command two arguments,
your command signature has to allow for those arguments. So:

(defun headingone (start end)
  (interactive "r")
  (facemenu-set-foreground "red" start end))

That will turn stuff red whether you have an active region or not
(probably not what you want), so you can check if there's an active
region before doing anything:


(defun headingone-2 (&optional start end)
  (interactive "r")
  (if (use-region-p)
      (facemenu-set-foreground "red" start end)
    (message "No active region")))

Hope that helps,

Eric




reply via email to

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