Emacs buttons – an introduction for the somewhat impatient
May 14, 2008 at 7:08 pm 3 comments
Working out how to make buttons work in emacs took rather too much effort – I suspect I was just being slow. However, I thought I’d write a tiny how-to for anyone else who tries to do this:
Below is a prototypical emacs lisp function call to create a new button in your text between characters beg and end is:
(defun f (button)
(call-interactively 'find-file))
(make-button beg end 'action 'f 'follow-link t)
Note the following:
- The properties are defined via a variable number of arguments . It does does not take a list.
- Removing the follow-link property would cause left mouse-clicks on the link to have no effects
- f must take a single argument otherwise this will fail.
For more on emacs buttons see:
http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Buttons
If you want to make your button more anonymous (so that changing the function value associated with f has no deleterious results) you can use the following
(make-button beg end 'action
(lambda (button) (call-interactively 'find-file))
'follow-link t)
Entry filed under: Uncategorized. Tags: Add new tag, emacs, howto.
1.
clay | November 26, 2008 at 6:22 pm
Could you please include some non-prototype examples of creating buttons. Even just one or two that makes something happen on the screen would be great.
Thanks.
2.
existentiality | November 26, 2008 at 8:03 pm
Hi clay,
I probably should have been a bit clearer. If you go to the scratch
buffer and enter and execute the following code:
(defun f (button) ‘find-file)
(make-button 1 10 ‘action ‘f ‘follow-link t)
then the first 10 characters of that buffer should become a button.
Clicking this button should cause the mini-buffer to try to find a
file.
Alternatively, if you have
(defun f (button) (insert “hey”))
then clicking this button will write “hey” where you clicked this button.
Hope this helps – say if it doesn’t.
3. Interesting Emacs Links - 2009 Week 11 « A Curious Programmer | March 15, 2009 at 5:48 pm
[...] are posts on searching multiple buffers, emacs version control and emacs buttons within the same [...]