Commit 6b072b27 authored by Phil Hagelberg's avatar Phil Hagelberg Committed by Chong Yidong
Browse files

Add pcomplete support for hosts defined in .ssh/config.

* lisp/pcmpl-unix.el (pcmpl-ssh-config-file): New option.
(pcmpl-ssh-known-hosts): Rename from pcmpl-ssh-hosts.
(pcmpl-ssh-config-hosts): New function.
(pcmpl-ssh-hosts): Use pcmpl-ssh-config-hosts in addition to
pcmpl-ssh-known-hosts.
parent 7d77be37
2011-01-22 Phil Hagelberg <phil@evri.com>
* pcmpl-unix.el (pcmpl-ssh-config-file): New option.
(pcmpl-ssh-known-hosts): Rename from pcmpl-ssh-hosts.
(pcmpl-ssh-config-hosts): New function.
(pcmpl-ssh-hosts): Use pcmpl-ssh-config-hosts in addition to
pcmpl-ssh-known-hosts.
2011-01-21 Jay Belanger <jay.p.belanger@gmail.com> 2011-01-21 Jay Belanger <jay.p.belanger@gmail.com>
   
* calc/calc-undo.el (calc-undo): Autoload it. * calc/calc-undo.el (calc-undo): Autoload it.
......
...@@ -40,14 +40,23 @@ ...@@ -40,14 +40,23 @@
(defcustom pcmpl-ssh-known-hosts-file "~/.ssh/known_hosts" (defcustom pcmpl-ssh-known-hosts-file "~/.ssh/known_hosts"
"If non-nil, a string naming your SSH \"known_hosts\" file. "If non-nil, a string naming your SSH \"known_hosts\" file.
This allows completion of SSH host names. Note that newer This allows one method of completion of SSH host names, the other
versions of ssh hash the hosts by default to prevent being via `pcmpl-ssh-config-file'. Note that newer versions of
Island-hopping SSH attacks. This can be disabled, at some risk, ssh hash the hosts by default, to prevent Island-hopping SSH
with the SSH option \"HashKnownHosts no\"." attacks. This can be disabled, at some risk, with the SSH option
\"HashKnownHosts no\"."
:type '(choice file (const nil)) :type '(choice file (const nil))
:group 'pcmpl-unix :group 'pcmpl-unix
:version "23.1") :version "23.1")
(defcustom pcmpl-ssh-config-file "~/.ssh/config"
"If non-nil, a string naming your SSH \"config\" file.
This allows one method of completion of SSH host names, the other
being via `pcmpl-ssh-known-hosts-file'."
:type '(choice file (const nil))
:group 'pcmpl-unix
:version "24.1")
;; Functions: ;; Functions:
;;;###autoload ;;;###autoload
...@@ -138,7 +147,7 @@ documentation), this function returns nil." ...@@ -138,7 +147,7 @@ documentation), this function returns nil."
;; ssh support by Phil Hagelberg. ;; ssh support by Phil Hagelberg.
;; http://www.emacswiki.org/cgi-bin/wiki/pcmpl-ssh.el ;; http://www.emacswiki.org/cgi-bin/wiki/pcmpl-ssh.el
(defun pcmpl-ssh-hosts () (defun pcmpl-ssh-known-hosts ()
"Return a list of hosts found in `pcmpl-ssh-known-hosts-file'." "Return a list of hosts found in `pcmpl-ssh-known-hosts-file'."
(when (and pcmpl-ssh-known-hosts-file (when (and pcmpl-ssh-known-hosts-file
(file-readable-p pcmpl-ssh-known-hosts-file)) (file-readable-p pcmpl-ssh-known-hosts-file))
...@@ -153,6 +162,27 @@ documentation), this function returns nil." ...@@ -153,6 +162,27 @@ documentation), this function returns nil."
(add-to-list 'ssh-hosts-list (match-string 1)))) (add-to-list 'ssh-hosts-list (match-string 1))))
ssh-hosts-list)))) ssh-hosts-list))))
(defun pcmpl-ssh-config-hosts ()
"Return a list of hosts found in `pcmpl-ssh-config-file'."
(when (and pcmpl-ssh-config-file
(file-readable-p pcmpl-ssh-config-file))
(with-temp-buffer
(insert-file-contents-literally pcmpl-ssh-config-file)
(let (ssh-hosts-list
(case-fold-search t))
(while (re-search-forward "^ *host\\(name\\)? +\\([-.[:alnum:]]+\\)"
nil t)
(add-to-list 'ssh-hosts-list (match-string 2)))
ssh-hosts-list))))
(defun pcmpl-ssh-hosts ()
"Return a list of known SSH hosts.
Uses both `pcmpl-ssh-config-file' and `pcmpl-ssh-known-hosts-file'."
(let ((hosts (pcmpl-ssh-known-hosts)))
(dolist (h (pcmpl-ssh-config-hosts))
(add-to-list 'hosts h))
hosts))
;;;###autoload ;;;###autoload
(defun pcomplete/ssh () (defun pcomplete/ssh ()
"Completion rules for the `ssh' command." "Completion rules for the `ssh' command."
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment