refactor(vertico): consult-dir: drop dependence on docker-tramp

Removes the dependence on docker-tramp, can later be cleaned up with
`tramp-container--completion-function` when we drop support for <29.
This commit is contained in:
Ellis Kenyő 2023-09-07 19:18:12 +01:00 committed by GitHub
parent 42d5fd8350
commit 5be4517bca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,6 +10,12 @@ overrides `completion-styles' during company completion sessions.")
(defvar +vertico-consult-fd-args nil (defvar +vertico-consult-fd-args nil
"Shell command and arguments the vertico module uses for fd.") "Shell command and arguments the vertico module uses for fd.")
(defvar +vertico-consult-dir-container-executable "docker"
"Command to call for listing container hosts.")
(defvar +vertico-consult-dir-container-args nil
"Command to call for listing container hosts.")
;; ;;
;;; Packages ;;; Packages
@ -197,22 +203,35 @@ orderless."
("C-x C-j" . consult-dir-jump-file)) ("C-x C-j" . consult-dir-jump-file))
:config :config
(when (modulep! :tools docker) (when (modulep! :tools docker)
(defun +vertico--consult-dir-docker-hosts () ;; TODO Replace with `tramp-container--completion-function' when we drop support for <29
"Get a list of hosts from docker." (defun +vertico--consult-dir-container-hosts (host)
(when (if (>= emacs-major-version 29) "Get a list of hosts from HOST."
(require 'tramp-container nil t) (cl-loop for line in (cdr
(setq-local docker-tramp-use-names t) (ignore-errors
(require 'docker-tramp nil t)) (apply #'process-lines +vertico-consult-dir-container-executable
(let ((hosts) (append +vertico-consult-dir-container-args (list "ps")))))
(docker-query-fn #'docker-tramp--parse-running-containers)) for cand = (split-string line "[[:space:]]+" t)
(when (>= emacs-major-version 29) collect (let ((user (unless (string-empty-p (car cand))
(setq docker-query-fn #'tramp-docker--completion-function))
(dolist (cand (funcall docker-query-fn))
(let ((user (unless (string-empty-p (car cand))
(concat (car cand) "@"))) (concat (car cand) "@")))
(host (car (cdr cand)))) (hostname (car (last cand))))
(push (concat "/docker:" user host ":/") hosts))) (format "/%s:%s%s:/" host user hostname))))
hosts)))
(defun +vertico--consult-dir-podman-hosts ()
(let ((+vertico-consult-dir-container-executable "podman"))
(+vertico--consult-dir-container-hosts "podman")))
(defun +vertico--consult-dir-docker-hosts ()
(let ((+vertico-consult-dir-container-executable "docker"))
(+vertico--consult-dir-container-hosts "docker")))
(defvar +vertico--consult-dir-source-tramp-podman
`(:name "Podman"
:narrow ?p
:category file
:face consult-file
:history file-name-history
:items ,#'+vertico--consult-dir-podman-hosts)
"Podman candiadate source for `consult-dir'.")
(defvar +vertico--consult-dir-source-tramp-docker (defvar +vertico--consult-dir-source-tramp-docker
`(:name "Docker" `(:name "Docker"
@ -223,6 +242,7 @@ orderless."
:items ,#'+vertico--consult-dir-docker-hosts) :items ,#'+vertico--consult-dir-docker-hosts)
"Docker candiadate source for `consult-dir'.") "Docker candiadate source for `consult-dir'.")
(add-to-list 'consult-dir-sources '+vertico--consult-dir-source-tramp-podman t)
(add-to-list 'consult-dir-sources '+vertico--consult-dir-source-tramp-docker t)) (add-to-list 'consult-dir-sources '+vertico--consult-dir-source-tramp-docker t))
(add-to-list 'consult-dir-sources 'consult-dir--source-tramp-ssh t) (add-to-list 'consult-dir-sources 'consult-dir--source-tramp-ssh t)