From: Jared Finder via "Emacs development discussions." <emacs-devel@gnu.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Making TTY menus more visual
Date: Sun, 04 Oct 2020 22:36:21 -0700 [thread overview]
Message-ID: <033517da1ce6762b3d3c656dad4d8f98@finder.org> (raw)
In-Reply-To: <83y2kme50p.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 4734 bytes --]
>> > Now there are newly emitted events for mouse-movement that are not
>> > handled such as "<mode-line> <mouse-movement>" or "<vertical-line>
>> > <mouse-movement>". It'd be easy enough to bind all of these to ignore
>> > and further update tty-menu-navigation-map to have more cases, but is
>> > that the right solution? I'm surprised that only xterm-mouse would run
>> > into this case.
>>
>> Emacs normally doesn't receive mouse-movement events unless we
>> explicitly enable that, see the macro track-mouse. And the
>> menu-processing code for other TTYs doesn't enable mouse-movement
>> events because it isn't needed: with other mice the mouse coordinates
>> can be read even if the button wasn't clicked.
>
> Actually, I see that my memory was faulty, sorry: we do enable
> mouse-movement events internally in read_menu_input. And the map used
> by TTY menus, defined in menu-bar.el, does have this binding:
>
> (define-key map [mouse-movement] 'tty-menu-mouse-movement)
>
> So I'm not sure why you'd need to explicitly ignore mouse-movement
> events on the mode line. Can you tell more about the problems you saw
> with that?
Two things combined fixed all issues I saw: respecting track-mouse and
adding all possible prefix bindings to tty-menu-navigation-map.
Without track-mouse being respected, I would see messages such as
"<mode-line> <mouse-movement> is undefined" whenever I moved the mouse
over those special areas of the window.
Without adding the prefix bindings to tty-menu-navigation-map, TTY menu
interaction with the mouse would only work when the mouse was over the
normal parts of the window and not any of the special areas such as
mode-line.
With both of these changes, the menu bars menus work fine as well as
usual mouse drag operations such as highlighting text or dragging the
mode-line to resize windows.
>> diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
>> index 362d29b943..ae6f85f1f7 100644
>> --- a/lisp/xt-mouse.el
>> +++ b/lisp/xt-mouse.el
>> @@ -339,7 +339,7 @@ xterm-mouse-tracking-enable-sequence
>> position (<= 223), which can be reported in this
>> basic mode.
>>
>> -\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
>> +\"\\e[?1003h\" \"Mouse motion mode\": Enables reports for mouse
>> motion events during dragging operations.
>
> I think we should only switch to 0x1003 when the track-mouse variable
> is non-nil, see the macro track-mouse and its internal part
> internal--track-mouse.
I did this slightly differently as I did not find any way to be notified
that track-mouse has changed. Instead I suppress mouse events from ever
being emitted if track-mouse is nil. See xterm-mouse-translate-1 in my
patch.
>> @@ -2804,16 +2814,14 @@ tty_menu_calc_size (tty_menu *menu, int
>> *width, int *height)
>> static void
>> mouse_get_xy (int *x, int *y)
>> {
>> - struct frame *sf = SELECTED_FRAME ();
>> - Lisp_Object lmx = Qnil, lmy = Qnil, lisp_dummy;
>> - enum scroll_bar_part part_dummy;
>> - Time time_dummy;
>> -
>> - if (FRAME_TERMINAL (sf)->mouse_position_hook)
>> - (*FRAME_TERMINAL (sf)->mouse_position_hook) (&sf, -1,
>> - &lisp_dummy,
>> &part_dummy,
>> - &lmx, &lmy,
>> - &time_dummy);
>> + Lisp_Object lmx = Qnil, lmy = Qnil, mouse_position =
>> Fmouse_position ();
>> +
>> + if (EQ (selected_frame, XCAR(mouse_position)))
>> + {
>> + lmx = XCAR (XCDR (mouse_position));
>> + lmy = XCDR (XCDR (mouse_position));
>> + }
>> +
>
> This is okay as a general idea, but it would be more clean to make
> Fmouse_position call a new C function (extracted from the first part
> of Fmouse_position's code) that just computes the mouse coordinates.
> Then Fmouse_position's would call mouse-position-function after the
> new C function returns. Then in term.c we could call just that new C
> function. This is because it is inappropriate for mouse_get_xy to
> call mouse-position-function when a menu is being processed.
>
> Thanks.
That won't work. Making mouse_get_xy call mouse-position-function is the
purpose of this change. mouse-position-function is how xterm-mouse
injects its calculated mouse positions to the TTY menus. From searching
the Emacs codebase for usage of mouse-position-function, it appears that
xterm-mouse is the only client. Of course external libraries could use
it too, but I assume they would have the same goal.
New patches attached. BTW, is it helpful to have this split up into two
patches (three if you count my bug fix)? I did it this way to make
reviewing and accepting easier, but if you would rather have one bigger
patch, I'm fine doing that too.
-- MJF
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Adding-mouse-controls-to-menu-bar.el.patch --]
[-- Type: text/x-diff; name=0001-Adding-mouse-controls-to-menu-bar.el.patch, Size: 8036 bytes --]
From 3366c93ea0c46bc5f95018fe23889f6b4bba267d Mon Sep 17 00:00:00 2001
From: Jared Finder <jared@finder.org>
Date: Sat, 19 Sep 2020 00:43:29 -0700
Subject: [PATCH 1/2] Adding mouse controls to menu-bar.el.
---
lisp/isearch.el | 4 +--
| 74 ++++++++++++++++++++++++++++++++++++++++++++++++
lisp/tmm.el | 64 ++++++-----------------------------------
3 files changed, 84 insertions(+), 58 deletions(-)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 781a8c5a93..1d7321f0e3 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -54,7 +54,7 @@
;;; Code:
(eval-when-compile (require 'cl-lib))
-(declare-function tmm-menubar-keymap "tmm.el")
+(declare-function menu-bar-keymap "menu-bar.el")
\f
;; Some additional options and constants.
@@ -501,7 +501,7 @@ isearch-tmm-menubar
(require 'tmm)
(run-hooks 'menu-bar-update-hook)
(let ((command nil))
- (let ((menu-bar (tmm-menubar-keymap)))
+ (let ((menu-bar (menu-bar-keymap)))
(with-isearch-suspended
(setq command (let ((isearch-mode t)) ; Show bindings from
; `isearch-mode-map' in
--git a/lisp/menu-bar.el b/lisp/menu-bar.el
index d3e434aec9..4a0a27415b 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -2660,6 +2660,80 @@ menu-bar-open
(global-set-key [f10] 'menu-bar-open)
+(defun menu-bar-open-mouse (event)
+ "Mosue-triggered version of `menu-bar-open'.
+This command is to be used when you click the mouse in the menubar."
+ (interactive "e")
+ (require 'tmm) ; Possibly have tmm depend on menu-bar instead?
+ (let* ((x-position (car (posn-x-y (event-start event))))
+ (menu-bar-item-cons (menu-bar-item-at-x x-position)))
+ (menu-bar-open nil
+ (if menu-bar-item-cons
+ (cdr menu-bar-item-cons)
+ 0))))
+
+(defun menu-bar-keymap ()
+ "Return the current menu-bar keymap.
+
+The ordering of the return value respects `menu-bar-final-items'."
+ (let ((menu-bar '())
+ (menu-end '()))
+ (map-keymap
+ (lambda (key binding)
+ (let ((pos (seq-position menu-bar-final-items key))
+ (menu-item (cons key binding)))
+ (if pos
+ ;; If KEY is the name of an item that we want to put
+ ;; last, store it separately with explicit ordering for
+ ;; sorting.
+ (push (cons pos menu-item) menu-end)
+ (push menu-item menu-bar))))
+ (menu-bar-get-keybind [menu-bar]))
+ `(keymap ,@(nreverse menu-bar)
+ ,@(mapcar 'cdr (sort menu-end
+ (lambda (a b) (< (car a) (car b))))))))
+(defun menu-bar-get-keybind (keyseq)
+ "Return the current binding of KEYSEQ, merging prefix definitions.
+If KEYSEQ is a prefix key that has local and global bindings,
+we merge them into a single keymap which shows the proper order of the menu.
+However, for the menu bar itself, the value does not take account
+of `menu-bar-final-items'."
+ (lookup-key (cons 'keymap (nreverse (current-active-maps))) keyseq))
+
+(defun menu-bar-item-at-x (x-position)
+ "Return a cons of the form (KEY . X) for the item clicked on.
+
+If nothing is clicked on, returns nil."
+ (let ((column 0)
+ (menu-bar (menu-bar-keymap))
+ prev-key
+ prev-column
+ found)
+ (catch 'done
+ (map-keymap
+ (lambda (key binding)
+ (when (> column x-position)
+ (setq found t)
+ (throw 'done nil))
+ (setq prev-key key)
+ (pcase binding
+ ((or `(,(and (pred stringp) name) . ,_) ;Simple menu item.
+ `(menu-item ,name ,_cmd ;Extended menu item.
+ . ,(and props
+ (guard (let ((visible
+ (plist-get props :visible)))
+ (or (null visible)
+ (eval visible)))))))
+ (setq prev-column column
+ column (+ column (length name) 1)))))
+ menu-bar)
+ ;; Check the last menu item.
+ (when (> column x-position)
+ (setq found t)))
+ (if found
+ (cons prev-key prev-column)
+ nil)))
+
(defun buffer-menu-open ()
"Start key navigation of the buffer menu.
This is the keyboard interface to \\[mouse-buffer-menu]."
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 074ee7593f..b73af9cda3 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -28,6 +28,8 @@
;;; Code:
(require 'electric)
+(declare-function menu-bar-keymap "menu-bar.el")
+(declare-function menu-bar-item-at-x "menu-bar.el")
(defgroup tmm nil
"Text mode access to menu-bar."
@@ -42,27 +44,6 @@ tmm-km-list
(defvar tmm-next-shortcut-digit)
(defvar tmm-table-undef)
-(defun tmm-menubar-keymap ()
- "Return the current menu-bar keymap.
-
-The ordering of the return value respects `menu-bar-final-items'."
- (let ((menu-bar '())
- (menu-end '()))
- (map-keymap
- (lambda (key binding)
- (let ((pos (seq-position menu-bar-final-items key))
- (menu-item (cons key binding)))
- (if pos
- ;; If KEY is the name of an item that we want to put
- ;; last, store it separately with explicit ordering for
- ;; sorting.
- (push (cons pos menu-item) menu-end)
- (push menu-item menu-bar))))
- (tmm-get-keybind [menu-bar]))
- `(keymap ,@(nreverse menu-bar)
- ,@(mapcar 'cdr (sort menu-end
- (lambda (a b) (< (car a) (car b))))))))
-
;;;###autoload (define-key global-map "\M-`" 'tmm-menubar)
;;;###autoload (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
@@ -78,33 +59,12 @@ tmm-menubar
`tty-menu-open-use-tmm' to a non-nil value."
(interactive)
(run-hooks 'menu-bar-update-hook)
- ;; Obey menu-bar-final-items; put those items last.
- (let ((menu-bar (tmm-menubar-keymap))
- menu-bar-item)
- (if x-position
- (let ((column 0)
- prev-key)
- (catch 'done
- (map-keymap
- (lambda (key binding)
- (when (> column x-position)
- (setq menu-bar-item prev-key)
- (throw 'done nil))
- (setq prev-key key)
- (pcase binding
- ((or `(,(and (pred stringp) name) . ,_) ;Simple menu item.
- `(menu-item ,name ,_cmd ;Extended menu item.
- . ,(and props
- (guard (let ((visible
- (plist-get props :visible)))
- (or (null visible)
- (eval visible)))))))
- (setq column (+ column (length name) 1)))))
- menu-bar)
- ;; Check the last menu item.
- (when (> column x-position)
- (setq menu-bar-item prev-key)))))
- (tmm-prompt menu-bar nil menu-bar-item)))
+ (let ((menu-bar (menu-bar-keymap))
+ (menu-bar-item-cons (and x-position
+ (menu-bar-item-at-x x-position))))
+ (tmm-prompt menu-bar
+ nil
+ (and menu-bar-item-cons (car menu-bar-item-cons)))))
;;;###autoload
(defun tmm-menubar-mouse (event)
@@ -524,14 +484,6 @@ tmm-get-keymap
(or (assoc str tmm-km-list)
(push (cons str (cons event km)) tmm-km-list))))))
-(defun tmm-get-keybind (keyseq)
- "Return the current binding of KEYSEQ, merging prefix definitions.
-If KEYSEQ is a prefix key that has local and global bindings,
-we merge them into a single keymap which shows the proper order of the menu.
-However, for the menu bar itself, the value does not take account
-of `menu-bar-final-items'."
- (lookup-key (cons 'keymap (nreverse (current-active-maps))) keyseq))
-
(provide 'tmm)
;;; tmm.el ends here
--
2.20.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-Making-TTY-menus-work-with-xterm-mouse-mode.patch --]
[-- Type: text/x-diff; name=0002-Making-TTY-menus-work-with-xterm-mouse-mode.patch, Size: 9141 bytes --]
From a8831a847059a448dda1d4502d5b8f486b6bf0e5 Mon Sep 17 00:00:00 2001
From: Jared Finder <jared@finder.org>
Date: Sat, 3 Oct 2020 14:46:30 -0700
Subject: [PATCH 2/2] Making TTY menus work with xterm-mouse-mode.
* xt-mouse.el uses SET_ANY_EVENT_MOUSE (1003) so mouse movement can be
reported even if no buttons are pressed.
* xt-mouse.el now respects track-mouse. It previously did not need to
since mouse movement was only reported if a mouse button was pressed.
* Hook up mouse_get_xy to mouse-position so it works with xterm mouse.
* tty-navigation-map handles all the different prefixes mouse events can
have, such as menu-bar or mode-line.
---
| 64 +++++++++++++++++++++++++-----------------------
lisp/xt-mouse.el | 20 +++++++++------
src/term.c | 18 ++++++--------
3 files changed, 54 insertions(+), 48 deletions(-)
--git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 4a0a27415b..df27b6d456 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -2753,6 +2753,16 @@ mouse-buffer-menu-keymap
(menu-bar-buffer-vector item)))))
km))
+(defun menu-bar-define-mouse-key (map key def)
+ "Like `define-key', but adds all possible prefixes for the mouse."
+ (define-key map (vector key) def)
+ (mapc (lambda (prefix) (define-key map (vector prefix key) def))
+ ;; This list only needs to contain special window areas that
+ ;; are rendered in TTYs. No need for *-scroll-bar, *-fringe, or
+ ;; *-divider.
+ '(tab-line header-line menu-bar tab-bar mode-line vertical-line
+ left-margin right-margin)))
+
(defvar tty-menu-navigation-map
(let ((map (make-sparse-keymap)))
;; The next line is disabled because it breaks interpretation of
@@ -2787,39 +2797,33 @@ tty-menu-navigation-map
(define-key map [?\C-j] 'tty-menu-select)
(define-key map [return] 'tty-menu-select)
(define-key map [linefeed] 'tty-menu-select)
- (define-key map [mouse-1] 'tty-menu-select)
- (define-key map [drag-mouse-1] 'tty-menu-select)
- (define-key map [mouse-2] 'tty-menu-select)
- (define-key map [drag-mouse-2] 'tty-menu-select)
- (define-key map [mouse-3] 'tty-menu-select)
- (define-key map [drag-mouse-3] 'tty-menu-select)
- (define-key map [wheel-down] 'tty-menu-next-item)
- (define-key map [wheel-up] 'tty-menu-prev-item)
- (define-key map [wheel-left] 'tty-menu-prev-menu)
- (define-key map [wheel-right] 'tty-menu-next-menu)
- ;; The following 4 bindings are for those whose text-mode mouse
+ (menu-bar-define-mouse-key map 'mouse-1 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'drag-mouse-1 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'mouse-2 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'drag-mouse-2 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'mouse-3 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'drag-mouse-3 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'wheel-down 'tty-menu-next-item)
+ (menu-bar-define-mouse-key map 'wheel-up 'tty-menu-prev-item)
+ (menu-bar-define-mouse-key map 'wheel-left 'tty-menu-prev-menu)
+ (menu-bar-define-mouse-key map 'wheel-right 'tty-menu-next-menu)
+ ;; The following 6 bindings are for those whose text-mode mouse
;; lack the wheel.
- (define-key map [S-mouse-1] 'tty-menu-next-item)
- (define-key map [S-drag-mouse-1] 'tty-menu-next-item)
- (define-key map [S-mouse-2] 'tty-menu-prev-item)
- (define-key map [S-drag-mouse-2] 'tty-menu-prev-item)
- (define-key map [S-mouse-3] 'tty-menu-prev-item)
- (define-key map [S-drag-mouse-3] 'tty-menu-prev-item)
- (define-key map [header-line mouse-1] 'tty-menu-select)
- (define-key map [header-line drag-mouse-1] 'tty-menu-select)
+ (menu-bar-define-mouse-key map 'S-mouse-1 'tty-menu-next-item)
+ (menu-bar-define-mouse-key map 'S-drag-mouse-1 'tty-menu-next-item)
+ (menu-bar-define-mouse-key map 'S-mouse-2 'tty-menu-prev-item)
+ (menu-bar-define-mouse-key map 'S-drag-mouse-2 'tty-menu-prev-item)
+ (menu-bar-define-mouse-key map 'S-mouse-3 'tty-menu-prev-item)
+ (menu-bar-define-mouse-key map 'S-drag-mouse-3 'tty-menu-prev-item)
;; The down-mouse events must be bound to tty-menu-ignore, so that
;; only releasing the mouse button pops up the menu.
- (define-key map [mode-line down-mouse-1] 'tty-menu-ignore)
- (define-key map [mode-line down-mouse-2] 'tty-menu-ignore)
- (define-key map [mode-line down-mouse-3] 'tty-menu-ignore)
- (define-key map [mode-line C-down-mouse-1] 'tty-menu-ignore)
- (define-key map [mode-line C-down-mouse-2] 'tty-menu-ignore)
- (define-key map [mode-line C-down-mouse-3] 'tty-menu-ignore)
- (define-key map [down-mouse-1] 'tty-menu-ignore)
- (define-key map [C-down-mouse-1] 'tty-menu-ignore)
- (define-key map [C-down-mouse-2] 'tty-menu-ignore)
- (define-key map [C-down-mouse-3] 'tty-menu-ignore)
- (define-key map [mouse-movement] 'tty-menu-mouse-movement)
+ (menu-bar-define-mouse-key map 'down-mouse-1 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'down-mouse-2 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'down-mouse-3 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'C-down-mouse-1 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'C-down-mouse-2 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'C-down-mouse-3 'tty-menu-ignore)
+ (menu-bar-define-mouse-key map 'mouse-movement 'tty-menu-mouse-movement)
map)
"Keymap used while processing TTY menus.")
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 362d29b943..5410aafb3b 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -76,7 +76,11 @@ xterm-mouse-translate-1
;; to guard against that.
(copy-sequence event))
vec)
- (is-move vec)
+ (is-move
+ (if track-mouse vec
+ ;; Mouse movement events are currently supposed to be
+ ;; suppressed. Return no event.
+ []))
(t
(let* ((down (terminal-parameter nil 'xterm-mouse-last-down))
(down-data (nth 1 down))
@@ -339,8 +343,8 @@ xterm-mouse-tracking-enable-sequence
position (<= 223), which can be reported in this
basic mode.
-\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
- motion events during dragging operations.
+\"\\e[?1003h\" \"Mouse motion mode\": Enables reports for mouse
+ motion events.
\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an
extension to the basic mouse mode, which uses UTF-8
@@ -360,7 +364,7 @@ xterm-mouse-tracking-enable-sequence
(apply #'concat (xterm-mouse--tracking-sequence ?h)))
(defconst xterm-mouse-tracking-enable-sequence
- "\e[?1000h\e[?1002h\e[?1005h\e[?1006h"
+ "\e[?1000h\e[?1003h\e[?1005h\e[?1006h"
"Control sequence to enable xterm mouse tracking.
Enables basic mouse tracking, mouse motion events and finally
extended tracking on terminals that support it. The following
@@ -371,8 +375,8 @@ xterm-mouse-tracking-enable-sequence
position (<= 223), which can be reported in this
basic mode.
-\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
- motion events during dragging operations.
+\"\\e[?1003h\" \"Mouse motion mode\": Enables reports for mouse
+ motion events.
\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an extension
to the basic mouse mode, which uses UTF-8
@@ -400,7 +404,7 @@ xterm-mouse-tracking-disable-sequence
(apply #'concat (nreverse (xterm-mouse--tracking-sequence ?l))))
(defconst xterm-mouse-tracking-disable-sequence
- "\e[?1006l\e[?1005l\e[?1002l\e[?1000l"
+ "\e[?1006l\e[?1005l\e[?1003l\e[?1000l"
"Reset the modes set by `xterm-mouse-tracking-enable-sequence'.")
(make-obsolete-variable
@@ -414,7 +418,7 @@ xterm-mouse--tracking-sequence
enable, ?l to disable)."
(mapcar
(lambda (code) (format "\e[?%d%c" code suffix))
- `(1000 1002 ,@(when xterm-mouse-utf-8 '(1005)) 1006)))
+ `(1000 1003 ,@(when xterm-mouse-utf-8 '(1005)) 1006)))
(defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal)
"Enable xterm mouse tracking on TERMINAL."
diff --git a/src/term.c b/src/term.c
index 3677644845..564d55be5b 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2804,16 +2804,14 @@ tty_menu_calc_size (tty_menu *menu, int *width, int *height)
static void
mouse_get_xy (int *x, int *y)
{
- struct frame *sf = SELECTED_FRAME ();
- Lisp_Object lmx = Qnil, lmy = Qnil, lisp_dummy;
- enum scroll_bar_part part_dummy;
- Time time_dummy;
-
- if (FRAME_TERMINAL (sf)->mouse_position_hook)
- (*FRAME_TERMINAL (sf)->mouse_position_hook) (&sf, -1,
- &lisp_dummy, &part_dummy,
- &lmx, &lmy,
- &time_dummy);
+ Lisp_Object lmx = Qnil, lmy = Qnil, mouse_position = Fmouse_position ();
+
+ if (EQ (selected_frame, XCAR(mouse_position)))
+ {
+ lmx = XCAR (XCDR (mouse_position));
+ lmy = XCDR (XCDR (mouse_position));
+ }
+
if (!NILP (lmx))
{
*x = XFIXNUM (lmx);
--
2.20.1
next prev parent reply other threads:[~2020-10-05 5:36 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-02 6:16 Making TTY menus more visual Jared Finder via Emacs development discussions.
2020-10-02 7:31 ` Eli Zaretskii
2020-10-03 0:16 ` Jared Finder via Emacs development discussions.
2020-10-03 8:50 ` Eli Zaretskii
2020-10-03 19:26 ` Jared Finder via Emacs development discussions.
2020-10-03 22:28 ` Jared Finder via Emacs development discussions.
2020-10-03 23:25 ` Jared Finder via Emacs development discussions.
2020-10-04 6:43 ` Eli Zaretskii
2020-10-04 9:04 ` Eli Zaretskii
2020-10-05 5:36 ` Jared Finder via Emacs development discussions. [this message]
2020-10-05 6:45 ` Eli Zaretskii
2020-10-08 6:39 ` Jared Finder via Emacs development discussions.
2020-10-08 8:15 ` Eli Zaretskii
2020-10-09 5:17 ` Jared Finder via Emacs development discussions.
2020-10-09 15:02 ` Eli Zaretskii
2020-10-10 5:20 ` Jared Finder via Emacs development discussions.
2020-10-10 7:28 ` Eli Zaretskii
2020-10-12 3:25 ` Jared Finder via Emacs development discussions.
2020-10-12 14:45 ` Eli Zaretskii
2020-10-12 21:30 ` Jared Finder via Emacs development discussions.
2020-10-13 14:33 ` Eli Zaretskii
2020-10-14 1:59 ` Jared Finder via Emacs development discussions.
2020-10-15 13:34 ` Eli Zaretskii
2020-10-16 6:51 ` Eli Zaretskii
2020-10-16 16:18 ` Jared Finder via Emacs development discussions.
2020-10-24 10:31 ` Eli Zaretskii
2020-10-25 0:27 ` Jared Finder via Emacs development discussions.
2020-10-31 8:05 ` Eli Zaretskii
2020-10-24 10:25 ` Eli Zaretskii
2020-10-04 6:22 ` Eli Zaretskii
2020-10-04 6:24 ` Eli Zaretskii
2020-10-04 22:15 ` Jared Finder via Emacs development discussions.
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=033517da1ce6762b3d3c656dad4d8f98@finder.org \
--to=emacs-devel@gnu.org \
--cc=eliz@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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).