From: Jared Finder via "Emacs development discussions." <emacs-devel@gnu.org>
To: emacs-devel@gnu.org
Subject: mouse-face and help echo support for xterm mouse
Date: Sat, 31 Oct 2020 22:46:32 -0700 [thread overview]
Message-ID: <ae5c40e224c21f323c2b59333b416c55@finder.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 395 bytes --]
Attached is a patch that makes the xterm-mouse properly support
mouse-face and help echo text. It simply adds a new function to call
from Lisp that does what the existing event handlers
(handle_one_term_event for GPM, w32_read_socket for Windows, etc.) when
they notice mouse movement.
I think with this the xterm-mouse is now at parity with other terminal
mouse support. Yay!
-- MJF
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Face-changing-text-properties-and-help-echo-now-work.patch --]
[-- Type: text/x-diff; name=0001-Face-changing-text-properties-and-help-echo-now-work.patch, Size: 3296 bytes --]
From b7eb78397bc96c0e1bc2d280bd6660bbaa779790 Mon Sep 17 00:00:00 2001
From: Jared Finder <jared@finder.org>
Date: Sat, 31 Oct 2020 21:25:47 -0800
Subject: [PATCH] Face-changing text properties and help-echo now work with
xterm-mouse.
* src/term.c (handle-lisp-mouse-motion): New function like
handle_one_term_event but only for mouse motion and with no GPM code.
* lisp/xt-mouse.el (xterm-mouse--handle-mouse-motion): New function that
calls 'handle-lisp-mouse-motion'.
(xterm-mouse-translate-1): Call 'xterm-mouse--handle-mouse-motion'.
---
lisp/xt-mouse.el | 9 +++++++++
src/term.c | 28 ++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index f9c08f9a17..37550276f8 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -77,6 +77,7 @@ xterm-mouse-translate-1
(copy-sequence event))
vec)
(is-move
+ (xterm-mouse--handle-mouse-motion)
(if track-mouse vec
;; Mouse movement events are currently supposed to be
;; suppressed. Return no event.
@@ -106,8 +107,16 @@ xterm-mouse-translate-1
(if (null track-mouse)
(vector drag)
(push drag unread-command-events)
+ (xterm-mouse--handle-mouse-motion)
(vector (list 'mouse-movement ev-data))))))))))))
+(defun xterm-mouse--handle-mouse-motion ()
+ "Handle mouse motion that was just generated for XTerm mouse."
+ (let ((frame (selected-frame)))
+ (handle-lisp-mouse-motion frame
+ (terminal-parameter frame 'xterm-mouse-x)
+ (terminal-parameter frame 'xterm-mouse-y))))
+
;; These two variables have been converted to terminal parameters.
;;
;;(defvar xterm-mouse-x 0
diff --git a/src/term.c b/src/term.c
index ff1aabfed2..710b00e32f 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2617,6 +2617,33 @@ handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event,
return count;
}
+DEFUN ("handle-lisp-mouse-motion", Fhandle_lisp_mouse_motion,
+ Shandle_lisp_mouse_motion, 3, 3, 0,
+ doc: /* Handle mouse motion detected by Lisp code.
+
+This function should be called when Lisp code detects the mouse has
+moved, even if `track-mouse' is nil. This handles updates that do not
+not rely on input events such as updating display for mouse-face
+proprties or updating the help echo text. */)
+ (Lisp_Object frame, Lisp_Object mouse_x, Lisp_Object mouse_y)
+{
+ if (NILP (frame))
+ frame = selected_frame;
+
+ previous_help_echo_string = help_echo_string;
+ help_echo_string = Qnil;
+
+ note_mouse_highlight(XFRAME(frame), XFIXNUM (mouse_x), XFIXNUM (mouse_y));
+
+ if (!NILP (help_echo_string)
+ || !NILP (previous_help_echo_string))
+ {
+ gen_help_event (help_echo_string, frame, help_echo_window,
+ help_echo_object, help_echo_pos);
+ }
+ return Qnil;
+}
+
DEFUN ("gpm-mouse-start", Fgpm_mouse_start, Sgpm_mouse_start,
0, 0, 0,
doc: /* Open a connection to Gpm.
@@ -4568,6 +4595,7 @@ syms_of_term (void)
defsubr (&Stty_top_frame);
defsubr (&Ssuspend_tty);
defsubr (&Sresume_tty);
+ defsubr (&Shandle_lisp_mouse_motion);
#ifdef HAVE_GPM
defsubr (&Sgpm_mouse_start);
defsubr (&Sgpm_mouse_stop);
--
2.20.1
next reply other threads:[~2020-11-01 5:46 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-01 5:46 Jared Finder via Emacs development discussions. [this message]
2020-11-01 13:39 ` mouse-face and help echo support for xterm mouse Stefan Monnier
2020-11-01 15:56 ` Jared Finder via Emacs development discussions.
2020-11-04 6:54 ` Jared Finder via Emacs development discussions.
2020-11-04 14:13 ` Stefan Monnier
2020-11-04 15:46 ` Eli Zaretskii
2020-11-04 15:56 ` Stefan Monnier
2020-11-04 17:54 ` Jared Finder via Emacs development discussions.
2020-11-04 18:47 ` Stefan Monnier
2020-11-04 18:51 ` Eli Zaretskii
2020-11-04 19:05 ` Stefan Monnier
2020-11-04 19:10 ` Jared Finder via Emacs development discussions.
2020-11-04 15:19 ` Eli Zaretskii
2020-11-05 8:15 ` Jared Finder via Emacs development discussions.
2020-11-05 14:45 ` Stefan Monnier
2020-11-05 19:58 ` Jared Finder via Emacs development discussions.
2020-11-05 20:18 ` Stefan Monnier
2020-11-06 5:23 ` Jared Finder via Emacs development discussions.
2020-11-06 6:00 ` Eli Zaretskii
2020-11-06 6:46 ` Jared Finder via Emacs development discussions.
2020-11-06 7:39 ` Eli Zaretskii
2020-11-07 1:22 ` Jared Finder via Emacs development discussions.
2020-11-14 12:38 ` Eli Zaretskii
2020-11-14 12:35 ` 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=ae5c40e224c21f323c2b59333b416c55@finder.org \
--to=emacs-devel@gnu.org \
--cc=jared@finder.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.