emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] master fb486d8 024/184: ivy.el (ivy-immediate-done): Add copy-seq


From: Oleh Krehel
Subject: [elpa] master fb486d8 024/184: ivy.el (ivy-immediate-done): Add copy-sequence to fix read-directory-name
Date: Wed, 16 Oct 2019 13:14:42 -0400 (EDT)

branch: master
commit fb486d87424d3161aa059eed957e2fefef356d4d
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    ivy.el (ivy-immediate-done): Add copy-sequence to fix read-directory-name
    
    `read-directory-name' returns "" when the completion function passes
    it back the DEF argument. This is a highly questionable behavior that
    some old functions depend on.
    
    Looks like it's better to break those old functions, rather than break
    the more important functions that have no idea why
    `read-directory-name' returns "".
    
    * ivy-test.el (ivy-read-file-name-in-buffer-visiting-file): Now fails.
    (ivy-read-directory-name): Add test.
    
    Fixes #2165
    Fixes #2149
    Re #1170
---
 ivy-test.el | 9 ++++++++-
 ivy.el      | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/ivy-test.el b/ivy-test.el
index 1d5d9d6..4dd854b 100644
--- a/ivy-test.el
+++ b/ivy-test.el
@@ -929,7 +929,13 @@ will bring the behavior in line with the newer Emacsen."
    (equal "/tmp/"
           (ivy-with
            '(read-directory-name "cd: " "/tmp")
-           "RET"))))
+           "RET")))
+  (should
+   (equal "/tmp/"
+          (ivy-with
+           '(read-directory-name "cd: ")
+           "C-M-j"
+           :dir "/tmp"))))
 
 (ert-deftest ivy-partial-files ()
   (when (file-exists-p "/tmp/ivy-partial-test")
@@ -975,6 +981,7 @@ will bring the behavior in line with the newer Emacsen."
 (ert-deftest ivy-read-file-name-in-buffer-visiting-file ()
   "Test `ivy-immediate-done' command in `read-file-name' without any editing in
 a buffer visiting a file."
+  :expected-result :failed
   (let ((ivy-mode-reset-arg (if ivy-mode 1 0)))
     (ivy-mode 1)
     ;; `ivy-read' returns "~/dummy-dir/dummy-file" (same object, not a copy).
diff --git a/ivy.el b/ivy.el
index b25c0b4..c24bcd7 100644
--- a/ivy.el
+++ b/ivy.el
@@ -1125,7 +1125,7 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
               ((and (string= ivy-text "")
                     (eq (ivy-state-collection ivy-last)
                         #'read-file-name-internal))
-               (or (ivy-state-def ivy-last)
+               (or (copy-sequence (ivy-state-def ivy-last))
                    ivy--directory))
               (t
                (expand-file-name ivy-text ivy--directory))))



reply via email to

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