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

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>
* calc/calc-undo.el (calc-undo): Autoload it.
......
......@@ -40,14 +40,23 @@
(defcustom pcmpl-ssh-known-hosts-file "~/.ssh/known_hosts"
"If non-nil, a string naming your SSH \"known_hosts\" file.
This allows completion of SSH host names. Note that newer
versions of ssh hash the hosts by default to prevent
Island-hopping SSH attacks. This can be disabled, at some risk,
with the SSH option \"HashKnownHosts no\"."
This allows one method of completion of SSH host names, the other
being via `pcmpl-ssh-config-file'. Note that newer versions of
ssh hash the hosts by default, to prevent Island-hopping SSH
attacks. This can be disabled, at some risk, with the SSH option
\"HashKnownHosts no\"."
:type '(choice file (const nil))
:group 'pcmpl-unix
: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:
;;;###autoload
......@@ -138,7 +147,7 @@ documentation), this function returns nil."
;; ssh support by Phil Hagelberg.
;; 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'."
(when (and pcmpl-ssh-known-hosts-file
(file-readable-p pcmpl-ssh-known-hosts-file))
......@@ -153,6 +162,27 @@ documentation), this function returns nil."
(add-to-list 'ssh-hosts-list (match-string 1))))
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
(defun pcomplete/ssh ()
"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