branch: master
commit f9c51498d00cba54eca779b3caa2b8ff4a9f6f7d
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>

    ivy-overlay.el (ivy-display-function-overlay): Fall back when there's no 
space
    
    Fixes #1136
---
 ivy-overlay.el | 62 +++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/ivy-overlay.el b/ivy-overlay.el
index ad0535f..fff72e9 100644
--- a/ivy-overlay.el
+++ b/ivy-overlay.el
@@ -85,34 +85,42 @@ Then attach the overlay the character before point."
 (defun ivy-display-function-overlay (str)
   "Called from the minibuffer, display STR in an overlay in Ivy window.
 Hide the minibuffer contents and cursor."
-  (add-face-text-property (minibuffer-prompt-end) (point-max)
-                          '(:foreground "white"))
-  (let ((cursor-pos (1+ (- (point) (minibuffer-prompt-end))))
-        (ivy-window (ivy--get-window ivy-last)))
-    (setq cursor-type nil)
-    (with-selected-window ivy-window
-      (when cursor-type
-        (setq ivy--old-cursor-type cursor-type))
+  (if (save-selected-window
+        (select-window (ivy-state-window ivy-last))
+        (< (- (window-width) (current-column))
+           (length (ivy-state-current ivy-last))))
+      (let ((buffer-undo-list t))
+        (save-excursion
+          (forward-line 1)
+          (insert str)))
+    (add-face-text-property (minibuffer-prompt-end) (point-max)
+                            '(:foreground "white"))
+    (let ((cursor-pos (1+ (- (point) (minibuffer-prompt-end))))
+          (ivy-window (ivy--get-window ivy-last)))
       (setq cursor-type nil)
-      (let ((overlay-str
-             (concat
-              (buffer-substring (max 1 (1- (point))) (point))
-              ivy-text
-              (if (eolp)
-                  " "
-                "")
-              (buffer-substring (point) (line-end-position))
-              (ivy-left-pad
-               str
-               (+ (if (eq major-mode 'org-mode)
-                      (* org-indent-indentation-per-level (org-current-level))
-                    0)
-                  (save-excursion
-                    (goto-char ivy-completion-beg)
-                    (current-column)))))))
-        (add-face-text-property cursor-pos (1+ cursor-pos)
-                                'ivy-cursor t overlay-str)
-        (ivy-overlay-show-after overlay-str)))))
+      (with-selected-window ivy-window
+        (when cursor-type
+          (setq ivy--old-cursor-type cursor-type))
+        (setq cursor-type nil)
+        (let ((overlay-str
+               (concat
+                (buffer-substring (max 1 (1- (point))) (point))
+                ivy-text
+                (if (eolp)
+                    " "
+                  "")
+                (buffer-substring (point) (line-end-position))
+                (ivy-left-pad
+                 str
+                 (+ (if (eq major-mode 'org-mode)
+                        (* org-indent-indentation-per-level 
(org-current-level))
+                      0)
+                    (save-excursion
+                      (goto-char ivy-completion-beg)
+                      (current-column)))))))
+          (add-face-text-property cursor-pos (1+ cursor-pos)
+                                  'ivy-cursor t overlay-str)
+          (ivy-overlay-show-after overlay-str))))))
 
 (provide 'ivy-overlay)
 ;;; ivy-overlay.el ends here

Reply via email to