From: Tomas Abrahamsson <tab@lysator.liu.se>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: artist-mouse-choose-operation
Date: Mon, 09 Nov 2009 23:22:11 +0100 [thread overview]
Message-ID: <uqbpjbl4oc.fsf@stalhein.lysator.liu.se> (raw)
In-Reply-To: <834opfeq8a.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 31 Oct 2009 13:51:17 +0200")
Eli Zaretskii <eliz@gnu.org> writes:
> The function in the Subject calls x-popup-menu, evidently under the
> assumption that if Emacs can use a mouse, it also supports menus. But
> that assumption is false: Emacs configured --without-x can have mouse
> support, e.g. via gpm-mouse, but does not have x-popup-menu.
Yes, I agree this is a bug. Below is a patch for fixing the bug and a
proposal for a ChangeLog entry.
* textmodes/artist.el (artist-mouse-choose-operation) call
`tmm-prompt' instead of `x-popup-menu' if we cannot popup
menus. Bug noticed by Eli Zaretskii <eliz@gnu.org>.
* textmodes/artist.el (artist-mouse-choose-operation)
(artist-down-mouse-1): call (new) function
`artist-compute-up-event-key'.
The patch is against the latest from the git/cvs repository as of
yesterday (Sunday). The patch is made by me.
BRs
Tomas
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index c69e3bc..03cb77b 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -4750,6 +4750,15 @@ If optional argument STATE is positive, turn borders on."
"Function that does nothing."
(interactive))
+(defun artist-compute-up-event-key (ev)
+ "Compute the corresponding up key sequence for event EV."
+ (let* ((basic (event-basic-type ev))
+ (unshifted basic)
+ (shifted (make-symbol (concat "S-" (symbol-name basic)))))
+ (if (artist-event-is-shifted ev)
+ (make-vector 1 shifted)
+ (make-vector 1 unshifted))))
+
(defun artist-down-mouse-1 (ev)
"Perform drawing action for event EV."
(interactive "@e")
@@ -4761,15 +4770,10 @@ If optional argument STATE is positive, turn borders on."
(orig-draw-region-min-y artist-draw-region-min-y)
(orig-draw-region-max-y artist-draw-region-max-y)
(orig-pointer-shape (if (eq window-system 'x) x-pointer-shape nil))
- (echo-keystrokes 10000) ; a lot of seconds
+ (echoq-keystrokes 10000) ; a lot of seconds
;; Remember original binding for the button-up event to this
;; button-down event.
- (key (let* ((basic (event-basic-type ev))
- (unshifted basic)
- (shifted (make-symbol (concat "S-" (symbol-name basic)))))
- (if (artist-event-is-shifted ev)
- (make-vector 1 shifted)
- (make-vector 1 unshifted))))
+ (key (artist-compute-up-event-key ev))
(orig-button-up-binding (lookup-key (current-global-map) key)))
(unwind-protect
@@ -4835,7 +4839,21 @@ If optional argument STATE is positive, turn borders on."
(progn
(select-window (posn-window (event-start last-input-event)))
(list last-input-event
- (x-popup-menu last-nonmenu-event artist-popup-menu-table))))
+ (if (display-popup-menus-p)
+ (x-popup-menu last-nonmenu-event artist-popup-menu-table)
+ 'no-popup-menus))))
+
+ (if (eq op 'no-popup-menus)
+ ;; No popup menus. Call `tmm-prompt' instead, but with the
+ ;; up-mouse-button, if any, temporarily disabled, otherwise
+ ;; it'll interfere.
+ (let* ((key (artist-compute-up-event-key ev))
+ (orig-button-up-binding (lookup-key (current-global-map) key)))
+ (unwind-protect
+ (define-key (current-global-map) key 'artist-do-nothing)
+ (setq op (tmm-prompt artist-popup-menu-table))
+ (if orig-button-up-binding
+ (define-key (current-global-map) key orig-button-up-binding)))))
(let ((draw-fn (artist-go-get-draw-fn-from-symbol (car op)))
(set-fn (artist-fc-get-fn-from-symbol (car op))))
next prev parent reply other threads:[~2009-11-09 22:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-31 11:51 artist-mouse-choose-operation Eli Zaretskii
2009-11-09 22:22 ` Tomas Abrahamsson [this message]
2009-11-10 17:20 ` artist-mouse-choose-operation Stefan Monnier
2009-11-10 19:09 ` artist-mouse-choose-operation Eli Zaretskii
2009-11-10 19:31 ` artist-mouse-choose-operation Stefan Monnier
2009-11-10 21:32 ` artist-mouse-choose-operation tomas
2009-11-10 21:06 ` artist-mouse-choose-operation Tomas Abrahamsson
2009-11-13 10:34 ` artist-mouse-choose-operation Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=uqbpjbl4oc.fsf@stalhein.lysator.liu.se \
--to=tab@lysator.liu.se \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.