zsh-workers
 help / color / mirror / code / Atom feed
e08337876ba9bc251a28f1b7b1a5a817e89a3a83 blob 3695 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
 
#compdef ftp rwho rup xping traceroute aaaa zone mx ns soa txt

# avoid calling variable "hosts", it's an obvious candidate for use in
#  zstyle -e '*' hosts 'reply=($hosts)'
local expl _hosts tmp useip

if ! zstyle -a ":completion:${curcontext}:hosts" hosts _hosts; then
  if (( $+_cache_hosts == 0 )) || ! zstyle -t ":completion:${curcontext}:hosts" use-cache; then
    # uniquify
    typeset -gUa _cache_hosts
    local ipstrip='[:blank:]#[^[:blank:]]#'

    # This boolean style determines whether hosts completes IP addresses. The
    # default is no (not using IP addresses).
    zstyle -t ":completion:${curcontext}:hosts" use-ip && useip=yes
    [[ -n $useip ]] && ipstrip=
    if (( ${+commands[getent]} )); then
      # pws: we were using the horrible ": ${(A)...:=}" syntax to assign
      # to _cache_hosts, overriding the typeset as well as being unreadable
      # and having obscure splitting behaviour.  Why?  We've just
      # tested _cache_hosts doesn't exist.
      _cache_hosts=(${(s: :)${(ps:\t:)${(f)~~"$(_call_program hosts getent hosts 2>/dev/null)"}##${~ipstrip}}})
    else
      _cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##${~ipstrip}}})
      if (( ${+commands[ypcat]} )) &&
      tmp=$(_call_program hosts ypcat hosts.byname 2>/dev/null); then
        _cache_hosts+=( ${=${(f)tmp}##${~ipstrip}} ) # If you use YP
      fi
    fi
  fi

  local khostfile
  typeset -Ua khostfiles

  # This style specifies a list of files to look up for host names and IP
  # addresses, if asked to. The files can contain comma separated host names
  # and IP's, and any text on a line after the first whitespace,| or # is
  # discarded. ssh's known_hosts files are thus supported. This style defaults
  # to the list /etc/ssh/ssh_known_hosts, ~/.ssh/known_hosts
  zstyle -a ":completion:${curcontext}:hosts" known-hosts-files khostfiles ||
  khostfiles=(/etc/ssh/ssh_known_hosts ~/.ssh/known_hosts)

  _hosts_default_cache_policy() {
    for khostfile in $khostfiles; do
      [[ $1 -ot $khostfile ]] && return 0
    done
    return 1
  }

  zstyle -s ":completion:$curcontext:hosts" cache-policy user_policy
  if [[ -z "$user_policy" ]]; then
    zstyle ":completion:$curcontext:" cache-policy _hosts_default_cache_policy
  fi

  typeset -A khostcache
  _cache_invalid khostcache || _retrieve_cache khostcache

  for khostfile in $khostfiles; do
    if ! (( $+khostcache[$khostfile] )); then
      if [[ -r $khostfile ]]; then
        khosts=(${(s/,/j/,/u)${(f)"$(<$khostfile)"}%%[ |#]*})

        # known_hosts syntax supports the host being in the form [hostname]:port
        # The filter below extracts the hostname from lines using this format.
        #
        # known_hosts syntax supports wildcards.  The filter below removes wildcard
        # entries.
        () {
          local host
          local -a match mbegin mend
          khosts=()
          for host; do
            if [[ $host == *[*?]* ]]; then
              continue
            elif [[ $host = (#b)*\[(*)\]:[[:digit:]]#* ]]; then
              khosts+=${match[1]}
            else
              khosts+=$host
            fi
          done
        } "$khosts[@]"
        if [[ -n "$khosts" ]]; then
          khostcache[$khostfile]=${(j. .)khosts}
        fi
      fi
    fi
  done
  _store_cache khostcache khostcache

  local -a khosts=()
  for khostfile in $khostfiles; do
    khosts+=($=khostcache[$khostfile])
  done
  if [[ -z $useip ]]; then
    khosts=(${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)})
  fi
  _hosts=( "$_cache_hosts[@]" "$khosts[@]" )
fi

_wanted hosts expl host \
    compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - _hosts
debug log:

solving e08337876 ...
found e08337876 in https://inbox.vuxu.org/zsh-workers/20220711000842.14746-1-ronan@rjp.ie/
found 4057fee10 in https://git.vuxu.org/mirror/zsh/
preparing index
index prepared:
100644 4057fee10b963ab575e251d2bb8d19176475c187	Completion/Unix/Type/_hosts

applying [1/1] https://inbox.vuxu.org/zsh-workers/20220711000842.14746-1-ronan@rjp.ie/
diff --git a/Completion/Unix/Type/_hosts b/Completion/Unix/Type/_hosts
index 4057fee10..e08337876 100644

Checking patch Completion/Unix/Type/_hosts...
Applied patch Completion/Unix/Type/_hosts cleanly.

index at:
100644 e08337876ba9bc251a28f1b7b1a5a817e89a3a83	Completion/Unix/Type/_hosts

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).