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

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

Re: How to generate a help-function-def-button?


From: Alan
Subject: Re: How to generate a help-function-def-button?
Date: Wed, 28 Mar 2012 19:29:53 -0000
User-agent: G2/1.0

On Dec 20, 12:32 pm, Rocky Zhang <rocky...@163.com-NOSPAM> wrote:
> Hi, everybody!
>
> The `help-function-def-button' in the help-window is very
> convenient to jump to the definition of a function. But I
> don't know how to generate such a button. Can anyone give
> me some tips about it?
>
> I've read the codes of `describe-function' in the
> `help-fns.el', but that's difficult to me to get point of
> it.
>
> Thanks very much!
>
> Best wishes,
> Rocky Zhang
>
> --- Posted via news://freenews.netfront.net/ - Complaints to 
> n...@netfront.net ---

I made the following notes to myself, while learning how to make such
buttons:

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

Below is an example of using "make-button", taken from "startup.el".

     (make-button (prog1 (point) (insert-image img)) (point)
             'face 'default
             'help-echo "mouse-2, RET: Browse http://www.gnu.org/";
             'action (lambda (button) (browse-url "http://
www.gnu.org/"))
             'follow-link t)

Note the use of 'follow-link t.  This is to make Mouse button 1 follow
links, if its duration is less than 450 milliseconds.

If a mouse click activates a button, subsequent use of "yes-or-no-p"
may use "dialog boxes".  Help for that function says:

     yes-or-no-p is a built-in function in `fns.c'.

     (yes-or-no-p PROMPT)

     Ask user a yes-or-no question.  Return t if answer is yes.
     Takes one argument, which is the string to display to ask the
     question.  It should end in a space; `yes-or-no-p' adds `(yes or
     no) ' to it.  The user must confirm the answer with RET, and can
     edit it until it has been confirmed.

     Under a windowing system a dialog box will be used if
     `last-nonmenu-event' is nil, and `use-dialog-box' is non-nil.

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

I defined a function to standardize my buttons:

(defun aw-make-button (button_text action_function remaining_text
&optional help_text new_line)
  "inserts a button e.g. in nova control buffer"
  (if (null help_text)
      (setq help_text button_text))
  (if (bolp)
    (insert "-"))
  (make-button (prog1 (point) (insert button_text)) (point)
               'help-echo (concat "mouse-1, RET: " help_text)
               'action action_function
               'follow-link t)
  (if (null new_line)
      (insert remaining_text "\n\n")
    (insert remaining_text)))

An example of using my "aw-make-button" function is:

(aw-make-button "Open customization group: nova_review"
                          '(lambda (button) (customize-group "nova_review"))
                          "\t\t" nil t)

I was handing off a fair amount of lisp code to someone who knew
Emacs, but knew little lisp.  I wanted to use buttons to automate a
fair amount of what I had been doing with lisp, so that this person
could simply click on buttons in a buffer.


reply via email to

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