Subject: [PATCH] zsh localedef completion
From: Marko Myllynen <[email-masked]>
To: [email-masked]
Date: Mon, 9 May 2016 15:55:15 +0300
List-Id: Zsh Workers List <zsh-workers.zsh.org>

Hi,

Below is zsh completions for the localedef(1) command, I've tested this
on RHEL 7 against the glibc provided localedef command. Otherwise it
works nicely but I'm a bit wondering two things here:

$ localedef -Afoo -<TAB>

offers --alias-file (unexpected to me) alongside the others but

$ localedef --alias-file=foo -<TAB>

does not offer -A (IMHO expected).

$ localedef -c<TAB>

offers also V/? although I hoped them to get excluded in that case.

Anyway, I don't think neither of these are critical issues so I think
this would be already worth merging as-is but if you happen to know the
needed tweaks to address those issues all the better.

http://man7.org/linux/man-pages/man1/localedef.1.html

---
 Completion/Unix/Command/_localedef | 54 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 Completion/Unix/Command/_localedef

diff --git a/Completion/Unix/Command/_localedef b/Completion/Unix/Command/_localedef
new file mode 100644
index 0000000..ac4b438
--- /dev/null
+++ b/Completion/Unix/Command/_localedef
@@ -0,0 +1,54 @@
+#compdef localedef
+
+local curcontext="$curcontext" state line expl ret=1
+local exargs="-? --help --usage -V --version"
+typeset -A opt_args
+
+_arguments -A -C -S -s \
+  '(- *)'{-\?,--help}'[display help information]' \
+  '(- *)--usage[display a short usage message]' \
+  '(- *)'{-V,--version}'[print program version]' \
+  "(-A --alias-file= $exargs)"{-A+,--alias-file=}'[specify locale alias file]:alias file:_files' \
+  "($exargs)--prefix=[specify path prefix]:prefix:_files" \
+  "(-c --force $exargs)"{-c,--force}'[force write despite of warnings]' \
+  "(-v --verbose $exargs)"{-v,--verbose}'[display additional information]' \
+  "($exargs)--quiet[suppress messages and warnings]" \
+  - set1 \
+  "(-f --charmap= $exargs)"{-f+,--charmap=}'[specify locale charmap file]:charmap:->charmap' \
+  "(-i --inputfile= $exargs)"{-i+,--inputfile=}'[specify locale definition file]:locale file:_files' \
+  "(-u --repertoire-map= $exargs)"{-u+,--repertoire-map=}'[specify repertoire map file]:repertoire map file:_files' \
+  '*:path:_files' \
+  - set2 \
+  "($exargs)--list-archive[list locales in archive]" \
+  - set3 \
+  "($exargs)--delete-from-archive[delete locale from archive]" \
+  '*:locale:->locale' \
+  - set4 \
+  "($exargs)--add-to-archive[add locale to archive]" \
+  "($exargs)--replace[replace locale in archive]" \
+  "($exargs)--no-archive[use subdir not archive]" \
+  '*:compiled path:_files -/' \
+  && return 0
+
+case "$state" in
+  charmap)
+    if [[ $words[-1] == */* ]]; then
+      _wanted values expl charmap _files && ret=0
+    else
+      typeset -a charmaps
+      charmaps=( ${(f)"$(locale -m)"} )
+      _wanted values expl charmap compadd "$@" \
+        -M 'm:{a-zA-Z}={A-Za-z} r:|-=* r:|=*' \
+        -a - charmaps && ret=0
+    fi
+  ;;
+  locale)
+    typeset -a locales
+    local pref=${opt_args[--prefix]}
+    local p=${pref:+--prefix}
+    locales=( ${(f)"$(localedef --list-archive $p $pref)"} )
+    _wanted values expl locale compadd "$@" -a - locales && ret=0
+  ;;
+esac
+
+return ret

Thanks,

-- 
Marko Myllynen