From 5be4517bca5a59ad15f5b55f63ac43b50d5440f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ellis=20Keny=C5=91?= Date: Thu, 7 Sep 2023 19:18:12 +0100 Subject: [PATCH] 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. --- modules/completion/vertico/config.el | 50 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/modules/completion/vertico/config.el b/modules/completion/vertico/config.el index 1aa68732d..1d64813d7 100644 --- a/modules/completion/vertico/config.el +++ b/modules/completion/vertico/config.el @@ -10,6 +10,12 @@ overrides `completion-styles' during company completion sessions.") (defvar +vertico-consult-fd-args nil "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 @@ -197,22 +203,35 @@ orderless." ("C-x C-j" . consult-dir-jump-file)) :config (when (modulep! :tools docker) + ;; TODO Replace with `tramp-container--completion-function' when we drop support for <29 + (defun +vertico--consult-dir-container-hosts (host) + "Get a list of hosts from HOST." + (cl-loop for line in (cdr + (ignore-errors + (apply #'process-lines +vertico-consult-dir-container-executable + (append +vertico-consult-dir-container-args (list "ps"))))) + for cand = (split-string line "[[:space:]]+" t) + collect (let ((user (unless (string-empty-p (car cand)) + (concat (car cand) "@"))) + (hostname (car (last cand)))) + (format "/%s:%s%s:/" host user hostname)))) + + (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 () - "Get a list of hosts from docker." - (when (if (>= emacs-major-version 29) - (require 'tramp-container nil t) - (setq-local docker-tramp-use-names t) - (require 'docker-tramp nil t)) - (let ((hosts) - (docker-query-fn #'docker-tramp--parse-running-containers)) - (when (>= emacs-major-version 29) - (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) "@"))) - (host (car (cdr cand)))) - (push (concat "/docker:" user host ":/") hosts))) - 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 `(:name "Docker" @@ -223,6 +242,7 @@ orderless." :items ,#'+vertico--consult-dir-docker-hosts) "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 'consult-dir--source-tramp-ssh t)