emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 5715eb9 3/3: Merge from origin/emacs-27


From: Glenn Morris
Subject: master 5715eb9 3/3: Merge from origin/emacs-27
Date: Wed, 22 Jan 2020 10:55:24 -0500 (EST)

branch: master
commit 5715eb94e90b33ace59dd4c4ccb6e2122bc6db72
Merge: a1bfb92 3b0938c
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>

    Merge from origin/emacs-27
    
    3b0938c042 (origin/emacs-27) Render Ido suggestions using an overlay
    d5d90dc412 * doc/misc/tramp.texi (Bug Reports): Encourage use of "ema...
    ac09e8e121 * lisp/vc/smerge-mode.el (smerge-match-conflict): Fix bug#...
    7e37e61f4b Correct statement about ftcr and recommend HarfBuzz
    4aec94da37 Avoid leaving artifacts when the system caret is used on w32
    5abd8d73b0 Improve display of temporary echo messages
---
 doc/lispref/frames.texi | 22 +++++++++++-----------
 doc/misc/tramp.texi     |  6 +++++-
 lisp/ido.el             | 10 +++++++++-
 lisp/minibuffer.el      | 10 ++++++++--
 lisp/vc/smerge-mode.el  |  5 ++++-
 src/dispnew.c           | 13 ++++++++++---
 src/w32term.c           |  6 ++++--
 src/xdisp.c             | 17 +++++++++++++++++
 8 files changed, 68 insertions(+), 21 deletions(-)

diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index a8d95a2..2bb505c 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -2301,17 +2301,17 @@ available font backends: @code{x} (the X core font 
driver), @code{xft}
 HarfBuzz text shaping).  If built with Cairo drawing, there are also
 three potentially available font backends on X: @code{x}, @code{ftcr}
 (the FreeType font driver on Cairo), and @code{ftcrhb} (the FreeType
-font driver on Cairo with HarfBuzz text shaping).  Note that the
-@code{ftcr} and @code{ftcrhb} drivers are mutually exclusive (and
-similarly for @code{xft} and @code{xfthb}), with the choice being made
-at build time.  On MS-Windows, there are currently three available
-font backends: @code{gdi} (the core MS-Windows font driver),
-@code{uniscribe} (font driver for OTF and TTF fonts with text shaping
-by the Uniscribe engine), and @code{harfbuzz} (font driver for OTF and
-TTF fonts with HarfBuzz text shaping) (@pxref{Windows Fonts,,, emacs,
-The GNU Emacs Manual}).  On other systems, there is only one available
-font backend, so it does not make sense to modify this frame
-parameter.
+font driver on Cairo with HarfBuzz text shaping).  When Emacs is built
+with HarfBuzz, the default font driver is @code{ftcrhb}, although use
+of the @code{ftcr} driver is still possible, but not recommended.  On
+MS-Windows, there are currently three available font backends:
+@code{gdi} (the core MS-Windows font driver), @code{uniscribe} (font
+driver for OTF and TTF fonts with text shaping by the Uniscribe
+engine), and @code{harfbuzz} (font driver for OTF and TTF fonts with
+HarfBuzz text shaping) (@pxref{Windows Fonts,,, emacs, The GNU Emacs
+Manual}).  The @code{harfbuzz} driver is similarly recommended.  On
+other systems, there is only one available font backend, so it does
+not make sense to modify this frame parameter.
 
 @vindex background-mode@r{, a frame parameter}
 @item background-mode
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index f568c19..75b14d8 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -3823,7 +3823,11 @@ help the development team find the best solution and 
avoid unrelated
 detours.
 
 To exclude cache-related problems, flush all caches before running the
-test, @ref{Cleanup remote connections}.
+test, @ref{Cleanup remote connections}.  Alternatively, and often
+better for analysis, reproduce the problem in a clean Emacs session
+started with @command{emacs -Q}.  Then, @value{tramp} does not load
+the persistency file (@pxref{Connection caching}), and it does not use
+passwords from @file{auth-source.el} (@pxref{Password handling}).
 
 When including @value{tramp}'s messages in the bug report, increase
 the verbosity level to 6 (@pxref{Traces and Profiles, Traces}) in the
diff --git a/lisp/ido.el b/lisp/ido.el
index 83b88e4..355be5e 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -4492,6 +4492,8 @@ For details of keybindings, see `ido-find-file'."
        (ido-tidy))
       (throw 'ido contents))))
 
+(defvar ido--overlay nil)
+
 (defun ido-exhibit ()
   "Post command hook for Ido."
   ;; Find matching files and display a list in the minibuffer.
@@ -4726,7 +4728,13 @@ For details of keybindings, see `ido-find-file'."
        (let ((inf (ido-completions contents)))
          (setq ido-show-confirm-message nil)
          (ido-trace "inf" inf)
-         (insert inf))
+          (when ido--overlay
+            (delete-overlay ido--overlay))
+          (let ((o (make-overlay (point-max) (point-max) nil t t)))
+            (when (> (length inf) 0)
+              (put-text-property 0 1 'cursor t inf))
+            (overlay-put o 'after-string inf)
+            (setq ido--overlay o)))
        ))))
 
 (defun ido-completions (name)
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 4831bf7..0589211 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -766,7 +766,7 @@ and `clear-minibuffer-message' called automatically via
 (defun set-minibuffer-message (message)
   "Temporarily display MESSAGE at the end of the minibuffer.
 The text is displayed for `minibuffer-message-clear-timeout' seconds
-(if the value is a number), or until the next input event arrives,
+\(if the value is a number), or until the next input event arrives,
 whichever comes first.
 Unlike `minibuffer-message', this function is called automatically
 via `set-message-function'."
@@ -790,8 +790,14 @@ via `set-message-function'."
         ;; The current C cursor code doesn't know to use the overlay's
         ;; marker's stickiness to figure out whether to place the cursor
         ;; before or after the string, so let's spoon-feed it the pos.
-        (put-text-property 0 1 'cursor t message))
+        (put-text-property 0 1 'cursor 1 message))
       (overlay-put minibuffer-message-overlay 'after-string message)
+      ;; Make sure the overlay with the message is displayed before
+      ;; any other overlays in that position, in case they have
+      ;; resize-mini-windows set to nil and the other overlay strings
+      ;; are too long for the mini-window width.  This makes sure the
+      ;; temporary message will always be visible.
+      (overlay-put minibuffer-message-overlay 'priority 1100)
 
       (when (numberp minibuffer-message-clear-timeout)
         (setq minibuffer-message-timer
diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index d4984bb..85868b9 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -797,7 +797,10 @@ An error is raised if not inside a conflict."
               (filename (or (match-string 1) ""))
 
               (_ (re-search-forward smerge-end-re))
-              (_ (cl-assert (< orig-point (match-end 0))))
+              (_ (when (< (match-end 0) orig-point)
+                   ;; Point is not within the conflict we found,
+                    ;; so this conflict is not ours.
+                   (signal 'search-failed (list smerge-begin-re))))
 
               (lower-end (match-beginning 0))
               (end (match-end 0))
diff --git a/src/dispnew.c b/src/dispnew.c
index 9af1ce2..d094ca6 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -3743,11 +3743,10 @@ gui_update_window_end (struct window *w, bool 
cursor_on_p,
 {
   struct frame *f = XFRAME (WINDOW_FRAME (w));
 
-  block_input ();
-
   /* Pseudo windows don't have cursors, so don't display them here.  */
   if (!w->pseudo_window_p)
     {
+      block_input ();
 
       if (cursor_on_p)
        display_and_set_cursor (w, true,
@@ -3761,6 +3760,7 @@ gui_update_window_end (struct window *w, bool cursor_on_p,
          else
            gui_draw_vertical_border (w);
        }
+      unblock_input ();
     }
 
   /* 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,
     FRAME_RIF (f)->update_window_end_hook (w,
                                            cursor_on_p,
                                            mouse_face_overwritten_p);
-  unblock_input ();
 }
 
 #endif /* HAVE_WINDOW_SYSTEM  */
@@ -4360,6 +4359,14 @@ scrolling_window (struct window *w, int tab_line_p)
     return 0;
 #endif
 
+  /* Can't scroll the display of w32 GUI frames when position of point
+     is indicated by the system caret, because scrolling the display
+     will then "copy" the pixles used by the caret.  */
+#ifdef HAVE_NTGUI
+  if (w32_use_visible_system_caret)
+    return 0;
+#endif
+
   /* Give up if some rows in the desired matrix are not enabled.  */
   if (! MATRIX_ROW_ENABLED_P (desired_matrix, i))
     return -1;
diff --git a/src/w32term.c b/src/w32term.c
index c38e740..4eb5045 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -560,7 +560,8 @@ static void
 w32_update_window_begin (struct window *w)
 {
   /* Hide the system caret during an update.  */
-  if (w32_use_visible_system_caret && w32_system_caret_hwnd)
+  if (w32_use_visible_system_caret && w32_system_caret_hwnd
+      && w == w32_system_caret_window)
     {
       SendMessageTimeout (w32_system_caret_hwnd, WM_EMACS_HIDE_CARET, 0, 0,
                          0, 6000, NULL);
@@ -657,7 +658,8 @@ w32_update_window_end (struct window *w, bool cursor_on_p,
   /* Unhide the caret.  This won't actually show the cursor, unless it
      was visible before the corresponding call to HideCaret in
      w32_update_window_begin.  */
-  if (w32_use_visible_system_caret && w32_system_caret_hwnd)
+  if (w32_use_visible_system_caret && w32_system_caret_hwnd
+      && w == w32_system_caret_window)
     {
       SendMessageTimeout (w32_system_caret_hwnd, WM_EMACS_SHOW_CARET, 0, 0,
                          0, 6000, NULL);
diff --git a/src/xdisp.c b/src/xdisp.c
index 516013c..a5efbb3 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -19191,6 +19191,14 @@ try_window_reusing_current_matrix (struct window *w)
   if (!NILP (Vdisplay_line_numbers))
     return false;
 
+  /* Can't scroll the display of w32 GUI frames when position of point
+     is indicated by the system caret, because scrolling the display
+     will then "copy" the pixles used by the caret.  */
+#ifdef HAVE_NTGUI
+  if (w32_use_visible_system_caret)
+    return false;
+#endif
+
   /* The variable new_start now holds the new window start.  The old
      start `start' can be determined from the current matrix.  */
   SET_TEXT_POS_FROM_MARKER (new_start, w->start);
@@ -20175,6 +20183,15 @@ try_window_id (struct window *w)
   if (MATRIX_ROW_START_CHARPOS (row) == MATRIX_ROW_END_CHARPOS (row))
     GIVE_UP (20);
 
+  /* Can't let scroll_run_hook below run on w32 GUI frames when
+     position of point is indicated by the system caret, because
+     scrolling the display will then "copy" the pixles used by the
+     caret.  */
+#ifdef HAVE_NTGUI
+  if (FRAME_W32_P (f) && w32_use_visible_system_caret)
+    GIVE_UP (25);
+#endif
+
   /* Compute the position at which we have to start displaying new
      lines.  Some of the lines at the top of the window might be
      reusable because they are not displaying changed text.  Find the



reply via email to

[Prev in Thread] Current Thread [Next in Thread]