diff options
Diffstat (limited to 'services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands')
| -rw-r--r-- | services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html b/services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html index 065a11da..118c0d58 100644 --- a/services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html +++ b/services/nuldoc/public/blog/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands/index.html @@ -15,7 +15,7 @@ <meta name="Hatena::Bookmark" content="nocomment"> <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=81dfc0b483beda175e3e17562faac7c9"> + <link rel="stylesheet" href="/style.css?h=c3724e2d900f13528c82005e79a8ec23"> </head> <body class="single"> <header class="header"> @@ -116,12 +116,11 @@ このことは、先ほどリンクを載せた <code>_composer</code> 関数を定義しているファイルの冒頭にも書かれている。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #6e7781"># - @todo We don't complete custom commands (including script aliases). This is</span> -<span style="color: #6e7781"># easy to do in the general case, but it probably requires some clever caching</span> -<span style="color: #6e7781"># to avoid introducing a noticeable lag to every completion operation, due to</span> -<span style="color: #6e7781"># the way command resolution works and the fact that discovering custom</span> -<span style="color: #6e7781"># commands requires making slow calls to Composer</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #6e7781"># - @todo We don't complete custom commands (including script aliases). This is</span> +</div><div class="codeblock-line"><span style="color: #6e7781"># easy to do in the general case, but it probably requires some clever caching</span> +</div><div class="codeblock-line"><span style="color: #6e7781"># to avoid introducing a noticeable lag to every completion operation, due to</span> +</div><div class="codeblock-line"><span style="color: #6e7781"># the way command resolution works and the fact that discovering custom</span> +</div><div class="codeblock-line"><span style="color: #6e7781"># commands requires making slow calls to Composer</span></div></code></pre> </div> </section> <section id="section--what-i-want-to-achive"> @@ -139,8 +138,7 @@ まずは、Zsh で補完関数を提供する場合のボイラープレートコードを書く。以下は <code>~/.zshrc</code> にすべて書く前提だが、<code>autoload</code> を設定するなどすれば別ファイルに分離できる (詳細な手順は割愛)。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code>compdef _my_composer composer composer.phar -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line">compdef _my_composer composer composer.phar</div></code></pre> </div> <p> <code>compdef</code> は Zsh が用意している関数で、第一引数に補完関数の名前、第二引数以降に補完を適用するコマンド名を並べる。この場合は、<code>composer</code> コマンドや <code>composer.phar</code> コマンドに対して <code>_my_composer</code> を使って補完をおこなうよう定義している。 @@ -149,10 +147,9 @@ 次に <code>_my_composer</code> を定義する。基本的にはデフォルトの <code>composer</code> コマンドの補完関数 (つまり <code>_composer</code> 関数) を使い、それが何も返さなかった場合に限り、Zsh のファイル・ディレクトリ補完へフォールバックする。 </p> <div class="codeblock"> - <pre class="highlight" style="background-color:#f5f5f5"><code><span style="color: #cf222e">function </span>_my_composer<span style="color: #0550ae">()</span> <span style="color: #0550ae">{</span> - _composer <span style="color: #0a3069">"</span><span style="color: #0550ae">$@</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">||</span> _files <span style="color: #0a3069">"</span><span style="color: #0550ae">$@</span><span style="color: #0a3069">"</span> -<span style="color: #0550ae">}</span> -</code></pre> + <pre class="highlight" style="background-color:#f5f5f5"><code><div class="codeblock-line"><span style="color: #cf222e">function </span>_my_composer<span style="color: #0550ae">()</span> <span style="color: #0550ae">{</span> +</div><div class="codeblock-line"> _composer <span style="color: #0a3069">"</span><span style="color: #0550ae">$@</span><span style="color: #0a3069">"</span> <span style="color: #0550ae">||</span> _files <span style="color: #0a3069">"</span><span style="color: #0550ae">$@</span><span style="color: #0a3069">"</span> +</div><div class="codeblock-line"><span style="color: #0550ae">}</span></div></code></pre> </div> <p> <code>_composer</code> コマンドは何も補完候補がなかったとき非ゼロな exit status で終了するので、そうであったなら <code>_files</code> を呼び出す。<code>_files</code> は、Zsh がデフォルトで用意しているファイル・ディレクトリの補完をおこなう関数である。 |
