diff options
author | Po Lu <luangruo@yahoo.com> | 2022-01-21 15:27:35 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-01-21 15:27:35 +0800 |
commit | 03f4a2ff640d50af11a0131498f15ebf6ed16d30 (patch) | |
tree | c529aff0851a951019a946cd67f2b265814f9e00 | |
parent | 2b4f0b5f3b2e9b231b391207656df1328b13652a (diff) | |
parent | 11ea45c9e47d13e13e3e539551e2df300f995c11 (diff) | |
download | emacs-03f4a2ff640d50af11a0131498f15ebf6ed16d30.tar.gz |
Merge from origin/emacs-28
11ea45c9e4 Fix UB in ebrowse
ba57b78064 Fix execute-extended-command-for-buffer in fundamental-mode
ef0c1d4c2c Add workaround to handle a problem with Enlightenment WM (...
-rw-r--r-- | etc/PROBLEMS | 7 | ||||
-rw-r--r-- | lib-src/ebrowse.c | 10 | ||||
-rw-r--r-- | lisp/simple.el | 4 | ||||
-rw-r--r-- | src/xterm.c | 68 |
4 files changed, 66 insertions, 23 deletions
diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 9040c492563..2358203c3d3 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1304,6 +1304,13 @@ and then Alt-F7). A bug for it is here: https://bugs.launchpad.net/ubuntu/+source/metacity/+bug/231034. Note that a permanent fix seems to be to disable "assistive technologies". +*** Enlightenment: Frames not redrawn after switching virtual desktops + +With Enlightenment version 0.25, Emacs frames may no be redrawn orderly +after switching back from another virtual desktop. Setting the variable +'x-set-frame-visibility-more-laxly' to one of 'focus-in', 'expose' or +'t' should fix this. + *** Gnome: Emacs receives input directly from the keyboard, bypassing XIM. This seems to happen when gnome-settings-daemon version 2.12 or later diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c index 04ae018464e..ac7e7901878 100644 --- a/lib-src/ebrowse.c +++ b/lib-src/ebrowse.c @@ -1925,7 +1925,15 @@ matching_regexp (void) *--s = *--t; if (*s == '"' || *s == '\\') - *--s = '\\'; + { + if (s > matching_regexp_buffer) + *--s = '\\'; + else + { + s++; + break; + } + } } *(matching_regexp_end_buf - 1) = '\0'; diff --git a/lisp/simple.el b/lisp/simple.el index dcc385c7ec6..801a3c992c8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2306,8 +2306,8 @@ maps." (let* ((execute-extended-command--last-typed nil) (keymaps ;; The major mode's keymap and any active minor modes. - (cons - (current-local-map) + (nconc + (and (current-local-map) (list (current-local-map))) (mapcar #'cdr (seq-filter diff --git a/src/xterm.c b/src/xterm.c index 1cbea12b3db..244b11e0f75 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -9026,12 +9026,17 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (!FRAME_VISIBLE_P (f)) { block_input (); - /* The following two are commented out to avoid that a - plain invisible frame gets reported as iconified. That - problem occurred first for Emacs 26 and is described in - https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html. */ -/** SET_FRAME_VISIBLE (f, 1); **/ -/** SET_FRAME_ICONIFIED (f, false); **/ + /* By default, do not set the frame's visibility here, see + https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html. + The default behavior can be overridden by setting + 'x-set-frame-visibility-more-laxly' (Bug#49955, + Bug#53298). */ + if (EQ (x_set_frame_visibility_more_laxly, Qexpose) + || EQ (x_set_frame_visibility_more_laxly, Qt)) + { + SET_FRAME_VISIBLE (f, 1); + SET_FRAME_ICONIFIED (f, false); + } if (FRAME_X_DOUBLE_BUFFERED_P (f)) font_drop_xrender_surfaces (f); @@ -9650,26 +9655,33 @@ handle_one_xevent (struct x_display_info *dpyinfo, goto OTHER; case FocusIn: -#ifndef USE_GTK +#ifdef USE_GTK /* Some WMs (e.g. Mutter in Gnome Shell), don't unmap minimized/iconified windows; thus, for those WMs we won't get - a MapNotify when unminimizing/deconifying. Check here if we + a MapNotify when unminimizing/deiconifying. Check here if we are deiconizing a window (Bug42655). - But don't do that on GTK since it may cause a plain invisible - frame get reported as iconified, compare + But don't do that by default on GTK since it may cause a plain + invisible frame get reported as iconified, compare https://lists.gnu.org/archive/html/emacs-devel/2017-02/msg00133.html. - That is fixed above but bites us here again. */ - f = any; - if (f && FRAME_ICONIFIED_P (f)) - { - SET_FRAME_VISIBLE (f, 1); - SET_FRAME_ICONIFIED (f, false); - f->output_data.x->has_been_visible = true; - inev.ie.kind = DEICONIFY_EVENT; - XSETFRAME (inev.ie.frame_or_window, f); - } + That is fixed above but bites us here again. + + The option x_set_frame_visibility_more_laxly allows to override + the default behavior (Bug#49955, Bug#53298). */ + if (EQ (x_set_frame_visibility_more_laxly, Qfocus_in) + || EQ (x_set_frame_visibility_more_laxly, Qt)) #endif /* USE_GTK */ + { + f = any; + if (f && FRAME_ICONIFIED_P (f)) + { + SET_FRAME_VISIBLE (f, 1); + SET_FRAME_ICONIFIED (f, false); + f->output_data.x->has_been_visible = true; + inev.ie.kind = DEICONIFY_EVENT; + XSETFRAME (inev.ie.frame_or_window, f); + } + } x_detect_focus_change (dpyinfo, any, event, &inev.ie); goto OTHER; @@ -16258,6 +16270,7 @@ always uses gtk_window_move and ignores the value of this variable. */); This option is only effective when Emacs is built with XInput 2 support. */); Vx_scroll_event_delta_factor = make_float (1.0); + DEFSYM (Qexpose, "expose"); DEFVAR_BOOL ("x-gtk-use-native-input", x_gtk_use_native_input, doc: /* Non-nil means to use GTK for input method support. @@ -16265,6 +16278,21 @@ This provides better support for some modern input methods, and is only effective when Emacs is built with GTK. */); x_gtk_use_native_input = false; + DEFVAR_LISP ("x-set-frame-visibility-more-laxly", + x_set_frame_visibility_more_laxly, + doc: /* Non-nil means set frame visibility more laxly. +If this is nil, Emacs is more strict when marking a frame as visible. +Since this may cause problems on some window managers, this variable can +be also set as follows: The value `focus-in' means to mark a frame as +visible also when a FocusIn event is received for it on GTK builds. The +value `expose' means to mark a frame as visible also when an Expose +event is received for it on any X build. The value `t' means to mark a +frame as visible in either of these two cases. + +Note that any non-nil setting may cause invisible frames get erroneously +reported as iconified. */); + x_set_frame_visibility_more_laxly = Qnil; + DEFVAR_BOOL ("x-input-grab-touch-events", x_input_grab_touch_events, doc: /* Non-nil means to actively grab touch events. This means touch sequences that started on an Emacs frame will |