-
Notifications
You must be signed in to change notification settings - Fork 9
Home
karthink edited this page May 5, 2022
·
7 revisions
Here is a command to quickly switch directories in eshell that piggybacks on consult-dir:
It combines the existing consult-dir sources with eshell's cd history.
(defun eshell/z (&optional regexp)
"Navigate to a previously visited directory in eshell."
(let ((eshell-dirs (delete-dups (mapcar 'abbreviate-file-name
(ring-elements eshell-last-dir-ring)))))
(cond
((and (not regexp) (featurep 'consult-dir))
(let* ((consult-dir--source-eshell `(:name "Eshell"
:narrow ?e
:category file
:face consult-file
:items ,eshell-dirs))
(consult-dir-sources (cons consult-dir--source-eshell consult-dir-sources)))
(eshell/cd (substring-no-properties (consult-dir--pick "Switch directory: ")))))
(t (eshell/cd (if regexp (eshell-find-previous-directory regexp)
(completing-read "cd: " eshell-dirs)))))))
Requires the docker-tramp package.
(defun consult-dir--tramp-docker-hosts ()
"Get a list of hosts from docker."
(when (require 'docker-tramp nil t)
(let ((hosts)
(docker-tramp-use-names t))
(dolist (cand (docker-tramp--parse-running-containers))
(let ((user (unless (string-empty-p (car cand))
(concat (car cand) "@")))
(host (car (cdr cand))))
(push (concat "/docker:" user host ":/") hosts)))
hosts)))
(defvar consult-dir--source-tramp-docker
`(:name "Docker"
:narrow ?d
:category file
:face consult-file
:history file-name-history
:items ,#'consult-dir--tramp-docker-hosts)
"Docker candiadate source for `consult-dir'.")
;; Adding to the list of consult-dir sources
(add-to-list 'consult-dir-sources 'consult-dir--source-tramp-docker t)
Requires fasd to be available in your shell environment.
;; A function that returns a list of directories
(defun consult-dir--fasd-dirs ()
"Return list of fasd dirs."
(split-string (shell-command-to-string "fasd -ld") "\n" t))
;; A consult source that calls this function
(defvar consult-dir--source-fasd
`(:name "Fasd dirs"
:narrow ?f
:category file
:face consult-file
:history file-name-history
:enabled ,(lambda () (executable-find "fasd"))
:items ,#'consult-dir--fasd-dirs)
"Fasd directory source for `consult-dir'.")
;; Adding to the list of consult-dir sources
(add-to-list 'consult-dir-sources 'consult-dir--source-fasd t)