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=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.4 Received: (qmail 28493 invoked from network); 9 Sep 2022 03:03:19 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 9 Sep 2022 03:03:19 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1662692599; b=H6mHA7JjMzGslly7YhGZa0BOagSL7gqf3eO6J3Injm+LCZzGjexic7AzNcpiGPDPzdiFjIKKCP YH1QtHHV6KsILQV9KWlkNJNd+KmC9axgKaQEqhlCqjyQA7MW6Omc1wuiqguXfwYfgtCtXC3odC 490euXhYKzqA1e1Sz0/X1nTCl9qdn1O9mJDL4Pct2foWUVSbGBQcSrB2K8rr264Ur+HWWy6n+O 6vdZwzMSEhoS3WgU2LC5CRMnTUcHeGY5FAzJ5zGZkK4OxKS6SNOGodtxU4ubpZ1QfVP8xelF3K ohn4Ta16FviYEazvEc9S8JOkkMzEaSsAtEyqVuLr2x7xLQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ej1-f47.google.com) smtp.remote-ip=209.85.218.47; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1662692599; bh=4Cak6zrJvwdl+7Mi+7xK79yiXDBawwA516dQiki975A=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=f+UV6L+WG+wMG+QRlJh06SXoovs5ilTTB1qWUi48xnKDVdZFByYDKpSWdNWG4Pp2rPqVPiwz31 oh+aSsBXXaMNLlCUEnhruWWHz5DWLbQXvyg+DM0QUuj+kChs4uoRKo7aLlN9vfGQ5UCEcM5BUn ntSMjrn0p1Ay+rB1gP18D6myisxDR/EmoajV6dsLNwdm3swDUirHKdwXC+JooXgp32wxD9Ju7e 8nuH61LlZyw/YEeHWT1+QXZJI1f2dYRf3OLZxrIeQQpLobET7pmz0owFQGXWamGDklo4vvpT3K k9D1JTroW8nesYgAOybD2R2iNz09RfTX9tR4r4/Z9j1ftQ==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=4Ng8dpA8ZOpzXs+eFQhVawrVEp8VzZ51fo4eK3Y4WS4=; b=s2TAyCLjvcKdododwGRA65X7bV tWmKRa2A1/tLEmRgi6uHMgFIDzdLTXknaEdWeA/5KlaRNQ5P4HJYCx0PSh+tT0dvH6cB7LemztmZg GygNDjsTybP6IRce02HxTQ/QAepng9o9AZ2BYQV7WaaRgwUZxEQ3jOWVTJlFcGE6Sl/TB5iiEHxnu Oj/b/9H5Tbm+TQ5xV4dss1P/j4xUohaHvlgh1vMvX+RltAqaCMwIQ2lqMjeQEssvLjxg22jKJljLN wdXnIDm0kHoLRVlZQgXNzmYBxZ/LCYC3oMk7t+/6um9MnCqXHl2C9RarhvsJCdIfMHyi2TWfgMcMI 9hRYb/Vw==; Received: from authenticated user by zero.zsh.org with local id 1oWUIY-000Agv-O9; Fri, 09 Sep 2022 03:03:18 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ej1-f47.google.com) smtp.remote-ip=209.85.218.47; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-ej1-f47.google.com ([209.85.218.47]:40844) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1oWUFK-0008bM-Sp; Fri, 09 Sep 2022 02:59:59 +0000 Received: by mail-ej1-f47.google.com with SMTP id l14so883171eja.7; Thu, 08 Sep 2022 19:59:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date; bh=4Ng8dpA8ZOpzXs+eFQhVawrVEp8VzZ51fo4eK3Y4WS4=; b=T0VsBA5kMFbm02RptdgTazbutwr4JCnt6ENSdHg0leaGHI8DhtoMAhm5GeteLsqA3i v6PF8uBvpUF7d+K5oPyojO7qaGHX5yUL1g5JCMvtNhbOAhxYbHowLVlZSM7QpqlolrYh EwWF0bvzkMxAk5/L6ILhXmlrQ+VQiNziZ7VhUqavn9XFFLi9LXIuWs9DrXI7/TFshaOn ur3WDg091A5et1HU5cc29M1CydgwlVzkx7zhtgRwFn6vvhL1yBiJMrF1NMAm/URM/Exc 2Ycm3XaUfid+zRuGiMYJFb+jZp/8H1MzX6JMr5MzzIAsvs3BlWFdeXiflWM68Q/i/1ZL Vo7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date; bh=4Ng8dpA8ZOpzXs+eFQhVawrVEp8VzZ51fo4eK3Y4WS4=; b=qcQKUWZKdTaqnxd9X/L7KtgqKpsp6kHsaKCqo2t+lU8ZxSQSlCQJLAozEYGiLOMTLI 3+9yUpWRglyQHBsbrgvFoS4e+uofOkh1DNuB5D4ortDGO6MmQdVZ2LJ4EJG5MJRuTXQS H5pIZfa8kmOa54vl48hH2qSfH2YFti46L6/8ztl8kE8qEEZkAcvSseA5pPa92DI+FiN1 WbVjNY4ubS3r8tfnYxtJzoYs0IZPzwnkv3Rl9SmFtK1vvW4XS5/8hzf8fhubfzOUHZZR HJ+7F0EpUkn5VEcfzhrhugNiaq35ebiREdjwYzsmGHlh0S6FqIeC0JQ94vPRMfbW1d92 GCCw== X-Gm-Message-State: ACgBeo3wPtHvg+aDCE2L8mVt81opZ63I54OhxGGZbOeAng4xHCQsNYha QO8s9ZlwtJvihgcNbSroFaethJJWcKNfly/LzBn2QGd/bUyf8Q== X-Google-Smtp-Source: AA6agR6s6HT5Q+UWOGB/yEK1MgP67WQ59uxaHrlpOQWcgqhXi11h07rUCPLvQNkNLXJTbK1IOk92+CAZzE2r5j2TlM8= X-Received: by 2002:a17:906:ef90:b0:730:9d18:17b3 with SMTP id ze16-20020a170906ef9000b007309d1817b3mr8564595ejb.141.1662692398069; Thu, 08 Sep 2022 19:59:58 -0700 (PDT) MIME-Version: 1.0 From: Felipe Contreras Date: Thu, 8 Sep 2022 21:59:47 -0500 Message-ID: Subject: Get completions from a script To: Zsh Users , Zsh hackers list , Bart Schaefer Content-Type: text/plain; charset="UTF-8" X-Seq: 50615 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Hi, I finally finished working on the script to generate completions based on some hypothetically typed characters. For example: complete 'git s' This comes from a discussion in zsh-users [1] in 2021 where different methods were suggested. The problem with using the complete-word approach is that it generates prefixes that I don't want, for example given this: _foobar() { compset -P '*[=:]' compadd octopus ours recursive resolve subtree } compdef _foobar foobar I would expect `complete 'git -s=re'` to only return "recursive", not "-s=recursive". The idea to use vared did actually work, and with that I'm able to get rid of the separate file and to put everything in a single file of 29 lines. Here it is: zmodload zsh/zpty autoload -U compinit && compinit -u setopt list_rows_first LISTMAX=1000 zstyle ":completion:*:default" list-colors "no=" "fi=" "di=" "sp=" "lc=" "rc=" "ec=\n" zstyle ':completion:*' verbose no zle_complete() { zle list-choices zle kill-whole-line print "" } zle -N zle_complete hide-vared() { compstate[vared]=''; } run_complete() { local -a compprefuncs=(hide-vared "${(@)compprefuncs}") local cmd="$1" vared -i zle_complete cmd } zpty c "run_complete \"$1\"" zpty -r c log '*' zpty -d c for x in ${(M)${(f)log}:#*''*}; do print -- "${${x%''*}#*''}" done Cheers. [1] https://www.zsh.org/users/26334 -- Felipe Contreras