From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20746 invoked by alias); 23 Jun 2015 01:26:32 -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: 35568 Received: (qmail 12852 invoked from network); 23 Jun 2015 01:26:29 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1435022382; bh=G57ugTVOcTbBykMS6PP9bpEorqIH8nNfLhqm2KDRjjw=; h=In-reply-to:From:References:To:Subject:Date:From:Subject; b=aOIUr7wv2b0Ewk06ACiZZHsqXw5qgGLIlqkAmxUA/wEesK/NKJM3mUH97lTdIdFvu9ZgCwC1dD9s/EEBdk9FK+qpyh2kNzw1R88fRDO+ZzrM0J9i4+TYWaa3e6UyJnUc5MaBaLyeF9QQqSOCukJL9srGPCmkSYS0fe2M3yOAOuBXwUxSQRqGDz33257xKdtxZyKhK1l8nHuc2VYBYOMJYm5gLl5JN0y2Md4vNNyDIfA8rSMHaW0p5Ak3fg2bl16cIbHjEqHtDf4sP5LNaHm7dgaUcTp4MUTjoVzVuHNpOJEM9w01YGNuVhsbKrcQZh0KzoOOaRO3/oMM+s74sKJdlg== X-Yahoo-Newman-Id: 305836.29313.bm@smtp111.mail.ir2.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: kp3LnMsVM1lbJuv7O1uoM4cSybgAnqdjeSVtCeTLj85SVR9 8MHLAJpJ4ltpNb5SL2H2E7WZeUphPlv0wD5UdFl_RC265UqveLLo27Xav1T0 _IWtDFDuHKGvj8U4lKkQL9b936b3oIFKhN5pr60xbDgU6t54d_GlQm9MqS5. 5ONHvmJ1o1FA9jnrZHYvoXLOL.WcKK_tw4725nm61X6ow_o_NZMFtNQs5A7g aO4ltHFp0JAp6g4LrGJdhjuf7PRv.aMEq5zVw.7tweKWrRYlZLA8XD1RNeol 0YRhsUC4t.an5CIECUAzS9Zb_GNQ_snJ0JwAQ4.ePdF4zvZ8nOcXfSpXDWh7 gFaZoHLHOxboU5Shnu6SyJ8uoShvBrjzp50hYaVUMbzlcpxKB2wGMj42Ihq6 aV4QZdCLoX5Ubmnwxc0K3sSV126IPh9sSOtiZhj_wHUSHk3cetzpet9oBrOI 9WxFWm0EQ1cSXbEkVO73T3HIkI1nEcVYaAjbP9obng3HiZ7lmHlrCxTpHW49 bjUTOBJAv0OU_xtMuzXhueANYZxDpyA-- X-Yahoo-SMTP: opAkk_CswBAce_kJ3nIPlH80cJI- In-reply-to: <20150619130143.GC17684@lorien.comfychair.org> From: Oliver Kiddle References: <1434432668-18303-1-git-send-email-llua@gmx.com> <22433.1434440572@thecus.kiddle.eu> <558047B6.4090908@gmx.com> <29394.1434553069@thecus.kiddle.eu> <2672.1434663222@thecus.kiddle.eu> <20150619130143.GC17684@lorien.comfychair.org> To: Danek Duvall , zsh-workers@zsh.org Subject: Re: [PATCH] _file_descriptors: initialize `list' array with local -a MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <6055.1435022381.1@thecus.kiddle.eu> Date: Tue, 23 Jun 2015 03:19:41 +0200 Message-ID: <6056.1435022381@thecus.kiddle.eu> On 19 Jun, Danek Duvall wrote: > Newer versions of Solaris (11 and up?) have /proc//path/<->, which > have the same effect as the symlinks in /proc//fd on Linux. Thanks. That interface is probably more reliable. It is there in Solaris 10 and also for even older versions that are running in a branded zone. So this is yet another patch to the function. It should also work for FreeBSD using procstat. Oliver diff --git a/Completion/Zsh/Type/_file_descriptors b/Completion/Zsh/Type/_file_descriptors index 52fe4bf..3e9f496 100644 --- a/Completion/Zsh/Type/_file_descriptors +++ b/Completion/Zsh/Type/_file_descriptors @@ -1,44 +1,48 @@ #autoload local i fds expl disp link sep -local -a list +local -a list proc fds=( /dev/fd/<3->(N:t) ) fds=( ${(n)fds} ) if zstyle -T ":completion:${curcontext}:file-descriptors" verbose; then zstyle -s ":completion:${curcontext}:file-descriptors" list-separator sep || sep=-- - if [[ $OSTYPE = solaris* ]]; then - fds=( ${${(f)"$(pfiles $$|nawk 'NR==1{next} /^ *[0-9]*:/ {printf "\n%s", $1} / *\// {print $1}')"}:#[012]:*} ) + + if [[ $OSTYPE = freebsd* ]]; then + fds=( ${(f)"$(procstat -f $$|awk -v OFS=: '$3>2 && $3~/[0-9]/ {print $3,$10}')"} ) zformat -a list " $sep " $fds fds=( ${fds%%:*} ) - elif [[ ! -h /proc/$$/fd/$fds[1] ]]; then - : - elif zmodload -F zsh/stat b:zstat; then - for i in "${fds[@]}"; do - if zstat +link -A link /proc/$$/fd/$i; then - list+=( "${(r.$#fds[-1].)i} $sep ${link[1]}" ) - else - fds[(i)$i]=() - fi - done - elif (( $+commands[readlink] )); then - for i in "${fds[@]}"; do - if link=$(readlink /proc/$$/fd/$i); then - list+=( "${(r.$#fds[-1].)i} $sep $link" ) - else - fds[(i)$i]=() - fi - done - else - for i in "${fds[@]}"; do - if link=$(ls -l /proc/$$/fd/$i); then - list+=( "${(r.$#fds[-1].)i} $sep ${link#* -> }" ) - else - fds[(i)$i]=() - fi - done - fi 2>/dev/null + elif + proc=( /proc/$$/(fd|path)/<->(@N[-1]:h) ) + [[ -n $proc ]] + then + if zmodload -F zsh/stat b:zstat; then + for i in "${fds[@]}"; do + if zstat +link -A link $proc/$i; then + list+=( "${(r.$#fds[-1].)i} $sep ${(D)link[1]}" ) + else + fds[(i)$i]=() + fi + done + elif (( $+commands[readlink] )); then + for i in "${fds[@]}"; do + if link=$(readlink $proc/$i); then + list+=( "${(r.$#fds[-1].)i} $sep ${(D)link}" ) + else + fds[(i)$i]=() + fi + done + else + for i in "${fds[@]}"; do + if link=$(ls -l $proc/$i); then + list+=( "${(r.$#fds[-1].)i} $sep ${(D)link#* -> }" ) + else + fds[(i)$i]=() + fi + done + fi 2>/dev/null + fi if (( list[(I)* $sep ?*] )); then list=( @@ -48,8 +52,8 @@ if zstyle -T ":completion:${curcontext}:file-descriptors" verbose; then ) disp=( -d list ) fi - fds=( 0 1 2 $fds ) fi +fds=( 0 1 2 $fds ) _description -V file-descriptors expl 'file descriptor' compadd $disp "${@/-J/-V}" "$expl[@]" -a fds