From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9287 invoked by alias); 30 May 2016 17:44:10 -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: 38556 Received: (qmail 9877 invoked from network); 30 May 2016 17:44:09 -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=IN8vO/nOAa2WFXRh2HYj+M9Wf2DFqSOQD1amsrz7/K8=; b=M3FBuElthXyGoUGT7gAepfom6Yr3+rkBEXw9nrWImktSNmjnqg44ycocrDdPHM2D5V YNMMNHOIb2WDYPAMnmQs5pHcGJ0Bc53o3PhxegkswLzXCowF88Fc88BTcOkDcqDf14dT z7rPIFrlVHSpyzKLv2hCWeWEHD9+AMCSfva2YEZF0cDGeKJcAr5VNvq6CpE+Zb1Skkj2 eVejH0tOLCAsL2W42VXX0kZu5gvReOC3p4UBs1pEYYw0WUAeDGbZ3GeDjd9r5gQy5po1 QwtuCllTalWMV5G3OQ+3khBr9zCck8cnvaGfEBS1RTht+Vd0FO48irMSQUks45qb+AN7 Yhtw== X-Gm-Message-State: ALyK8tJLqFKN1rwfYJpgsHlRi/Xcr0FcHs35zfbsiIIdcKRI2ytzN0qOeiYOrm4Yv1KsP3OX X-Received: by 10.28.174.6 with SMTP id x6mr10728004wme.48.1464629772480; Mon, 30 May 2016 10:36:12 -0700 (PDT) Reply-To: Marko Myllynen To: zsh workers From: Marko Myllynen Subject: [PATCH v2] zsh locale completion Organization: Red Hat Message-ID: <574C7A09.7010800@redhat.com> Date: Mon, 30 May 2016 20:36:09 +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 locale(1) command, I've tested this on RHEL 7 against the glibc provided locale command. Otherwise it works nicely but I'm a bit wondering why after "locale -a" I'm getting all other options offered, I would have thought getting -v offered only. On Eric Cook's suggestion supports now GNU/OpenBSD/POSIX. I duplicated the category/keyword handling under GNU/POSIX sections as I don't have any non-GNU systems to test on and if any changes are needed for non-GNU it's probably easier to tweak the already separate if-block then. References: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/locale.html http://man7.org/linux/man-pages/man1/locale.1.html https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/locale.1.html https://docs.oracle.com/cd/E26502_01/html/E29030/locale-1.html https://www.freebsd.org/cgi/man.cgi?locale http://netbsd.gw.com/cgi-bin/man-cgi?locale+1+NetBSD-current http://man.openbsd.org/locale.1 https://www.dragonflybsd.org/cgi/web-man?command=locale§ion=1 --- Completion/Unix/Command/_locale | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Completion/Unix/Command/_locale diff --git a/Completion/Unix/Command/_locale b/Completion/Unix/Command/_locale new file mode 100644 index 0000000..3b3aa22 --- /dev/null +++ b/Completion/Unix/Command/_locale @@ -0,0 +1,68 @@ +#compdef locale + +# TODO: FreeBSD: locale -k list [prefix] + +local curcontext="$curcontext" state line expl ret=1 + +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]' \ + - set1 \ + "(-a --all-locales $exargs)"{-a,--all-locales}'[list all available locales]' \ + "(-v --verbose $exargs)"{-v,--verbose}'[display additional information]' \ + - set2 \ + "(-m --charmaps $exargs)"{-m,--charmaps}'[list all available charmaps]' \ + - set3 \ + "(-c --category-name $exargs)"{-c,--category-name}'[print also locale category]' \ + "(-k --keyword-name $exargs)"{-k,--keyword-name}'[print also keyword of each value]' \ + '*:name:->catkey' \ + && return 0 + + if [[ $state == catkey ]]; then + typeset -a cats keys + cats=( ${${${(f)"$(locale)"}%=*}%(LANG|LANGUAGE|LC_ALL)} ) + keys=( ${${(f)"$(locale -k $cats 2>/dev/null)"}%=*} ) + _wanted values expl name compadd "$@" -a - cats keys && ret=0 + fi + + return ret + +elif [[ $OSTYPE == openbsd* ]]; then + + _arguments \ + - set1 \ + "(-a)"-a'[list all available locales]' \ + - set2 \ + "(-m)"-m'[list all available charmaps]' \ + && return 0 + + return ret + +else + + _arguments -A "-*" -C \ + - set1 \ + "(-a)"-a'[list all available locales]' \ + - set2 \ + "(-m)"-m'[list all available charmaps]' \ + - set3 \ + "(-c)"-c'[print also locale category]' \ + "(-k)"-k'[print also keyword of each value]' \ + '*:name:->catkey' \ + && return 0 + + if [[ $state == catkey ]]; then + typeset -a cats keys + cats=( ${${${(f)"$(locale)"}%=*}%(LANG|LANGUAGE|LC_ALL)} ) + keys=( ${${(f)"$(locale -k $cats 2>/dev/null)"}%=*} ) + _wanted values expl name compadd "$@" -a - cats keys && ret=0 + fi + + return ret + +fi Thanks, -- Marko Myllynen