emacs-diffs
[Top][All Lists]
Advanced

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

master e0abd83: Merge from origin/emacs-28


From: Stefan Kangas
Subject: master e0abd83: Merge from origin/emacs-28
Date: Tue, 16 Nov 2021 01:18:23 -0500 (EST)

branch: master
commit e0abd83b4990bdfb8c8c4a518a5d0cc4f2d96bdf
Merge: d89d5e0 e852822
Author: Stefan Kangas <stefan@marxist.se>
Commit: Stefan Kangas <stefan@marxist.se>

    Merge from origin/emacs-28
    
    e852822f3d Fix removal of fringe marks of deleted bookmarks
    b418aad85a * lisp/repeat.el (repeat-echo-message): Bind message-log-m...
    fe2ac7cb7c * lisp/repeat.el (describe-repeat-maps): Use help-fns--ana...
    c840bfe7e1 * lisp/repeat.el: Detect changes in the minibuffer state (...
    5044151486 Avoid segfaults due to freed face cache
    199e2468d3 Doc fix; change recommended file name of custom-file
---
 lisp/bookmark.el |  5 ++++-
 lisp/cus-edit.el |  4 ++--
 lisp/repeat.el   | 58 +++++++++++++++++++++++++++++++++++++-------------------
 src/xfaces.c     |  5 ++++-
 4 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index a4c28e7..58fd002 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -479,7 +479,10 @@ See user option `bookmark-set-fringe'."
       (dolist (buf (buffer-list))
         (with-current-buffer buf
           (when (equal filename buffer-file-name)
-            (setq overlays (overlays-in pos (1+ pos)))
+            (setq overlays
+                  (save-excursion
+                    (goto-char pos)
+                    (overlays-in (point-at-bol) (1+ (point-at-bol)))))
             (while (and (not found) (setq temp (pop overlays)))
               (when (eq 'bookmark (overlay-get temp 'category))
                 (delete-overlay (setq found temp))))))))))
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 34a6db5..6c353b0 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -4646,8 +4646,8 @@ You can set this option through Custom, if you carefully 
read the
 last paragraph below.  However, usually it is simpler to write
 something like the following in your init file:
 
-\(setq custom-file \"~/.emacs-custom.el\")
-\(load custom-file)
+(setq custom-file \"~/.config/emacs-custom.el\")
+(load custom-file)
 
 Note that both lines are necessary: the first line tells Custom to
 save all customizations in this file, but does not load it.
diff --git a/lisp/repeat.el b/lisp/repeat.el
index ac08952..45201ad 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -402,12 +402,17 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                (length commands)
                (length (delete-dups keymaps))))))
 
+(defvar repeat--prev-mb '(0)
+  "Previous minibuffer state.")
+
 (defun repeat-post-hook ()
   "Function run after commands to set transient keymap for repeatable keys."
   (let ((was-in-progress repeat-in-progress))
     (setq repeat-in-progress nil)
     (when repeat-mode
       (let ((rep-map (or repeat-map
+                         (and (symbolp this-command)
+                              (get this-command 'repeat-map))
                          (and (symbolp real-this-command)
                               (get real-this-command 'repeat-map)))))
         (when rep-map
@@ -415,11 +420,16 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
             (setq rep-map (symbol-value rep-map)))
           (let ((map (copy-keymap rep-map)))
 
-            ;; Exit when the last char is not among repeatable keys,
-            ;; so e.g. `C-x u u' repeats undo, whereas `C-/ u' doesn't.
-            (when (and (zerop (minibuffer-depth)) ; avoid remapping in prompts
-                       (or (lookup-key map (this-command-keys-vector))
-                           prefix-arg))
+            (when (and
+                   ;; Detect changes in the minibuffer state to allow 
repetitions
+                   ;; in the same minibuffer, but not when the minibuffer is 
activated
+                   ;; in the middle of repeating sequence (bug#47566).
+                   (or (< (minibuffer-depth) (car repeat--prev-mb))
+                       (eq current-minibuffer-command (cdr repeat--prev-mb)))
+                   ;; Exit when the last char is not among repeatable keys,
+                   ;; so e.g. `C-x u u' repeats undo, whereas `C-/ u' doesn't.
+                   (or (lookup-key map (this-command-keys-vector))
+                       prefix-arg))
 
               ;; Messaging
               (unless prefix-arg
@@ -449,6 +459,7 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                            (funcall repeat-echo-function nil)))))))))))
 
     (setq repeat-map nil)
+    (setq repeat--prev-mb (cons (minibuffer-depth) current-minibuffer-command))
     (when (and was-in-progress (not repeat-in-progress))
       (when repeat-exit-timer
         (cancel-timer repeat-exit-timer)
@@ -470,19 +481,20 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
 
 (defun repeat-echo-message (keymap)
   "Display available repeating keys in the echo area."
-  (if keymap
-      (let ((message (repeat-echo-message-string keymap)))
-        (if (current-message)
-            (message "%s [%s]" (current-message) message)
-          (message "%s" message)))
-    (let ((message (current-message)))
-      (when message
-        (cond
-         ((string-prefix-p "Repeat with " message)
-          (message nil))
-         ((string-search " [Repeat with " message)
-          (message "%s" (replace-regexp-in-string
-                         " \\[Repeat with .*\\'" "" message))))))))
+  (let ((message-log-max nil))
+    (if keymap
+        (let ((message (repeat-echo-message-string keymap)))
+          (if (current-message)
+              (message "%s [%s]" (current-message) message)
+            (message "%s" message)))
+      (let ((message (current-message)))
+        (when message
+          (cond
+           ((string-prefix-p "Repeat with " message)
+            (message nil))
+           ((string-search " [Repeat with " message)
+            (message "%s" (replace-regexp-in-string
+                           " \\[Repeat with .*\\'" "" message)))))))))
 
 (defvar repeat-echo-mode-line-string
   (propertize "[Repeating...] " 'face 'mode-line-emphasis)
@@ -496,10 +508,13 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                                             repeat-echo-mode-line-string)))
     (force-mode-line-update t)))
 
+(declare-function help-fns--analyze-function "help-fns" (function))
+
 (defun describe-repeat-maps ()
   "Describe mappings of commands repeatable by symbol property `repeat-map'.
 Used in `repeat-mode'."
   (interactive)
+  (require 'help-fns)
   (help-setup-xref (list #'describe-repeat-maps)
                    (called-interactively-p 'interactive))
   (let ((keymaps nil))
@@ -516,7 +531,12 @@ Used in `repeat-mode'."
           (princ (format-message "`%s' keymap is repeatable by these 
commands:\n"
                                  (car keymap)))
           (dolist (command (sort (cdr keymap) 'string-lessp))
-            (princ (format-message " `%s'\n" command)))
+            (let* ((info (help-fns--analyze-function command))
+                   (map (list (symbol-value (car keymap))))
+                   (desc (key-description
+                          (or (where-is-internal command map t)
+                              (where-is-internal (nth 3 info) map t)))))
+              (princ (format-message " `%s' (bound to '%s')\n" command desc))))
           (princ "\n"))))))
 
 (provide 'repeat)
diff --git a/src/xfaces.c b/src/xfaces.c
index 442fcf4..d0d73eb 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -6381,7 +6381,10 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
     else
       face_id = lookup_basic_face (w, f, DEFAULT_FACE_ID);
 
-    default_face = FACE_FROM_ID (f, face_id);
+    default_face = FACE_FROM_ID_OR_NULL (f, face_id);
+    if (!default_face)
+      default_face = FACE_FROM_ID (f,
+                                  lookup_basic_face (w, f, DEFAULT_FACE_ID));
   }
 
   /* Optimize common cases where we can use the default face.  */



reply via email to

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