From 013ab64627b29d52d94481e5efafd48d583d8624 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 12 Jan 2025 08:22:24 +0200 Subject: [PATCH] Fix mouse-2 clicks on mode line and header line * src/keymap.c (Fcurrent_active_maps): For clicks on mode-line and header-line, always override the keymaps at buffer position. (Bug#75219) (cherry picked from commit c41ea047a434710c4b7bc8280695c83fbe5fff35) --- src/keymap.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/keymap.c b/src/keymap.c index c0f49a7c106..733d8d16031 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -1740,17 +1740,27 @@ like in the respective argument of `key-binding'. */) if (CONSP (string) && STRINGP (XCAR (string))) { Lisp_Object pos = XCDR (string); + Lisp_Object pos_area = POSN_POSN (position); string = XCAR (string); if (FIXNUMP (pos) && XFIXNUM (pos) >= 0 && XFIXNUM (pos) < SCHARS (string)) { - Lisp_Object map = Fget_text_property (pos, Qlocal_map, string); - if (!NILP (map)) + Lisp_Object map = Fget_text_property (pos, Qlocal_map, + string); + /* For clicks on mode line or header line, override + the maps we found at POSITION unconditionally, even + if the corresponding properties of the mode- or + header-line string are nil, because propertries at + point are not relevant in that case. */ + if (!NILP (map) + || EQ (pos_area, Qmode_line) + || EQ (pos_area, Qheader_line)) local_map = map; - map = Fget_text_property (pos, Qkeymap, string); - if (!NILP (map)) + if (!NILP (map) + || EQ (pos_area, Qmode_line) + || EQ (pos_area, Qheader_line)) keymap = map; } } -- 2.39.5