Skip to content

Commit 5715eb9

Browse files
committed
Merge from origin/emacs-27
3b0938c (origin/emacs-27) Render Ido suggestions using an overlay d5d90dc * doc/misc/tramp.texi (Bug Reports): Encourage use of "ema... ac09e8e * lisp/vc/smerge-mode.el (smerge-match-conflict): Fix bug#... 7e37e61 Correct statement about ftcr and recommend HarfBuzz 4aec94d Avoid leaving artifacts when the system caret is used on w32 5abd8d7 Improve display of temporary echo messages
2 parents a1bfb92 + 3b0938c commit 5715eb9

File tree

8 files changed

+68
-21
lines changed

8 files changed

+68
-21
lines changed

doc/lispref/frames.texi

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,17 +2301,17 @@ available font backends: @code{x} (the X core font driver), @code{xft}
23012301
HarfBuzz text shaping). If built with Cairo drawing, there are also
23022302
three potentially available font backends on X: @code{x}, @code{ftcr}
23032303
(the FreeType font driver on Cairo), and @code{ftcrhb} (the FreeType
2304-
font driver on Cairo with HarfBuzz text shaping). Note that the
2305-
@code{ftcr} and @code{ftcrhb} drivers are mutually exclusive (and
2306-
similarly for @code{xft} and @code{xfthb}), with the choice being made
2307-
at build time. On MS-Windows, there are currently three available
2308-
font backends: @code{gdi} (the core MS-Windows font driver),
2309-
@code{uniscribe} (font driver for OTF and TTF fonts with text shaping
2310-
by the Uniscribe engine), and @code{harfbuzz} (font driver for OTF and
2311-
TTF fonts with HarfBuzz text shaping) (@pxref{Windows Fonts,,, emacs,
2312-
The GNU Emacs Manual}). On other systems, there is only one available
2313-
font backend, so it does not make sense to modify this frame
2314-
parameter.
2304+
font driver on Cairo with HarfBuzz text shaping). When Emacs is built
2305+
with HarfBuzz, the default font driver is @code{ftcrhb}, although use
2306+
of the @code{ftcr} driver is still possible, but not recommended. On
2307+
MS-Windows, there are currently three available font backends:
2308+
@code{gdi} (the core MS-Windows font driver), @code{uniscribe} (font
2309+
driver for OTF and TTF fonts with text shaping by the Uniscribe
2310+
engine), and @code{harfbuzz} (font driver for OTF and TTF fonts with
2311+
HarfBuzz text shaping) (@pxref{Windows Fonts,,, emacs, The GNU Emacs
2312+
Manual}). The @code{harfbuzz} driver is similarly recommended. On
2313+
other systems, there is only one available font backend, so it does
2314+
not make sense to modify this frame parameter.
23152315

23162316
@vindex background-mode@r{, a frame parameter}
23172317
@item background-mode

doc/misc/tramp.texi

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3823,7 +3823,11 @@ help the development team find the best solution and avoid unrelated
38233823
detours.
38243824

38253825
To exclude cache-related problems, flush all caches before running the
3826-
test, @ref{Cleanup remote connections}.
3826+
test, @ref{Cleanup remote connections}. Alternatively, and often
3827+
better for analysis, reproduce the problem in a clean Emacs session
3828+
started with @command{emacs -Q}. Then, @value{tramp} does not load
3829+
the persistency file (@pxref{Connection caching}), and it does not use
3830+
passwords from @file{auth-source.el} (@pxref{Password handling}).
38273831

38283832
When including @value{tramp}'s messages in the bug report, increase
38293833
the verbosity level to 6 (@pxref{Traces and Profiles, Traces}) in the

lisp/ido.el

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4492,6 +4492,8 @@ For details of keybindings, see `ido-find-file'."
44924492
(ido-tidy))
44934493
(throw 'ido contents))))
44944494

4495+
(defvar ido--overlay nil)
4496+
44954497
(defun ido-exhibit ()
44964498
"Post command hook for Ido."
44974499
;; Find matching files and display a list in the minibuffer.
@@ -4726,7 +4728,13 @@ For details of keybindings, see `ido-find-file'."
47264728
(let ((inf (ido-completions contents)))
47274729
(setq ido-show-confirm-message nil)
47284730
(ido-trace "inf" inf)
4729-
(insert inf))
4731+
(when ido--overlay
4732+
(delete-overlay ido--overlay))
4733+
(let ((o (make-overlay (point-max) (point-max) nil t t)))
4734+
(when (> (length inf) 0)
4735+
(put-text-property 0 1 'cursor t inf))
4736+
(overlay-put o 'after-string inf)
4737+
(setq ido--overlay o)))
47304738
))))
47314739

47324740
(defun ido-completions (name)

lisp/minibuffer.el

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ and `clear-minibuffer-message' called automatically via
766766
(defun set-minibuffer-message (message)
767767
"Temporarily display MESSAGE at the end of the minibuffer.
768768
The text is displayed for `minibuffer-message-clear-timeout' seconds
769-
(if the value is a number), or until the next input event arrives,
769+
\(if the value is a number), or until the next input event arrives,
770770
whichever comes first.
771771
Unlike `minibuffer-message', this function is called automatically
772772
via `set-message-function'."
@@ -790,8 +790,14 @@ via `set-message-function'."
790790
;; The current C cursor code doesn't know to use the overlay's
791791
;; marker's stickiness to figure out whether to place the cursor
792792
;; before or after the string, so let's spoon-feed it the pos.
793-
(put-text-property 0 1 'cursor t message))
793+
(put-text-property 0 1 'cursor 1 message))
794794
(overlay-put minibuffer-message-overlay 'after-string message)
795+
;; Make sure the overlay with the message is displayed before
796+
;; any other overlays in that position, in case they have
797+
;; resize-mini-windows set to nil and the other overlay strings
798+
;; are too long for the mini-window width. This makes sure the
799+
;; temporary message will always be visible.
800+
(overlay-put minibuffer-message-overlay 'priority 1100)
795801

796802
(when (numberp minibuffer-message-clear-timeout)
797803
(setq minibuffer-message-timer

lisp/vc/smerge-mode.el

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,10 @@ An error is raised if not inside a conflict."
797797
(filename (or (match-string 1) ""))
798798

799799
(_ (re-search-forward smerge-end-re))
800-
(_ (cl-assert (< orig-point (match-end 0))))
800+
(_ (when (< (match-end 0) orig-point)
801+
;; Point is not within the conflict we found,
802+
;; so this conflict is not ours.
803+
(signal 'search-failed (list smerge-begin-re))))
801804

802805
(lower-end (match-beginning 0))
803806
(end (match-end 0))

src/dispnew.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3743,11 +3743,10 @@ gui_update_window_end (struct window *w, bool cursor_on_p,
37433743
{
37443744
struct frame *f = XFRAME (WINDOW_FRAME (w));
37453745

3746-
block_input ();
3747-
37483746
/* Pseudo windows don't have cursors, so don't display them here. */
37493747
if (!w->pseudo_window_p)
37503748
{
3749+
block_input ();
37513750

37523751
if (cursor_on_p)
37533752
display_and_set_cursor (w, true,
@@ -3761,6 +3760,7 @@ gui_update_window_end (struct window *w, bool cursor_on_p,
37613760
else
37623761
gui_draw_vertical_border (w);
37633762
}
3763+
unblock_input ();
37643764
}
37653765

37663766
/* If a row with mouse-face was overwritten, arrange for
@@ -3778,7 +3778,6 @@ gui_update_window_end (struct window *w, bool cursor_on_p,
37783778
FRAME_RIF (f)->update_window_end_hook (w,
37793779
cursor_on_p,
37803780
mouse_face_overwritten_p);
3781-
unblock_input ();
37823781
}
37833782

37843783
#endif /* HAVE_WINDOW_SYSTEM */
@@ -4360,6 +4359,14 @@ scrolling_window (struct window *w, int tab_line_p)
43604359
return 0;
43614360
#endif
43624361

4362+
/* Can't scroll the display of w32 GUI frames when position of point
4363+
is indicated by the system caret, because scrolling the display
4364+
will then "copy" the pixles used by the caret. */
4365+
#ifdef HAVE_NTGUI
4366+
if (w32_use_visible_system_caret)
4367+
return 0;
4368+
#endif
4369+
43634370
/* Give up if some rows in the desired matrix are not enabled. */
43644371
if (! MATRIX_ROW_ENABLED_P (desired_matrix, i))
43654372
return -1;

src/w32term.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,8 @@ static void
560560
w32_update_window_begin (struct window *w)
561561
{
562562
/* Hide the system caret during an update. */
563-
if (w32_use_visible_system_caret && w32_system_caret_hwnd)
563+
if (w32_use_visible_system_caret && w32_system_caret_hwnd
564+
&& w == w32_system_caret_window)
564565
{
565566
SendMessageTimeout (w32_system_caret_hwnd, WM_EMACS_HIDE_CARET, 0, 0,
566567
0, 6000, NULL);
@@ -657,7 +658,8 @@ w32_update_window_end (struct window *w, bool cursor_on_p,
657658
/* Unhide the caret. This won't actually show the cursor, unless it
658659
was visible before the corresponding call to HideCaret in
659660
w32_update_window_begin. */
660-
if (w32_use_visible_system_caret && w32_system_caret_hwnd)
661+
if (w32_use_visible_system_caret && w32_system_caret_hwnd
662+
&& w == w32_system_caret_window)
661663
{
662664
SendMessageTimeout (w32_system_caret_hwnd, WM_EMACS_SHOW_CARET, 0, 0,
663665
0, 6000, NULL);

src/xdisp.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19191,6 +19191,14 @@ try_window_reusing_current_matrix (struct window *w)
1919119191
if (!NILP (Vdisplay_line_numbers))
1919219192
return false;
1919319193

19194+
/* Can't scroll the display of w32 GUI frames when position of point
19195+
is indicated by the system caret, because scrolling the display
19196+
will then "copy" the pixles used by the caret. */
19197+
#ifdef HAVE_NTGUI
19198+
if (w32_use_visible_system_caret)
19199+
return false;
19200+
#endif
19201+
1919419202
/* The variable new_start now holds the new window start. The old
1919519203
start `start' can be determined from the current matrix. */
1919619204
SET_TEXT_POS_FROM_MARKER (new_start, w->start);
@@ -20175,6 +20183,15 @@ try_window_id (struct window *w)
2017520183
if (MATRIX_ROW_START_CHARPOS (row) == MATRIX_ROW_END_CHARPOS (row))
2017620184
GIVE_UP (20);
2017720185

20186+
/* Can't let scroll_run_hook below run on w32 GUI frames when
20187+
position of point is indicated by the system caret, because
20188+
scrolling the display will then "copy" the pixles used by the
20189+
caret. */
20190+
#ifdef HAVE_NTGUI
20191+
if (FRAME_W32_P (f) && w32_use_visible_system_caret)
20192+
GIVE_UP (25);
20193+
#endif
20194+
2017820195
/* Compute the position at which we have to start displaying new
2017920196
lines. Some of the lines at the top of the window might be
2018020197
reusable because they are not displaying changed text. Find the

0 commit comments

Comments
 (0)