changeset 39653:b36d97729582

(woman-mode-map): Copy button-buffer-map instead of making a new keymap. Don't bind mouse-2. Bind M-mouse-2 to `woman-follow-word' instead of `woman-mouse-2'. (woman-follow-word): Renamed from `woman-mouse-2'. Follow unconditionally, since this function is now only bound to M-mouse-2. Use accessor functions. (WoMan-highlight-references): Use `make-text-button'. (woman-xref): New button type.
author Miles Bader <miles@gnu.org>
date Sun, 07 Oct 2001 12:39:00 +0000
parents cd4ae2af5d87
children e5d1629afd24
files lisp/woman.el
diffstat 1 files changed, 18 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/woman.el	Sun Oct 07 12:07:34 2001 +0000
+++ b/lisp/woman.el	Sun Oct 07 12:39:00 2001 +0000
@@ -1033,6 +1033,13 @@
 Default is '(?n ?e ?o).  Set via `woman-emulation'.")
 
 
+;;; Button types:
+
+(define-button-type 'woman-xref
+  'action (lambda (button) (woman (button-label button)))
+  'help-echo "RET, mouse-2: display this man page")
+
+
 ;;; Specialized utility functions:
 
 ;;; Fast deletion without saving on the kill ring (cf. simple.el):
@@ -1700,8 +1707,10 @@
 
 (if woman-mode-map
     ()
-  ;; Set up the keymap, mostly inherited from Man-mode-map:
-  (setq woman-mode-map (make-sparse-keymap))
+  ;; Set up the keymap, mostly inherited from Man-mode-map.  Normally
+  ;; button-buffer-map is used as a parent keymap, but we can't have two
+  ;; parents, so we just copy it.
+  (setq woman-mode-map (copy-keymap button-buffer-map))
   (set-keymap-parent woman-mode-map Man-mode-map)
   ;; Above two lines were
   ;; (setq woman-mode-map (cons 'keymap Man-mode-map))
@@ -1709,19 +1718,14 @@
   (define-key woman-mode-map "w" 'woman)
   (define-key woman-mode-map "\en" 'WoMan-next-manpage)
   (define-key woman-mode-map "\ep" 'WoMan-previous-manpage)
-  (define-key woman-mode-map [mouse-2] 'woman-mouse-2)
-  (define-key woman-mode-map [M-mouse-2] 'woman-mouse-2))
-
-(defun woman-mouse-2 (event)
+  (define-key woman-mode-map [M-mouse-2] 'woman-follow-word))
+
+(defun woman-follow-word (event)
   "Run WoMan with word under mouse as topic.
-Require it to be mouse-highlighted unless Meta key used.
 Argument EVENT is the invoking mouse event."
   (interactive "e")			; mouse event
-  (let ((pos (cadr (cadr event))))	; extract buffer position
-    (when (or (eq (car event) 'M-mouse-2)
-	      (get-text-property pos 'mouse-face))
-      (goto-char pos)
-      (woman (current-word t)))))
+  (goto-char (posn-point (event-start event)))
+  (woman (current-word t)))
 
 ;; WoMan menu bar and pop-up menu:
 (easy-menu-define			; (SYMBOL MAPS DOC MENU)
@@ -1944,11 +1948,8 @@
       (while (re-search-forward Man-reference-regexp end t)
 	;; Highlight reference when mouse is over it.
 	;; (NB: WoMan does not hyphenate!)
-	;; [See (elisp)Clickable Text]
-	(add-text-properties (match-beginning 1) (match-end 1)
-			     '(mouse-face highlight
-			       help-echo "mouse-2: display this man page"))
-	))))
+	(make-text-button (match-beginning 1) (match-end 1)
+			  'type 'woman-xref)))))
 
 
 ;;; Buffer handling: