mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
(next-button, previous-button): Respect `skip' property.
(push-button, button-activate): Add USE-MOUSE-ACTION argument.
This commit is contained in:
parent
e664497b5f
commit
d6bc0bdc4a
@ -1,3 +1,8 @@
|
||||
2001-10-08 Miles Bader <miles@gnu.org>
|
||||
|
||||
* button.el (next-button, previous-button): Respect `skip' property.
|
||||
(push-button, button-activate): Add USE-MOUSE-ACTION argument.
|
||||
|
||||
2001-10-07 Miles Bader <miles@gnu.org>
|
||||
|
||||
* woman.el (woman-mode-map): Copy button-buffer-map instead of
|
||||
|
@ -184,9 +184,14 @@ Buttons inherit them by setting their `category' property to that symbol."
|
||||
(point-max))
|
||||
prop val)))
|
||||
|
||||
(defsubst button-activate (button)
|
||||
"Call BUTTON's action property."
|
||||
(funcall (button-get button 'action) button))
|
||||
(defsubst button-activate (button use-mouse-action)
|
||||
"Call BUTTON's action property.
|
||||
If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
|
||||
instead of its normal action; if the button has no mouse-action,
|
||||
the normal action is used instead."
|
||||
(funcall (or (and use-mouse-action (button-get button 'mouse-action))
|
||||
(button-get button 'action))
|
||||
button))
|
||||
|
||||
(defun button-label (button)
|
||||
"Return BUTTON's text label."
|
||||
@ -314,7 +319,10 @@ If COUNT-CURRENT is non-nil, count any button at POS in the search,
|
||||
;; Search for the next button boundary.
|
||||
(setq pos (next-single-char-property-change pos 'button)))
|
||||
(let ((button (button-at pos)))
|
||||
(cond ((and button (>= n 2))
|
||||
(cond ((and button (button-get button 'skip))
|
||||
;; Found a button, but the button declines to be found; recurse.
|
||||
(next-button (button-start button) n wrap))
|
||||
((and button (>= n 2))
|
||||
;; Found a button, but we want a different one; recurse.
|
||||
(next-button (button-start button) (1- n) wrap))
|
||||
(button
|
||||
@ -344,7 +352,10 @@ If COUNT-CURRENT is non-nil, count any button at POS in the search,
|
||||
(unless count-current
|
||||
(setq pos (previous-single-char-property-change pos 'button)))
|
||||
(let ((button (and (> pos (point-min)) (button-at (1- pos)))))
|
||||
(cond ((and button (>= n 2))
|
||||
(cond ((and button (button-get button 'skip))
|
||||
;; Found a button, but the button declines to be found; recurse.
|
||||
(previous-button (button-start button) n wrap))
|
||||
((and button (>= n 2))
|
||||
;; Found a button, but we want a different one; recurse.
|
||||
(previous-button (button-start button) (1- n) wrap))
|
||||
(button
|
||||
@ -362,9 +373,12 @@ If COUNT-CURRENT is non-nil, count any button at POS in the search,
|
||||
|
||||
;; User commands
|
||||
|
||||
(defun push-button (&optional pos)
|
||||
(defun push-button (&optional pos use-mouse-action)
|
||||
"Perform the action specified by a button at location POS.
|
||||
POS may be either a buffer position or a mouse-event.
|
||||
If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
|
||||
instead of its normal action; if the button has no mouse-action,
|
||||
the normal action is used instead.
|
||||
POS defaults to point, except when `push-button' is invoked
|
||||
interactively as the result of a mouse-event, in which case, the
|
||||
mouse event is used.
|
||||
@ -376,12 +390,12 @@ return t."
|
||||
;; POS is a mouse event; switch to the proper window/buffer
|
||||
(let ((posn (event-start pos)))
|
||||
(with-current-buffer (window-buffer (posn-window posn))
|
||||
(push-button (posn-point posn))))
|
||||
(push-button (posn-point posn) t)))
|
||||
;; POS is just normal position
|
||||
(let ((button (button-at (or pos (point)))))
|
||||
(if (not button)
|
||||
nil
|
||||
(button-activate button)
|
||||
(button-activate button use-mouse-action)
|
||||
t))))
|
||||
|
||||
(defun forward-button (n &optional wrap display-message)
|
||||
|
Loading…
Reference in New Issue
Block a user