Mercurial > emacs
changeset 59494:d8cf3d034936
(Enabling Mouse-1 to Follow Links): Rewrite.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 12 Jan 2005 05:14:03 +0000 |
parents | 0b8e17ea69db |
children | 6aaea6eb876c |
files | lispref/text.texi |
diffstat | 1 files changed, 64 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/lispref/text.texi Wed Jan 12 05:11:56 2005 +0000 +++ b/lispref/text.texi Wed Jan 12 05:14:03 2005 +0000 @@ -3394,57 +3394,54 @@ @subsection Enabling Mouse-1 to Follow Links @cindex follow links - Traditionally, Emacs uses a @key{mouse-1} click to set point and a -@key{mouse-2} click to follow a link, whereas most other applications -use a @key{mouse-1} click for both purposes, depending on whether you -click outside or inside a link. - - Starting with Emacs release 21.4, the user visible behaviour of a -@key{mouse-1} click on a link has been changed to match this -context-sentitive dual behaviour. The user can customize this -behaviour through the variable @code{mouse-1-click-follows-link}. - - However, at the Lisp level, @key{mouse-2} is still used as the -action for the clickable text corresponding to the link, and the -clickable text must be explicitly marked as a link for a @key{mouse-1} -click to follow the link. - - There are several methods that can be used to identify a clickable -text as a link: + The normal Emacs command for activating text in read-only buffers is +@key{Mouse-2}, which includes following textual links. However, most +graphical applications use @key{Mouse-1} for following links. For +compatibility, @key{Mouse-1} follows links in Emacs too, when you +click on a link quickly without moving the mouse. The user can +customize this behaviour through the variable +@code{mouse-1-click-follows-link}. + + To define text as a link at the Lisp level, you should bind +@key{Mouse-2} to a command to follow the link. Then, to indicate +that @key{Mouse-1} should also follow the link, here is what you do: @table @asis -@item follow-link property - - If the clickable text has a non-nil @code{follow-link} text or overlay +@item @code{follow-link} property +If the clickable text has a non-@code{nil} @code{follow-link} text or overlay property, the value of that property determines what to do. -@item follow-link event - - If there is a binding for the @code{follow-link} event, either on +@item @code{follow-link} event +If there is a binding for the @code{follow-link} event, either on the clickable text or in the local keymap, the binding of that event -determines whether the mouse click position is inside a link: +determines whether the mouse click position is inside a link. +@end table + + Regardless of where the @code{follow-link} value comes from, that +value is used according to the following table to determine whether +the given position is inside a link, and (if so) to compute an +@dfn{action code} saying how @key{Mouse-1} should handle the link. @table @asis -@item mouse-face - - If the binding is @code{mouse-face}, the mouse click position is -inside a link if there is a non-nil @code{mouse-face} property at -that position. A value of @code{t} is used to determine what to do next. - -For example, here is how @key{mouse-1} are setup in info mode: +@item @code{mouse-face} +If the value is @code{mouse-face}, a position is inside a link if +there is a non-@code{nil} @code{mouse-face} property at that position. +The action code is always @code{t}. + +For example, here is how Info mode handles @key{Mouse-1}: @example (define-key Info-mode-map [follow-link] 'mouse-face) @end example @item a function - - If the binding is a function, @var{func}, the mouse click position, -@var{pos}, is inside a link if the call @code{(@var{func} @var{pos})} -returns non-@code{nil}. The return value from that call determines -what to do next. - -For example, here is how pcvs enables @key{mouse-1} on file names only: +If the value is a function, @var{func}, then a position @var{pos} is +inside a link if @code{(@var{func} @var{pos})} evaluates to +non-@code{nil}. The value returned by @var{func} serves as the action +code. + +For example, here is how pcvs enables @key{Mouse-1} to follow links on +file names only: @example (define-key map [follow-link] @@ -3452,46 +3449,48 @@ (if (eq (get-char-property pos 'face) 'cvs-filename-face) t))) @end example -@item anthing else - - If the binding is anything else, the binding determines what to do. -@end table - +@item anything else +If the value is anything else, it is the action code. @end table @noindent -The resulting value determined above is interpreted as follows: +Here's how the action code determines what @key{Mouse-1} should do: @table @asis @item a string - - If the value is a string, the @key{mouse-1} event is translated into -the first character of the string, i.e. the action of the @key{mouse-1} -click is the local or global binding of that character. +If the action code is a string, the @key{Mouse-1} event is translated +into the first character of the string, i.e., the action of the +@key{Mouse-1} click is the local or global binding of that character. +Thus, if the action code is @code{"foo"}, @key{Mouse-1} translates +into @kbd{f}. @item a vector - - If the value is is a vector, the @key{mouse-1} event is translated -into the first element of that vector, i.e. the action of the -@key{mouse-1} click is the local or global binding of that event. - -@item anthing else - - For any other non-nil valule, the @key{mouse-1} event is translated -into a @key{mouse-2} event at the same position. +If the action code is is a vector, the @key{Mouse-1} event is +translated into the first element of that vector, i.e,. the action of +the @key{Mouse-1} click is the local or global binding of that event. +Thus, if the action code is @code{[?f ?o ?o]}, @key{Mouse-1} +translates into @kbd{f}. + +@item anything else +For any other non-@code{nil} action code, the @code{mouse-1} event is +translated into a @code{mouse-2} event at the same position. @end table - To use @key{mouse-1} on a button defined with @code{define-button-type}, -give the button a @code{follow-link} property with a value as -specified above to determine how to follow the link. - - To use @key{mouse-1} on a widget defined with @code{define-widget}, -give the widget a @code{:follow-link} property with a value -as specified above to determine how to follow the link. + To define @key{Mouse-1} to activate a button defined with +@code{define-button-type}, give the button a @code{follow-link} +property with a value as specified above to determine how to follow +the link. +@c ??? That is not clear. This needs an example or an xref. + + To define @key{Mouse-1} on a widget defined with +@code{define-widget}, give the widget a @code{:follow-link} property +with a value as specified above to determine how to follow the link. +@c ??? That is not clear. This needs an example or an xref. @defun mouse-on-link-p pos @tindex mouse-on-link-p -Return non-@code{nil} if @var{pos} is on a link in the current buffer. +This function returns non-@code{nil} if position @var{pos} in the +current buffer is on a link. @end defun @node Fields