diff options
Diffstat (limited to 'vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands')
| -rw-r--r-- | vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html b/vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html index 99216975..c1390ced 100644 --- a/vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html +++ b/vhosts/blog/public/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html @@ -14,8 +14,7 @@ <meta property="og:locale" content="ja_JP"> <link rel="icon" type="image/svg+xml" href="/favicon.svg"> <title>【Zsh】 Composer のカスタムコマンドに対する Zsh 補完で引数にファイルを補完させる|REPL: Rest-Eat-Program Loop</title> - <link rel="stylesheet" href="/style.css?h=79020a898c7052f79b32e90376a4497d"> - <link rel="stylesheet" href="/hl.css?h=340e65ffd5c17713efc9107c06304f7b"> + <link rel="stylesheet" href="/style.css?h=60eb349e583f5bd51518a7eb98598043"> </head> <body class="single"> <header class="header"> @@ -98,11 +97,13 @@ このことは、先ほどリンクを載せた <code>_composer</code> 関数を定義しているファイルの冒頭にも書かれている。 </p> - <pre class="highlight" language="zsh"><code class="highlight"><span class="hljs-comment"># - @todo We don't complete custom commands (including script aliases). This is</span> -<span class="hljs-comment"># easy to do in the general case, but it probably requires some clever caching</span> -<span class="hljs-comment"># to avoid introducing a noticeable lag to every completion operation, due to</span> -<span class="hljs-comment"># the way command resolution works and the fact that discovering custom</span> -<span class="hljs-comment"># commands requires making slow calls to Composer</span></code></pre> + <div class="codeblock" language="zsh"> + <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#6A737D"># - @todo We don't complete custom commands (including script aliases). This is</span></span> +<span class="line"><span style="color:#6A737D"># easy to do in the general case, but it probably requires some clever caching</span></span> +<span class="line"><span style="color:#6A737D"># to avoid introducing a noticeable lag to every completion operation, due to</span></span> +<span class="line"><span style="color:#6A737D"># the way command resolution works and the fact that discovering custom</span></span> +<span class="line"><span style="color:#6A737D"># commands requires making slow calls to Composer</span></span></code></pre> + </div> </section> <section id="section--what-i-want-to-achive"> @@ -122,7 +123,9 @@ まずは、Zsh で補完関数を提供する場合のボイラープレートコードを書く。以下は <code>~/.zshrc</code> にすべて書く前提だが、<code>autoload</code> を設定するなどすれば別ファイルに分離できる (詳細な手順は割愛)。 </p> - <pre class="highlight" language="zsh"><code class="highlight">compdef _my_composer composer composer.phar</code></pre> + <div class="codeblock" language="zsh"> + <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#6F42C1">compdef</span><span style="color:#032F62"> _my_composer</span><span style="color:#032F62"> composer</span><span style="color:#032F62"> composer.phar</span></span></code></pre> + </div> <p> <code>compdef</code> は Zsh が用意している関数で、第一引数に補完関数の名前、第二引数以降に補完を適用するコマンド名を並べる。この場合は、<code>composer</code> コマンドや <code>composer.phar</code> コマンドに対して <code>_my_composer</code> を使って補完をおこなうよう定義している。 @@ -132,9 +135,11 @@ 次に <code>_my_composer</code> を定義する。基本的にはデフォルトの <code>composer</code> コマンドの補完関数 (つまり <code>_composer</code> 関数) を使い、それが何も返さなかった場合に限り、Zsh のファイル・ディレクトリ補完へフォールバックする。 </p> - <pre class="highlight" language="zsh"><code class="highlight"><span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">_my_composer</span></span>() { - _composer <span class="hljs-string">"<span class="hljs-variable">$@</span>"</span> || _files <span class="hljs-string">"<span class="hljs-variable">$@</span>"</span> -}</code></pre> + <div class="codeblock" language="zsh"> + <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#D73A49">function</span><span style="color:#6F42C1"> _my_composer</span><span style="color:#24292E">() {</span></span> +<span class="line"><span style="color:#6F42C1"> _composer</span><span style="color:#032F62"> "</span><span style="color:#005CC5">$@</span><span style="color:#032F62">"</span><span style="color:#D73A49"> ||</span><span style="color:#6F42C1"> _files</span><span style="color:#032F62"> "</span><span style="color:#005CC5">$@</span><span style="color:#032F62">"</span></span> +<span class="line"><span style="color:#24292E">}</span></span></code></pre> + </div> <p> <code>_composer</code> コマンドは何も補完候補がなかったとき非ゼロな exit status で終了するので、そうであったなら <code>_files</code> を呼び出す。<code>_files</code> は、Zsh がデフォルトで用意しているファイル・ディレクトリの補完をおこなう関数である。 |
