From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 3222 invoked from network); 29 Aug 2020 16:47:49 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 29 Aug 2020 16:47:49 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:References:Content-Transfer-Encoding: Content-Type:MIME-Version:Subject:Message-ID:To:From:Date:Reply-To:Cc: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To; bh=RXQEGkZR1VlZkPXJmd4ow+XaRiDMNXrvo0tMiOhRcew=; b=nSkZwAtf9KMLBeCNakb+MWm3jR T0AsinPOJEfI6TWomMDyRPOyPoyziO8M0pgwbwIq7m4x4/J7xBXxLKTvHDOrZExQ+zDtLZAaw2yOj 6LC1zBjdurROF+o8lLeh9PynaRQDq9o+72pj5Ksv+hCkmryyHaS8xKsauu7grsGJBBtKHApcqTsf6 RU+DKgtDpKkwmcaLTid1kElTp/YXnswz7fUbxhHmmmYNftfu1pLOOxHWBSpTdHXqLuW9/2fMEjDvm 05xUHa6pCeET99IFRsfjzKUnWfHu1rFyj1eV8aZLunJtRUG/l3CNe3puuTdLi5sSGhEVcR2LeQaGB 8ZcXXxlw==; Received: from authenticated user by zero.zsh.org with local id 1kC411-000AUV-Py; Sat, 29 Aug 2020 16:47:43 +0000 Authentication-Results: zsh.org; iprev=pass (sonic307-55.consmr.mail.gq1.yahoo.com) smtp.remote-ip=98.137.64.31; dkim=pass header.d=yahoo.com header.s=s2048 header.a=rsa-sha256; dmarc=skipped; arc=none Received: from sonic307-55.consmr.mail.gq1.yahoo.com ([98.137.64.31]:43102) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) id 1kC40W-000A7y-6C; Sat, 29 Aug 2020 16:47:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1598719630; bh=RXQEGkZR1VlZkPXJmd4ow+XaRiDMNXrvo0tMiOhRcew=; h=Date:From:To:Subject:References:From:Subject; b=YXN+lp+Nh7Y3QCcd421+AXBY+Rq2QMzih/n+pjtSwn3U3ReAbpMQDIhko9bytGWrxGR8L3yZL7LUb1wopi0A8EN7fksHr6s8aq4L+ZbiR3veCFGGa5RmclkJNJ+1pl3z1DR2t9PAQ+mvoE3stsZPDE6GWMFDnH3f+6j1LvoBw3GZPQw1ogWmfD7HyBmPJ9uXOYXawiKdTKp70Tr8+lfBGRBPn6z2OKSapAAzU1M2pcQoiQcHSOc2GWQdsdl84nPkGH+iOQdZg+l3grqoZOspaPvyza2Hs1C3kYXypqw3v+WV/PnMxD/H4FGvNig8Z1hIrZEV95VyXejf2SGflmw7NQ== X-YMail-OSG: 2Sar4YIVM1klJO0C1IOumnrw8ij3QiC6f8jPYSeMyaZtfsmYDGLdZF.HyzItgTR _sVq9q6hyoq8gRuoujCueGld04lJpTImZjP9kUu5Jaj8xAcrySYqlNAYDXm33IfkP.lcIDuOCTyL aqrrBntEMxSDxy7YZIXG.IuLrATlJmHIUWpRcWpfvDKQwO3J8GhS5YMF6kp1fwDioTR1cBjSelu4 26kEcmZfF6vcInL6kSkPIOXIFXmn.PFwe2_t7yqEthbBa3LTBitjwxytYVQgJRoAfVK8wI0MLS.f RI8KzSA9_sO.XQYF5hWYrt2iKFgoyMOr.uEWE5tlxHbePwDxlN4IKJ3H2kN_AY8Fu7MVfapLJIBD ua_mbLehbucFiKOhpIVn.ozFLqEY3izdjK.VtVFnJ8nwPjdiLsNXu5V76EbGNkJaqELfWtzJW_.D 5ptmbx17HXnEdESl28r2WKlumpU1.pApWg2BbF8hAx4EJp46y9k2.nmLgVPibWFJW9vOkfsWfORj Lgxz3cGnBQY.ORM6fdUjl5rL.R..joJO_g89K1NgYSIknDFS0skQiUGY6_1M9OhNPfhu7mtNiT.a zetNk61LTcfjBaR6HiTzywl682v_bZfyFOUlFWb2zX_VG4PljXoXdEXICNujPSAr_gikMleAekmT fyOt3_Q1gv5EI7oX10CitDHyNW.c15r7btSgBOLMoo2Q3vsEVMu8y3mH5R8q_xRqJC4iu0DRbaX4 vGTQQbEYoSm0aYN0Ttx2.Z_jEXpKiLqQKVmeSIsFHOA_WreGQ7dpSzmTJteeX1b.rDXHHSMm00XY KvMVlKg6r3OjEVS1zwgcnhu2yY9RvIHeJxO5RsR0GcQC8TajullhaGGNlyhE0nvhDfpyFnzrR17L UWKVqM4FypARaKM6Z9hdsYbbe3npvkuvt7mBjT_vToo9LRkK2a902TW3GG5ON1dec7Fl9BnHgjXl DgtU05ujQNMJpupnAv1A09MCuXv5y0M2Qm5J_i9cniJ4zeOlcLkJwtetV3vsQAPzjvjubdgunxcv CALhO7WHTq.D3A62Dn.YqPQXLb4iImkN1DAxPuJs3ifDMH6Nx4mlz_RCIAiDF3wjdSwT._zVa5HA 3uZK7j_1Y.WN.HSEBHjbImk8q6sn1qqX2BPEe81p7heXBzNMEohSyjKp8j6owQabhSylTOPKUrdE 42JnvPBWH5Pjw1T.3M8QU_64ffiknvp.UgM0SBy55PkAHu43oJS_hpFzYQI1p7ZXPAlcMZuvbJX4 N7nxQCqEqdvS_7Iw027TvOmel_AdYnxXB6fwgdjYoC3KbHaWXTfhls2840uwiYeVrDh9jP6iCQBl Ag38JVou96orY_d1hz31dVAsSWomRxvy3VeMMRrzO5i1mGfmvwhCv3ucrYuubWtvOQopEvVdiQpZ 3uJxXcUFnQaf1e087BlXIim2.._L_yQGHaedKXXDEIVFru525 Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.gq1.yahoo.com with HTTP; Sat, 29 Aug 2020 16:47:10 +0000 Date: Sat, 29 Aug 2020 16:47:08 +0000 (UTC) From: vapnik spaknik To: Zsh Users Message-ID: <301108111.164161.1598719628682@mail.yahoo.com> Subject: detect if command has a completion function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit References: <301108111.164161.1598719628682.ref@mail.yahoo.com> X-Mailer: WebService/1.1.16565 YMailNodin Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 X-Seq: 26044 Archived-At: X-Loop: zsh-users@zsh.org Errors-To: zsh-users-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-users-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: Hi, how can I detect if a given command has a completion function, from within another function? I want to loop over many commands quickly, so I want to avoid resorting to searching directories with find if possible. The reason I need this capability is to help with a function I've written for cleaning up .zshrc files. I tend to collect lots of "compdef _gnu_generic cmd1 cmd2..." lines in my .zshrc, but many of the commands flagged for completion with _gnu_generic are not present on other systems where I install the same .zshrc. I wrote a function which checks the commands mentioned in those "compdef _gnu_generic" lines, and removes any that are not present on the system: function cleanup-compdefs() { local okcmds=() numcols=120 for cmd in ${(i)$(grep -e "^compdef _gnu_generic" ~/.zshrc|sed 's/compdef _gnu_generic//')}; do if which ${cmd} &>/dev/null; then okcmds+="$(basename ${cmd})" fi done local line i=1 while [[ ${i} -le ${#okcmds} ]]; do line="compdef _gnu_generic" while [[ ${#line} -lt ${numcols} ]]; do line+=" ${okcmds[${i}]}" i=$((${i} + 1)) done echo "${line}" done } However, I also want it to check which of the commands already have completion functions defined, so that they can also be removed. Can anyone help?