| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] | 
The normal Emacs command for activating text in read-only buffers is 
<Mouse-2>, which includes following textual links.  However, most 
graphical applications use <Mouse-1> for following links.  For 
compatibility, <Mouse-1> follows links in Emacs too, when you click on a 
link quickly without moving the mouse.  The user can customize this behavior 
through the variable mouse-1-click-follows-link.
To define text as a link at the Lisp level, you should bind the 
mouse-2 event to a command to follow the link.  Then, to indicate 
that <Mouse-1> should also follow the link, you should specify a 
follow-link condition either as a text property or as a key binding:
follow-link propertyIf the clickable text has a non-nil follow-link text or 
overlay property, that specifies the condition.
follow-link eventIf there is a binding for the follow-link event, either on the 
clickable text or in the local keymap, the binding is the condition.
Regardless of how you set the follow-link condition, its value is 
used as follows to determine whether the given position is inside a link, 
and (if so) to compute an action code saying how <Mouse-1> should 
handle the link.
mouse-faceIf the condition is mouse-face, a position is inside a link if there 
is a non-nil mouse-face property at that position.  The action 
code is always t.
For example, here is how Info mode handles <Mouse-1>:
| (define-key Info-mode-map [follow-link] 'mouse-face) | 
If the condition is a valid function, func, then a position pos 
is inside a link if (func pos) evaluates to 
non-nil.  The value returned by func serves as the action code.
For example, here is how pcvs enables <Mouse-1> to follow links on file names only:
| (define-key map [follow-link]
  (lambda (pos)
    (eq (get-char-property pos 'face) 'cvs-filename-face)))
 | 
If the condition value is anything else, then the position is inside a link and the condition itself is the action code. Clearly you should only specify this kind of condition on the text that constitutes a link.
The action code tells <Mouse-1> how to follow the link:
If the action code is a string or vector, the <Mouse-1> event is 
translated into the first element of the string or vector; i.e., the action 
of the <Mouse-1> click is the local or global binding of that character 
or symbol.  Thus, if the action code is "foo", <Mouse-1> 
translates into f.  If it is [foo], <Mouse-1> translates 
into <foo>.
For any other non-nil action code, the mouse-1 event is 
translated into a mouse-2 event at the same position.
To define <Mouse-1> to activate a button defined with 
define-button-type, give the button a follow-link property 
with a value as specified above to determine how to follow the link.  For 
example, here is how Help mode handles <Mouse-1>:
| (define-button-type 'help-xref 'follow-link t 'action #'help-button-action) | 
To define <Mouse-1> on a widget defined with define-widget, give 
the widget a :follow-link property with a value as specified above to 
determine how to follow the link.
For example, here is how the link widget specifies that a 
<Mouse-1> click shall be translated to <RET>:
| (define-widget 'link 'item "An embedded link." :button-prefix 'widget-link-prefix :button-suffix 'widget-link-suffix :follow-link "\C-m" :help-echo "Follow the link." :format "%[%t%]") | 
This function returns non-nil if position pos in the current 
buffer is on a link.  pos can also be a mouse event location, as 
returned by event-start (voir la section Accessing Events).
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] | 
 
  Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.