emacs-diffs
[Top][All Lists]
Advanced

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

master 1198b03: Fix placement of Eldoc docs during eval-expression (bug#


From: João Távora
Subject: master 1198b03: Fix placement of Eldoc docs during eval-expression (bug#42309)
Date: Fri, 10 Jul 2020 16:27:01 -0400 (EDT)

branch: master
commit 1198b03e558fccff745861396f3a7c705b4bbb49
Author: João Távora <joaotavora@gmail.com>
Commit: João Távora <joaotavora@gmail.com>

    Fix placement of Eldoc docs during eval-expression (bug#42309)
    
    * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): Rework.
---
 lisp/emacs-lisp/eldoc.el | 76 +++++++++++++++++++++++++-----------------------
 1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 7964c4c..faf02aa 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -459,42 +459,46 @@ Honor most of `eldoc-echo-area-use-multiline-p'."
       ;; top-section of the `*eldoc' buffer.  I'm pretty sure nicer
       ;; strategies can be used here, probably by splitting this
       ;; function into some `eldoc-display-functions' special hook.
-      (if (and (eq 'truncate-sym-name-if-fit eldoc-echo-area-use-multiline-p)
-               (null (cdr docs))
-               (setq single-sym-name
-                     (format "%s" (plist-get (cdar docs) :thing)))
-               (> (+ (length (caar docs)) (length single-sym-name) 2) width))
-          (eldoc--message (caar docs))
-        (with-current-buffer (eldoc-doc-buffer)
-          (goto-char (point-min))
-          (cond
-           ;; Potentially truncate a long message into less lines,
-           ;; then display it in the echo area;
-           ((> available 1)
-            (cl-loop
-             initially (goto-char (line-end-position (1+ available)))
-             for truncated = nil then t
-             for needed
-             = (let ((truncate-lines message-truncate-lines))
-                 (count-screen-lines (point-min) (point) t 
(minibuffer-window)))
-             while (> needed (if truncated (1- available) available))
-             do (goto-char (line-end-position (if truncated 0 -1)))
-             (while (and (not (bobp)) (bolp)) (goto-char (line-end-position 
0)))
-             finally
-             (unless (and truncated
-                          eldoc-prefer-doc-buffer
-                          (get-buffer-window eldoc--doc-buffer))
-               (eldoc--message
-                (concat (buffer-substring (point-min) (point))
-                        (and truncated
-                             (format
-                              "\n(Documentation truncated. Use `%s' to see 
rest)"
-                              (substitute-command-keys 
"\\[eldoc-doc-buffer]"))))))))
-           ((= available 1)
-            ;; Truncate "brutally." ; FIXME: use `eldoc-prefer-doc-buffer' too?
-            (eldoc--message
-             (truncate-string-to-width
-              (buffer-substring (point-min) (line-end-position 1)) 
width)))))))))
+      (let ((echo-area-message
+             (cond
+              ((and
+                (eq 'truncate-sym-name-if-fit eldoc-echo-area-use-multiline-p)
+                (null (cdr docs))
+                (setq single-sym-name
+                      (format "%s" (plist-get (cdar docs) :thing)))
+                (> (+ (length (caar docs)) (length single-sym-name) 2) width))
+               (caar docs))
+              ((> available 1)
+               (with-current-buffer (eldoc-doc-buffer)
+                 (cl-loop
+                  initially
+                  (goto-char (point-min))
+                  (goto-char (line-end-position (1+ available)))
+                  for truncated = nil then t
+                  for needed
+                  = (let ((truncate-lines message-truncate-lines))
+                      (count-screen-lines (point-min) (point) t
+                                          (minibuffer-window)))
+                  while (> needed (if truncated (1- available) available))
+                  do (goto-char (line-end-position (if truncated 0 -1)))
+                  (while (and (not (bobp)) (bolp)) (goto-char 
(line-end-position 0)))
+                  finally
+                  (unless (and truncated
+                               eldoc-prefer-doc-buffer
+                               (get-buffer-window eldoc--doc-buffer))
+                    (cl-return
+                     (concat
+                      (buffer-substring (point-min) (point))
+                      (and truncated
+                           (format
+                            "\n(Documentation truncated. Use `%s' to see rest)"
+                            (substitute-command-keys 
"\\[eldoc-doc-buffer]")))))))))
+              ((= available 1)
+               ;; Truncate "brutally." ; FIXME: use `eldoc-prefer-doc-buffer' 
too?
+               (truncate-string-to-width
+                (buffer-substring (point-min) (line-end-position 1)) width)))))
+        (when echo-area-message
+          (eldoc--message echo-area-message))))))
 
 (defun eldoc-documentation-default ()
   "Show first doc string for item at point.



reply via email to

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