I'm using a slightly modified version of the usual docker tramp integration 
(below) which works fine to complete up to /docker:container_name: but where it 
goes wrong is it opens files on the host computer, and performs completion from 
the host file-system instead of in the container. The host is a Mac, though I 
don’t think that should make a difference here. Can anyone help me fix this?

(require 'tramp)
(setq tramp-verbose 10)

(push
 (cons
  "docker"
  '((tramp-login-program "docker")
    (tramp-login-args (("exec" "-it") ("%h") ("/bin/bash")))
    (tramp-remote-shell "/bin/bash")
    (tramp-remote-shell-args ("-i") ("-c"))
))
 tramp-methods)

(defadvice tramp-completion-handle-file-name-all-completions
    (around dotemacs-completion-docker activate)
  "(tramp-completion-handle-file-name-all-completions \"\" \"/docker:\" returns
    a list of active Docker container names, followed by colons."
  (if (equal (ad-get-arg 1) "/docker:")
      (let* ((dockernames-raw (shell-command-to-string "/usr/local/bin/docker 
ps | awk '$NF != \"NAMES\" { print $NF \":\" }'"))
             (dockernames (cl-remove-if-not
                           #'(lambda (dockerline) (string-match ":$" 
dockerline))
                           (split-string dockernames-raw "\n"))))
        (setq ad-return-value dockernames))
    ad-do-it))

Reply via email to