branch: master
commit 085b0f2d3b0c79c4217a5f680263205e52e252c4
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>
Fix file name completion for when initial-input is a file name
* ivy.el (ivy--reset-state): cd to filename's directory, set the
remaining chars as :preselect.
Fixes #744
---
ivy.el | 34 ++++++++++++++++++----------------
1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/ivy.el b/ivy.el
index 96b79aa..084d1ca 100644
--- a/ivy.el
+++ b/ivy.el
@@ -1524,22 +1524,24 @@ This is useful for recursive `ivy-read'."
:test #'equal)))
(setq coll (all-completions "" collection predicate))))
((eq collection 'read-file-name-internal)
- (if (and initial-input
- (not (equal initial-input ""))
- (file-directory-p initial-input))
- (progn
- (when (and (eq this-command 'dired-do-copy)
- (equal (file-name-nondirectory initial-input)
""))
- (setf (ivy-state-preselect state) (setq preselect nil)))
- (setq ivy--directory initial-input)
- (setq initial-input nil)
- (when preselect
- (let ((preselect-directory (file-name-directory
preselect)))
- (when (and preselect-directory
- (not (equal (expand-file-name
preselect-directory)
- (expand-file-name
ivy--directory))))
- (setf (ivy-state-preselect state) (setq preselect
nil))))))
- (setq ivy--directory default-directory))
+ (setq ivy--directory default-directory)
+ (when (and initial-input
+ (not (equal initial-input "")))
+ (cond ((file-directory-p initial-input)
+ (when (and (eq this-command 'dired-do-copy)
+ (equal (file-name-nondirectory initial-input)
""))
+ (setf (ivy-state-preselect state) (setq preselect
nil)))
+ (setq ivy--directory initial-input)
+ (setq initial-input nil)
+ (when preselect
+ (let ((preselect-directory (file-name-directory
preselect)))
+ (when (and preselect-directory
+ (not (equal (expand-file-name
preselect-directory)
+ (expand-file-name
ivy--directory))))
+ (setf (ivy-state-preselect state) (setq preselect
nil))))))
+ ((file-exists-p (file-name-directory initial-input))
+ (setq ivy--directory (file-name-directory initial-input))
+ (setf (ivy-state-preselect state)
(file-name-nondirectory initial-input)))))
(require 'dired)
(when preselect
(let ((preselect-directory (file-name-directory preselect)))