zsh-workers
 help / color / mirror / code / Atom feed
bea77ae675ab421b7301e48a44f02e459a2e9674 blob 2815 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
 
#compdef units

local curcontext="$curcontext" state line expl
integer ret=1
typeset -A opt_args

# Command line completion for Solaris units isn't very useful; this
# may be standard old-fashioned behaviour.  However, it does let you
# find out the units that are available before running units
# interactively.

# GNU options, but these aren't very intrusive for other versions.
_arguments -C -s -S \
  '(-c --check --check-verbose)'{-c,--check}'[check units are reducible]' \
  '(-c --check)--check-verbose[verbosely check units are reducible]' \
  '(-o --output-format)'{-o,--output-format}'[specify output format]:printf format' \
  '(-f --file)'{-f,--file}'[specify file with units]:units file:_files' \
  '(-m --minus)'{-m,--minus}'[- is subtraction]' \
  '(-p --product)'{-p,--product}'[binary - is product]' \
  '(-q --quiet --silent)'{-q,--quiet,--silent}'[suppress prompts and statistics]' \
  '(-s --strict)'{-s,--strict}'[suppress conversion to reciprocal units]' \
  '(-t --terse)'{-t,--terse}'[make conversion output briefer]' \
  '(-v --verbose)'{-v,--verbose}'[make output more verbose]' \
  '(- *)'{-h,--help}'[show help information and exit]' \
  '(- *)'{-V,--version}'[show version information and exit]' \
  '*:unit expression:->expr' && return 0

[[ $state = expr ]] || return 1

# It's very likely there's a quoted expression, since things like '2 seconds'
# need to be a single argument.  Units themselves don't have special
# characters, so it's safe to take just the characters around the
# cursor.
compset -P '*[^[:alnum:]]'
compset -S '[^[:alnum:]]*'

# Find the units data.
local datfile
local -a testfiles
testfiles=(
  /usr/share/units.dat		# GNU on Fedora
  /usr/share/units/units.dat    # on gentoo
  /usr/share/misc/units.dat     # on Debian
  /usr/local/share/units.dat    # GNU DIY install
  /usr/share/lib/unittab	# Solaris
  /usr/share/misc/units.lib     # BSD
)

datfile=${opt_args[-f]:-${opt_args[--file]}}
if [[ -z $datfile ]]; then
  for datfile in $testfiles; do
    [[ -f $datfile ]] && break
  done
fi

if [[ ! -f $datfile ]]; then
  _message "Data file for units not found."
  return
fi

local -a all units pfxs
# Solaris uses / to start a comment, else #.
# could cache this, but it's not that big a deal...
all=($(awk '$1 !~ /^[\/#]/ { print $1 }' $datfile))
# prefixes end in a -
pfxs=(${${all:#^[[:alnum:]]##-}%%-})
# units may include regular or piecewise linear functions
units=(${${all:#^[[:alnum:]]##([\(\]]*|)}%%\(*})

if (( ${#units} )); then
  _alternative 'unitprefixes:unit prefix:compadd -S "" -a pfxs' \
    'units:unit:compadd -a units' && ret=0
  # attempt to skip a prefix
  if (( ${#pfxs} )) && compset -P "(${(j.|.)pfxs})"; then
    _wanted units expl unit compadd -a units && ret=0
  fi
  return ret
else
  _message "No unit definitions found."
fi
debug log:

solving bea77ae67 ...
found bea77ae67 in https://git.vuxu.org/mirror/zsh/

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).