summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorKoichi Murase <myoga.murase@gmail.com>2025-06-04 12:27:30 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-06-09 21:46:53 +0900
commit2bd29c3172bb87e447450b8b2034b4dd868fd97c (patch)
treef612db1552e686d5eaa2f7eb1e08fd01db332c2f /shell
parent4a61f53b85d4a6640b656f8442c40fb9cfb8df2d (diff)
downloadfzf-2bd29c3172bb87e447450b8b2034b4dd868fd97c.tar.gz
[bash,zsh] Support "=" after "Hostname" and "Host" in ~/.ssh/config
In ~/.ssh/config, "=" can also be used as a separator between the field name and the value. The current master does not properly handle this and generate a hostname "=" or one starting with "=". This patch correctly handles it.
Diffstat (limited to 'shell')
-rw-r--r--shell/completion.bash8
-rw-r--r--shell/completion.zsh8
2 files changed, 12 insertions, 4 deletions
diff --git a/shell/completion.bash b/shell/completion.bash
index 48a34c9b..044a35f6 100644
--- a/shell/completion.bash
+++ b/shell/completion.bash
@@ -494,8 +494,12 @@ if ! declare -F __fzf_list_hosts > /dev/null; then
shopt -s nullglob
__fzf_exec_awk '
- tolower($1) ~ /^host(name)?$/ {
- for (i = 2; i <= NF; i++)
+ # Note: mawk <= 1.3.3-20090705 does not support the POSIX brackets of
+ # the form [[:blank:]], and Ubuntu 18.04 LTS still uses this
+ # 16-year-old mawk unfortunately. We need to use [ \t] instead.
+ match(tolower($0), /^[ \t]*host(name)?[ \t]*[ \t=]/) {
+ $0 = substr($0, RLENGTH + 1) # Remove "Host(name)?=?"
+ for (i = 1; i <= NF; i++)
if ($i !~ /[*?%]/)
print $i
}
diff --git a/shell/completion.zsh b/shell/completion.zsh
index 950fa674..0f20812a 100644
--- a/shell/completion.zsh
+++ b/shell/completion.zsh
@@ -272,8 +272,12 @@ if ! declare -f __fzf_list_hosts > /dev/null; then
setopt GLOB NO_DOT_GLOB CASE_GLOB NO_NOMATCH NULL_GLOB
__fzf_exec_awk '
- tolower($1) ~ /^host(name)?$/ {
- for (i = 2; i <= NF; i++)
+ # Note: mawk <= 1.3.3-20090705 does not support the POSIX brackets of
+ # the form [[:blank:]], and Ubuntu 18.04 LTS still uses this
+ # 16-year-old mawk unfortunately. We need to use [ \t] instead.
+ match(tolower($0), /^[ \t]*host(name)?[ \t]*[ \t=]/) {
+ $0 = substr($0, RLENGTH + 1) # Remove "Host(name)?=?"
+ for (i = 1; i <= NF; i++)
if ($i !~ /[*?%]/)
print $i
}