From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21231 invoked by alias); 30 May 2016 17:42:46 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 38555 Received: (qmail 7627 invoked from network); 30 May 2016 17:42:44 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:reply-to:to:from:subject:organization:message-id :date:user-agent:mime-version:content-transfer-encoding; bh=Y+fdtEqBC5WaH7G/I7wT3EL3t9gcatst8QjCjiWo8i8=; b=UGogNZ6mS/pT2yilRsLDnbvt1zceEsZPdZeRMfq2BBuDPgb7huekyBCQdN75R4zaoT beDwwanT33Haom4ZyVfltPx8XSi5ZsMCJXYlB6Wi7AHxvzHeCjaUrOImCOj8rbEYDKTg tnpJkWEf1HwcWhk0C4vRNGGWJvM0QEherz83fTQCxtlQeZ0uNECnrWNfVsqS+O44PjXV Vl6hwClr+Nizu2C9uHn4tuQqNrbfR2b1H1xKpTVouf82MmEY1TJDgDeNO3D5V9ZrcFdI XJnu451rMUh6KyeOFxFVoZPYEl/1Kh/x0s81jayoOCnyEKUmVA+XOq81TQLAVaqVdRYQ kmrg== X-Gm-Message-State: ALyK8tKviuLllkfLyHRYRhHuU8GbE/mQqSkIYQDcajvEcf2AGxcx5OBHtQC9o3EjKqlAhVml X-Received: by 10.28.47.70 with SMTP id v67mr12612396wmv.56.1464629782826; Mon, 30 May 2016 10:36:22 -0700 (PDT) Reply-To: Marko Myllynen To: zsh workers From: Marko Myllynen Subject: [PATCH v2] zsh localedef completion Organization: Red Hat Message-ID: <574C7A14.6070305@redhat.com> Date: Mon, 30 May 2016 20:36:20 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit 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 - offers --alias-file (unexpected to me) alongside the others but $ localedef --alias-file=foo - does not offer -A (IMHO expected). $ localedef -c 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. As Eric Cook pointed out, there's life outside of GNU and this patch now supports Darwin/Dragonfly/GNU/POSIX. Since I don't have access to a Solaris system I didn't implement that yet, would be probably pretty straightforward but would be good to actually test it. As with locale(1) completion, I chose to duplicate few lines so that if something needs to be changed for non-GNU which I haven't tested, it's probably easier to tweak the already separate if-block then. References: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/localedef.html http://man7.org/linux/man-pages/man1/localedef.1.html https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/localedef.1.html https://docs.oracle.com/cd/E26502_01/html/E29030/localedef-1.html https://www.dragonflybsd.org/cgi/web-man?command=localedef§ion=1 --- Completion/Unix/Command/_localedef | 98 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 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..4f37c56 --- /dev/null +++ b/Completion/Unix/Command/_localedef @@ -0,0 +1,98 @@ +#compdef localedef + +# TODO: Solaris opts + +local curcontext="$curcontext" state line expl ret=1 +typeset -A opt_args + +if _pick_variant gnu='(GNU|EGLIBC)' unix --version; then + + local exargs="-? --help --usage -V --version" + _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' \ + '1:path:_files' \ + - set2 \ + "(--list-archive $exargs)--list-archive[list locales in archive]" \ + - set3 \ + "(--delete-from-archive $exargs)--delete-from-archive[delete locale from archive]" \ + '*:locale:->locale' \ + - set4 \ + "(--add-to-archive $exargs)--add-to-archive[add locale to archive]" \ + "(--replace $exargs)--replace[replace locale in archive]" \ + "(--no-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 + +else + + typeset -a u_opt dragonfly_opts + [[ $OSTYPE != darwin* ]] && u_opt=( + "(-u)"-u+'[specify target codeset]:codeset:_files' + ) + [[ $OSTYPE == dragonfly* ]] && dragonfly_opts=( + "(-D)"-D'[create BSD-style output]' \ + "(-U)"-U'[ignore undefined character symbols]' \ + "(-v)"-v'[verbose deguggin output]' \ + "(-w)"-w+'[specify width file]:width file:_files' \ + ) + + _arguments -A "-*" -C \ + "(-c)"-c'[force write despite of warnings]' \ + "(-f)"-f+'[specify locale charmap file]:charmap:->charmap' \ + "(-i)"-i+'[specify locale definition file]:locale file:_files' \ + $u_opt \ + $dragonfly_opts \ + '1: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 + ;; + esac + + return ret + +fi Thanks, -- Marko Myllynen