ここから本文です
Emacsのanythingで.ssh/configを情報源としてtramp接続
.ssh/configはたいへん便利です。
Host foo Hostname example.com User example
としておけば、
ssh foo
で接続できちゃうし、IdentityFileやportなんかも覚えさせておけちゃう。
ので、これをAnythingの情報源にしたら、さらにハピーになれます。
(defvar anything-c-source-my-hosts
'((name . "hosts")
(candidates . (lambda () (anything-c-source-my-hosts-candidates)))
(type . file)
(action . (("Tramp" . anything-tramp-open)))))
(defun anything-c-source-my-hosts-candidates ()
"Tramp candidates."
(let ((source (split-string
(with-temp-buffer
(insert-file-contents "~/.ssh/config")
(buffer-string))
"\n"))
(hosts (list)))
;; trim
(dolist (host source)
(when (string-match "[H\\|h]ost +\\(.+?\\)$" host)
(setq host (string-trim (substring host (match-beginning 1) (match-end 2))))
(unless (string= host "*")
(add-to-list
'hosts
(concat "/" tramp-default-method ":" host ":") t))))
hosts))
(defun anything-tramp-open (path)
"Tramp open. PATH is path."
(find-file path))
(defun my-anything-for-tramp ()
"Anything command for .ssh/config."
(interactive)
(anything-other-buffer
'(anything-c-source-my-hosts)
"*my-anything-for-tramp*"))
ジャンル: Emacs

