summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_ssh11
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8bdf88dfc..65092283b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-14 Peter Stephenson <pws@csr.com>
+
+ * users/10979: Completion/Unix/Command/_ssh: use config file
+ from -F option if present.
+
2006-11-13 Clint Adams <clint@zsh.org>
* 22998: Completion/Linux/_acpi: add -s to _arguments.
diff --git a/Completion/Unix/Command/_ssh b/Completion/Unix/Command/_ssh
index f241c82c9..d31e60760 100644
--- a/Completion/Unix/Command/_ssh
+++ b/Completion/Unix/Command/_ssh
@@ -323,6 +323,8 @@ _ssh_users () {
_ssh_hosts () {
local -a config_hosts
+ local config
+ integer ind
if [[ "$IPREFIX" == *@ ]]; then
_combination -s '[:@]' my-accounts users-hosts "users=${IPREFIX/@}" hosts "$@"
@@ -330,7 +332,12 @@ _ssh_hosts () {
_combination -s '[:@]' my-accounts users-hosts \
${opt_args[-l]:+"users=${opt_args[-l]:q}"} hosts "$@"
fi
- if [[ -r "$HOME/.ssh/config" ]]; then
+ if (( ind = ${words[(I)-F]} )); then
+ config=$words[ind+1]
+ else
+ config="$HOME/.ssh/config"
+ fi
+ if [[ -r $config ]]; then
local IFS=$'\t ' key hosts host
while read key hosts; do
if [[ "$key" == (#i)host ]]; then
@@ -341,7 +348,7 @@ _ssh_hosts () {
esac
done
fi
- done < "$HOME/.ssh/config"
+ done < "$config"
if (( ${#config_hosts} )); then
_wanted hosts expl 'remote host name' \
compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts