branch: master commit 0c62f7e1c1d61c2fb172d1fdded66307288b714b Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
ivy.el (ivy-alt-done): Split into smaller defuns * ivy.el (ivy--directory-done): New defun. (ivy-alt-done): Forward to `ivy--directory-done'. --- ivy.el | 158 +++++++++++++++++++++++++++++++------------------------------ swiper.el | 2 + 2 files changed, 83 insertions(+), 77 deletions(-) diff --git a/ivy.el b/ivy.el index f70c54f..9eafaa6 100644 --- a/ivy.el +++ b/ivy.el @@ -390,84 +390,88 @@ Is is a cons cell, related to `tramp-get-completion-function'." "Exit the minibuffer with the selected candidate. When ARG is t, exit with current text, ignoring the candidates." (interactive "P") + (cond (arg + (ivy-immediate-done)) + (ivy--directory + (ivy--directory-done)) + ((eq (ivy-state-collection ivy-last) 'Info-read-node-name-1) + (if (or (equal ivy--current "(./)") + (equal ivy--current "(../)")) + (ivy-quit-and-run + (ivy-read "Go to file: " 'read-file-name-internal + :action (lambda (x) + (Info-find-node + (expand-file-name x ivy--directory) + "Top")))) + (ivy-done))) + (t + (ivy-done)))) + +(defun ivy--directory-done () + "Handle exit from the minibuffer when completing file names." (let (dir) - (cond (arg - (ivy-immediate-done)) - (ivy--directory - (cond - ((equal ivy-text "/sudo::") - (setq dir (concat ivy-text ivy--directory)) - (ivy--cd dir) - (ivy--exhibit)) - ((or - (and - (not (equal ivy-text "")) - (ignore-errors - (file-directory-p - (setq dir - (file-name-as-directory - (expand-file-name - ivy-text ivy--directory)))))) - (and - (not (string= ivy--current "./")) - (cl-plusp ivy--length) - (ignore-errors - (file-directory-p - (setq dir (file-name-as-directory - (expand-file-name - ivy--current ivy--directory))))))) - (ivy--cd dir) - (ivy--exhibit)) - ((or (and (equal ivy--directory "/") - (string-match "\\`[^/]+:.*:.*\\'" ivy-text)) - (string-match "\\`/[^/]+:.*:.*\\'" ivy-text)) - (ivy-done)) - ((or (and (equal ivy--directory "/") - (cond ((string-match - "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" - ivy-text)) - ((string-match - "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" - ivy--current) - (setq ivy-text ivy--current)))) - (string-match - "\\`/\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" - ivy-text)) - (let ((method (match-string 1 ivy-text)) - (user (match-string 2 ivy-text)) - (rest (match-string 3 ivy-text)) - res) - (require 'tramp) - (dolist (x (tramp-get-completion-function method)) - (setq res (append res (funcall (car x) (cadr x))))) - (setq res (delq nil res)) - (when user - (dolist (x res) - (setcar x user))) - (setq res (cl-delete-duplicates res :test #'equal)) - (let* ((old-ivy-last ivy-last) - (enable-recursive-minibuffers t) - (host (ivy-read "Find File: " - (mapcar #'ivy-build-tramp-name res) - :initial-input rest))) - (setq ivy-last old-ivy-last) - (when host - (setq ivy--directory "/") - (ivy--cd (concat "/" method ":" host ":")))))) - (t - (ivy-done)))) - ((eq (ivy-state-collection ivy-last) 'Info-read-node-name-1) - (if (or (equal ivy--current "(./)") - (equal ivy--current "(../)")) - (ivy-quit-and-run - (ivy-read "Go to file: " 'read-file-name-internal - :action (lambda (x) - (Info-find-node - (expand-file-name x ivy--directory) - "Top")))) - (ivy-done))) - (t - (ivy-done))))) + (cond + ((equal ivy-text "/sudo::") + (setq dir (concat ivy-text ivy--directory)) + (ivy--cd dir) + (ivy--exhibit)) + ((or + (and + (not (equal ivy-text "")) + (ignore-errors + (file-directory-p + (setq dir + (file-name-as-directory + (expand-file-name + ivy-text ivy--directory)))))) + (and + (not (string= ivy--current "./")) + (cl-plusp ivy--length) + (ignore-errors + (file-directory-p + (setq dir (file-name-as-directory + (expand-file-name + ivy--current ivy--directory))))))) + (ivy--cd dir) + (ivy--exhibit)) + ((or (and (equal ivy--directory "/") + (string-match "\\`[^/]+:.*:.*\\'" ivy-text)) + (string-match "\\`/[^/]+:.*:.*\\'" ivy-text)) + (ivy-done)) + ((or (and (equal ivy--directory "/") + (cond ((string-match + "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" + ivy-text)) + ((string-match + "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" + ivy--current) + (setq ivy-text ivy--current)))) + (string-match + "\\`/\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'" + ivy-text)) + (let ((method (match-string 1 ivy-text)) + (user (match-string 2 ivy-text)) + (rest (match-string 3 ivy-text)) + res) + (require 'tramp) + (dolist (x (tramp-get-completion-function method)) + (setq res (append res (funcall (car x) (cadr x))))) + (setq res (delq nil res)) + (when user + (dolist (x res) + (setcar x user))) + (setq res (cl-delete-duplicates res :test #'equal)) + (let* ((old-ivy-last ivy-last) + (enable-recursive-minibuffers t) + (host (ivy-read "Find File: " + (mapcar #'ivy-build-tramp-name res) + :initial-input rest))) + (setq ivy-last old-ivy-last) + (when host + (setq ivy--directory "/") + (ivy--cd (concat "/" method ":" host ":")))))) + (t + (ivy-done))))) (defcustom ivy-tab-space nil "When non-nil, `ivy-partial-or-done' should insert a space." diff --git a/swiper.el b/swiper.el index b504f19..68f6e32 100644 --- a/swiper.el +++ b/swiper.el @@ -241,6 +241,8 @@ (defvar swiper-use-visual-line nil "When non-nil, use `line-move' instead of `forward-line'.") +(declare-function outline-show-all "outline") + (defun swiper--candidates (&optional numbers-width) "Return a list of this buffer lines.