ConsultのREADME


- consult.elのバージョン2.0のREADME.orgの日本語訳です

- 元の文書: https://github.com/minad/consult/blob/main/README.org

- ライセンス: パッケージのライセンスと同じ、すなわちGPLv3.0ライセンスです

- - -

Table of Contents
=================

* [利用可能なコマンド](#利用可能なコマンド)
   * [仮想バッファー](#仮想バッファー)
   * [編集](#編集)
   * [レジスター](#レジスター)
   * [ナビゲーション](#ナビゲーション)
   * [検索](#検索)
   * [GrepとFind](#grepとfind)
   * [コンパイル](#コンパイル)
   * [ヒストリー](#ヒストリー)
   * [モード](#モード)
   * [Orgモード](#orgモード)
   * [ヘルプ](#ヘルプ)
   * [その他](#その他)
* [特別な機能](#特別な機能)
   * [ライブプレビュー](#ライブプレビュー)
   * [ナローイングとグルーピング](#ナローイングとグルーピング)
   * [非同期検索](#非同期検索)
   * [複数ソース](#複数ソース)
   * [Embarkとの統合](#embarkとの統合)
* [コンフィグ](#コンフィグ)
   * [use-packageの例](#use-packageの例)
   * [カスタム変数](#カスタム変数)
   * [プロジェクトのサポート](#プロジェクトのサポート)
   * [個々のコマンドの微調整](#個々のコマンドの微調整)
* [推奨パッケージ](#推奨パッケージ)
* [バグレポート](#バグレポート)
* [ハック](#ハック)
   * [非同期補完コマンドの作成](#非同期補完コマンドの作成)
   * [ライブプレビュー](#ライブプレビュー-1)
* [貢献してくれる人たちへ](#貢献してくれる人たちへ)
* [謝辞](#謝辞)

<!-- Created by https://github.com/ekalinin/github-markdown-toc -->

- - -

<!-- Consult provides search and navigation commands based on the Emacs completion function [completing-read](https://www.gnu.org/software/emacs/manual/html_node/elisp/Minibuffer-Completion.html). Completion allows you to quickly select an item from a list of candidates. Consult offers asynchronous and interactive `consult-grep` and `consult-ripgrep` commands, and the line-based search command `consult-line`. Furthermore Consult provides an advanced buffer switching command `consult-buffer` to switch between buffers, recently opened files, bookmarks and buffer-like candidates from other sources. Some of the Consult commands are enhanced versions of built-in Emacs commands. For example the command `consult-imenu` presents a flat list of the Imenu with [live preview](#live-previews), [grouping and narrowing](#narrowing-and-grouping). Please take a look at the [full list of commands](#available-commaション用のコマンドを提供する。補完(complete)を使えば候補(candidate)のリストから素早くアイテムを選択できる。Consultが提供するのは非同期かつ対話的なコマンドである`consult-grep`と`consult-ripgrep`、更に行に基づいた検索を行うコマンド`consult-line`だ。更にConsultはバッファー、最近オープンしたファイル、ブックマーク、その他ソース由良のバッファー的な候補間を切り替える高機能なバッファー切り替えコマンド`consult-buffer`を提供する。ConsultコマンドのいくつかはビルトインのEmacsコマンドの改良版だ。たとえば`consult-imenu`は[live preview](#live-previews)と[grouping and narrowing](#narrowing-and-grouping)を使ってImenuのフラットなリストを提供するコマンドだ。[full list of commands](#available-commands)を参考にして欲しい。

<!-- Consult is fully compatible with completion systems centered around the standard Emacs `completing-read` API, notably the default completion system, [Vertico](https://github.com/minad/vertico), [Mct](https://github.com/protesilaos/mct), and [Icomplete](https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html). -->

Emacsの標準APIである`completing-read`を中心に置いた補完システム、とりわけデフォルトの補完システム、[Vertico](https://github.com/minad/vertico)、[Mct](https://github.com/protesilaos/mct)、[Icomplete](https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html)と完全な互換性がある。

<!-- This package keeps the completion system specifics to a minimum. The ability of the Consult commands to work well with arbitrary completion systems is one of the main advantages of the package. Consult fits well into existing setups and it helps you to create a full completion environment out of small and independent components. -->

このパッケージでは補完システムを具体的に最小となるよう維持している。任意の補完システムと良好に動作するというConsultコマンドの能力は、このパッケージの主なアドバンテージのうちの1つだ。Consultは従来のセットアップとの相性もよく、小規模で独立したコンポーネントから完全な補完環境を構築するのに役に立つだろう。

<!-- You can combine the complementary packages [Marginalia](https://github.com/minad/marginalia/), [Embark](https://github.com/oantolin/embark/) and [Orderless](https://github.com/oantolin/orderless) with Consult. Marginalia enriches the completion display with annotations, e.g., documentation strings or file information. The versatile Embark package provides local actions, comparable to a context menu. These actions operate on the selected candidate in the minibuffer or at point in normal buffers. For example, when selecting from a list of files, Embark offers an action to delete the file. Additionally Embark offers a facility to collect completion candidates in a collect buffer. The section [Embark integration](#embark-integration) documents in detail how Consult and Embark work together. -->

Consultを補足するパッケージとして[Marginalia](https://github.com/minad/marginalia/)、[Embark](https://github.com/oantolin/embark/)、[Orderless](https://github.com/oantolin/orderless)を組み合わせることができる。Marginaliaは注釈(ドキュメント文字列やファイル情報など)によって補完の表示を強化する。コンテキストメニューに匹敵するローカルアクションを提供するのは、多目的用のEmbarkだ。これらのアクションはミニバッファーで選択された候補、あるいは通常のバッファーのポイント位置にたいして処理を行う。たとえばファイルのリストから選択したとき、Embarkはファイルを削除するアクションを提示する。更にEmbarkは収集バッファーで補完候補を収集する機能を提供している。セクション[Embarkとの統合](#embarkとの統合)では、ConsultとEmbarkを協調して機能させる方法について詳細に述べる。

# 利用可能なコマンド

<!-- Most Consult commands follow the meaningful naming scheme `consult-<thing>`. Many commands implement a little known but convenient Emacs feature called "future history", which guesses what input the user wants. At a command prompt type `M-n` and typically Consult will insert the symbol or thing at point into the input. -->

Consultのほとんどのコマンドは意味的に`consult-<thing>`という命名スキームにしたがう。あまり知名度はないものの役に立つEmacsの機能に"futureヒストリー(future history: 未来の履歴)"と呼ばれる機能がある。これは次にユーザーが何を入力したいか推測を行う機能であり、Consultの多くのコマンドがこれを実装している。通常はコマンドプロンプトで`M-n`とタイプすると、ポイント位置にあるシンボル等を入力に挿入する。

<!-- **TIP:** If you have [Marginalia](https://github.com/minad/marginalia) annotators activated, type `M-x ^consult` to see all Consult commands with their abbreviated description. Alternatively, type `C-h a ^consult` to get an overview of all Consult variables and functions with their descriptions. -->

**ヒント** 注釈機能(annotator)の[Marginalia](https://github.com/minad/marginalia)をアクティブにしていれば、`M-x ^consult`とタイプすることによって短い説明とともにConsultのすべてのコマンドを確認できる筈だ。かわりに`C-h a ^consult`とタイプすればConsultのすべての変数と関数の概要を得ることができる。

## 仮想バッファー

<!-- -   `consult-buffer`: Enhanced version of `switch-to-buffer` with support for virtual -->
<!--     buffers. Supports live preview of buffers and narrowing to the virtual buffer -->
<!--     types. You can type `f SPC` in order to narrow to recent files. Press `SPC` to -->
<!--     show ephemeral buffers. Supported narrowing keys: -->
<!--     -   b Buffers -->
<!--     -   SPC Hidden buffers -->
<!--     -   \* Modified buffers -->
<!--     -   f Files (Requires `recentf-mode`) -->
<!--     -   r File registers -->
<!--     -   m Bookmarks -->
<!--     -   p Project -->
<!--     -   B Project buffers -->
<!--     -   F Project files -->
<!--     -   R Project roots -->
<!--     -   Custom [other sources](#multiple-sources) configured in `consult-buffer-sources`. -->
<!-- -   `consult-buffer-other-window`, `consult-buffer-other-frame`, -->
<!--     `consult-buffer-other-tab`: Variants of `consult-buffer`. -->
<!-- -   `consult-project-buffer`: Variant of `consult-buffer` restricted to buffers and -->
<!--     recent files of the current project. You can add custom sources to -->
<!--     `consult-project-buffer-sources`. The command may prompt you for a project if -->
<!--     you invoke it from outside a project. -->
<!-- -   `consult-bookmark`: Select or create bookmark. To select bookmarks you might use the -->
<!--     `consult-buffer` as an alternative, which can include a bookmark virtual buffer -->
<!--     source. Note that `consult-bookmark` supports preview of bookmarks and -->
<!--     narrowing. -->
<!-- -   `consult-recent-file`: Select from recent files with preview. -->
<!--     You might prefer the powerful `consult-buffer` instead, which can include -->
<!--     recent files as a virtual buffer source. The `recentf-mode` enables tracking of -->
<!--     recent files. -->

-   `consult-buffer`: `switch-to-buffer`の強化バージョン、仮想バッファー(virtual buffer)をサポートしている。    バッファーのライブプレビュー、仮想バッファータイプへのナローイング(narrowing)もサポートしている。`f SPC`とタイプすれば最近使ったファイルにナローイングすることができる。`SPC`を押下すれば一時的なバッファーを表示する。サポートされているナローイング用のキーは以下の通り:
    -   `b` バッファー

    -   `SPC` 非表示のバッファー

    -   `*` 変更されているバッファー

    -   `f` ファイル(`recentf-mode`が必要)

    -   `r` ファイルレジスター

    -   `m` ブックマーク

    -   `p` プロジェクト

    -   `B` プロジェクトバッファー

    -   `F` プロジェクトファイル

    -   `R` プロジェクトのルート

-   `Custom` `consult-buffer-sources`で構成した[別のソース](#複数ソース)

-   `consult-buffer-other-window`、`consult-buffer-other-frame`、`consult-buffer-other-tab`: `consult-buffer`の変種

-   `consult-project-buffer`: カレントプロジェクトのバッファーおよびファイルに制限された`consult-buffer`の変種。`consult-project-buffer-sources`にカスタムソースを追加できる。プロジェクト外部から呼び出されるとプロジェクトの入力を求めるかもしれない

-   `consult-bookmark`: ブックマークの選択または作成。あなたはブックマーク選択の際には仮想バッファーのソースをブックマークできる`consult-buffer`をかわりに使っているかもしれない。`consult-bookmark`の方はブックマークのプレビューとナローイングが可能なことに注意

-   `consult-recent-file`: プレビュー付きで最近のファイルから選択。最近のファイルを仮想バッファーソースを含めることができる、強力な`consult-buffer`の方がお気に召すかもしれない。`recentf-mode`は最近のファイルの追跡を有効にする。

## 編集

<!-- -   `consult-yank-from-kill-ring`: Enhanced version of `yank` to select an item -->
<!--     from the `kill-ring`. The selected text previewed as overlay in the buffer. -->
<!-- -   `consult-yank-pop`: Enhanced version of `yank-pop` with DWIM-behavior, which -->
<!--     either replaces the last `yank` by cycling through the `kill-ring`, or if there -->
<!--     has not been a last `yank` consults the `kill-ring`. The selected text previewed -->
<!--     as overlay in the buffer. -->
<!-- -   `consult-yank-replace`: Like `consult-yank-pop`, but always replaces the last -->
<!--     `yank` with an item from the `kill-ring`. -->
<!-- -   `consult-kmacro`: Select macro from the macro ring and execute it. -->

-   `consult-yank-from-kill-ring`: `kill-ring`からアイテムを選択する`yank`の強化版。選択されたテキストはオーバーレイによってバッファーにプレビューされる。

-   `consult-yank-pop`: `yank-pop`は`kill-ring`を循環させて最後の`yank`を置き換えるか、あるいは直前に`yank`されていなければ`kill-ring`を照会するが、こちらはDWIMな挙動の強化版だ(訳注: DWIMは"Do what I mean."の略、意味は"私の意図することを行え")選択されたテキストはオーバーレイとしてバッファーでプレビューされる。

-   `consult-yank-replace`: `consult-yank-pop`と似ているが、こちらは常に`kill-ring`のアイテムで最後の`yank`を置き換える。

-   `consult-kmacro`: マクロリングからマクロを選択して実行する。

## レジスター

<!-- -   `consult-register`: Select from list of registers. The command -->
<!--     supports narrowing to register types and preview of marker positions. This -->
<!--     command is useful to search the register contents. For quick access use the -->
<!--     commands `consult-register-load`, `consult-register-store` or the built-in Emacs -->
<!--     register commands. -->
<!-- -   `consult-register-format`: Set `register-preview-function` to this function for -->
<!--     an enhanced register formatting. Used automatically by `consult-register-window`. -->
<!-- -   `consult-register-window`: Replace `register-preview` with this function for a -->
<!--     better register window. See the [example configuration](#use-package-example). -->
<!-- -   `consult-register-load`: Utility command to quickly load a register. -->
<!--     The command either jumps to the register value or inserts it. -->
<!-- -   `consult-register-store`: Improved UI to store registers depending on the current -->
<!--     context with an action menu. With an active region, store/append/prepend the -->
<!--     contents, optionally deleting the region when a prefix argument is given. -->
<!--     With a numeric prefix argument, store/add the number. Otherwise store point, -->
<!--     frameset, window or kmacro. Usage examples: -->
<!--     -   `M-' x`: If no region is active, store point in register `x`. -->
<!--         If a region is active, store the region in register `x`. -->
<!--     -   `M-' M-w x`: Store window configuration in register `x`. -->
<!--     -   `C-u 100 M-' x`: Store number in register `x`. -->

-   `consult-register`: レジスターのリストから選択する。レジスターのタイプによるナローイング、それにマーカー位置のプレビューをサポートしている。レジスターコンテンツの検索に役に立つコマンド。素早くアクセスするコマンドなら`consult-register-load`と`consult-register-store`、あるいはEmacsのビルトインのレジスターコマンドを使うことができる。

- `consult-register-format`: 強化されたレジスターフォーマットを得るには、この関数を`register-preview-function`にセットすればよいだろう。`consult-register-window`によって自動的に使用されている。

-   `consult-register-window`: レジスターウィンドウを改善したければ、この関数で`register-preview`を置き換えよう。[コンフィグの例](#use-packageの例)を参照のこと。

-   `consult-register-load`: 素早くレジスターをロードするためのユーティリティコマンドだ。このコマンドはレジスターにジャンプするか、レジスターの値の挿入を行う。

-   `consult-register-store`: アクションメニューのカレントコンテキストに応じてレジスターを格納する改良されたUI。リージョンがアクティブだとコンテンツのstore(格納)/append(後に追加)/prepend(前に追加)、オプションでプレフィックス引数を与えるとリージョンを削除する。数プレフィックス引数のときは措定した個数分のstore(格納)/add(追加)を行う。それ以外にもポイント、フレームセット、ウィンドウやkmacro(キーボードマクロ)を格納する。以下は使い方の例だ。

    -   `M-' x`: リージョンがアクティブでなければポイントをレジスターに`x`格納。
    リージョンがアクティブならリージョンをレジスター`x`に格納。

    -   `M-' M-w x`: ウィンドウ構成をレジスター`x`に格納。

    -   `C-u 100 M-' x`: 数値をレジスター`x`に格納。

## ナビゲーション

<!-- -   `consult-goto-line`: Jump to line number enhanced with live preview. This is a -->
<!--     drop-in replacement for `goto-line`. Enter a line number to jump to the first -->
<!--     column of the given line. Alternatively enter `line:column` in order to jump to -->
<!--     a specific column. -->
<!-- -   `consult-mark`: Jump to a marker in the `mark-ring`. Supports live -->
<!--     preview and recursive editing. -->
<!-- -   `consult-global-mark`: Jump to a marker in the `global-mark-ring`. -->
<!--     Supports live preview and recursive editing. -->
<!-- -   `consult-outline`: Jump to a heading of the outline. Supports narrowing -->
<!--     to a heading level, live preview and recursive editing. -->
<!-- -   `consult-imenu`: Jump to imenu item in the current buffer. Supports -->
<!--     live preview, recursive editing and narrowing. -->
<!-- -   `consult-imenu-multi`: Jump to imenu item in project buffers, with -->
<!--     the same major mode as the current buffer. Supports live preview, -->
<!--     recursive editing and narrowing. This feature has been inspired by -->
<!--     [imenu-anywhere](https://github.com/vspinu/imenu-anywhere). -->

-   `consult-goto-line`: ライブプレビューによって改良された行番号ジャンプ。`goto-line`のちょっとした代替えだ。行番号を入力すれば与えられた行の1列目にジャンプする。`line:column`のように入力すれば、かわりに指定した行の特定の列にジャンプする。

-   `consult-mark`: `mark-ring`内のマーカーへジャンプ。ライブプレビューと再帰編集(recursive edit)をサポートしている。

-   `consult-global-mark`: `global-mark-ring`内のマーカーへジャンプ。ライブプレビューと再帰編集(recursive edit)をサポート。

-   `consult-outline`: アウトラインのヘッダにジャンプ。ナローイング、ヘッダレベル、ライブプレビュー、それに再帰編集をサポートしている。

-   `consult-imenu`: カレントバッファーのimenuアイテムにジャンプ。ライブプレビュー、再帰編集、ナローイングをサポートしている。

-   `consult-imenu-multi`: プロジェクトバッファーのimenuアイテムにカレントバッファーと同じメジャーモードでジャンプする。ライブプレビュー、再帰編集、ナローイングをサポートしている。この機能は[imenu-anywhere](https://github.com/vspinu/imenu-anywhere)から発想を得ている。

## 検索

<!-- -   `consult-line`: Enter search string and select from matching lines. -->
<!--     Supports live preview and recursive editing. The symbol at point and the -->
<!--     recent Isearch string are added to the "future history" and can be accessed -->
<!--     by pressing `M-n`. When `consult-line` is bound to the `isearch-mode-map` and -->
<!--     is invoked during a running Isearch, it will use the current Isearch string. -->
<!-- -   `consult-line-multi`: Search dynamically across multiple buffers. By default -->
<!--     search across project buffers. If invoked with a prefix argument search across -->
<!--     all buffers. The candidates are computed on demand based on the input. The -->
<!--     command behaves like `consult-grep`, but operates on buffers instead of files. -->
<!-- -   `consult-keep-lines`: Replacement for `keep/flush-lines` which uses the current -->
<!--     completion style for filtering the buffer. The function updates the buffer -->
<!--     while typing. In particular `consult-keep-lines` can narrow down an exported -->
<!--     Embark collect buffer further, relying on the same completion filtering as -->
<!--     `completing-read`. If the input begins with the negation operator, i.e., `! SPC`, -->
<!--     the filter matches the complement. If a region is active, the region restricts -->
<!--     the filtering. -->
<!-- -   `consult-focus-lines`: Temporarily hide lines by filtering them using the -->
<!--     current completion style. Call with `C-u` prefix argument in order to show the -->
<!--     hidden lines again. If the input begins with the negation operator, i.e., `! -->
<!--       SPC`, the filter matches the complement. In contrast to `consult-keep-lines` this -->
<!--     function does not edit the buffer. If a region is active, the region restricts -->
<!--     the filtering. -->

-   `consult-line`: 検索文字列を入力するとマッチした行を選択する。ライブプレビューと再帰編集をサポートしている。ポイント位置のシンボルおよび最近のIsearch文字列が"未来のヒストリー(future history)"に追加されるので、`M-n`の押下でアクセス可能だ。`consult-line`が`isearch-mode-map`にバインドされている間にIsearchを実行すると、カレントのIsearch文字列文字列が使用される。

-   `consult-line-multi`: 複数バッファーを動的に横断して検索を行う。デフォルトではプロジェクトのバッファーを横断して検索する。プレフィックス引数とともに呼び出すとすべてのバッファーに渡って検索を行う。候補は入力に応じてオンデマンドで算出される。`consult-grep`のように振る舞うが、ファイルではなくバッファーを処理するコマンドだ。

-   `consult-keep-lines`: バッファーのフィルタリングにカレントの補完スタイルを使用する`keep/flush-lines`の置き換えだ。この関数はタイプ中にバッファーを更新する。特に`consult-keep-lines`はEmbarkによって収集、エクスポートされたバッファーを更に絞り込むことができる(`completing-read`と同じ補完フィルタリングであることに依存している)。`! SPC`のように入力が否定演算子で始まる場合には、補集合となるようなバッファーがマッチする。リージョンがアクティブなら、フィルタリングはリージョンに制限される。

-   `consult-focus-lines`: カレントの補完スタイルを用いたフィルタリングにより、行を一時的に非表示にする。非表示になった行を表示するには、プレフィックス引数`C-u`と呼び出せばよい。`! SPC`のように入力が否定演算子で始まる場合には、補集合となるようなバッファーがマッチする。`consult-keep-lines`とは対照的に、この関数はバッファーを編集しない。リージョンがアクティブなら、フィルタリングはリージョンに制限される。

## GrepとFind

<!-- -   `consult-grep`, `consult-ripgrep`, `consult-git-grep`: Search for regular expression -->
<!--     in files. Consult invokes Grep asynchronously, while you enter the search -->
<!--     term. After at least `consult-async-min-input` characters, the search gets -->
<!--     started. Consult splits the input string into two parts, if the first -->
<!--     character is a punctuation character, like `#`. For example -->
<!--     `#regexps#filter-string`, is split at the second `#`. The string `regexps` is passed -->
<!--     to Grep. Note that Consult transforms Emacs regular expressions to expressions -->
<!--     understand by the search program. Always use Emacs regular expressions at the -->
<!--     prompt. If you enter multiple regular expressions separated by space only -->
<!--     lines matching all regular expressions are shown. In order to match space -->
<!--     literally, escape the space with a backslash. The `filter-string` is passed to -->
<!--     the *fast* Emacs filtering to further narrow down the list of matches. This is -->
<!--     particularly useful if you are using an advanced completion style like -->
<!--     orderless. `consult-grep` supports preview. `consult-grep` searches the current -->
<!--     [project directory](#project-support) if a project is found. Otherwise the `default-directory` is -->
<!--     searched. If `consult-grep` is invoked with prefix argument `C-u M-s g`, you can -->
<!--     specify one or more comma-separated files and directories manually. If invoked -->
<!--     with two prefix arguments `C-u C-u M-s g`, you can first select a project if you -->
<!--     are not yet inside a project. -->
<!-- -   `consult-find`, `consult-fd`, `consult-locate`: Find file by matching the path -->
<!--     against a regexp. Like for `consult-grep`, either the project root or the -->
<!--     current directory is the root directory for the search. The input string is -->
<!--     treated similarly to `consult-grep`, where the first part is passed to find, and -->
<!--     the second part is used for Emacs filtering. Prefix arguments to `consult-find` -->
<!--     work just like those for the consult grep commands. -->

-   `consult-grep`, `consult-ripgrep`, `consult-git-grep`: ファイルの中から正規表現を検索する。Consultは検索用語の入力中に非同期でGrepを呼び出す。少なくとも`consult-async-min-input`の文字数を入力した後に検索が開始される。Consultは最初の文字が`#`のような句読点文字(punctuation character)の場合には、入力文字列を2つの部分に分割する。たとえば`#regexps#filter-string`だと2つ目の`#`で分割されるのだ。Grepには文字列 `regexps`が渡される。ConsultがEmacsの正規表現から検索プログラムが理解できる式への変換を行っていることに注意して欲しい。プロンプトでは常にEmacsの正規表現が使えるのだ。スペースで区切って複数の正規表現を入力した場合には、正規表現すべてにマッチする行だけが表示される。リテラル(literal: 文字通り)のスペースをマッチさせたければ、バックスラッシュでスペースをエスケープすること。`filter-string`はEmacsの*高速*なフィルタリングに渡されて、マッチしたリストを更に絞り込むために使用される。これはorderlessのような高度な補完スタイルを使っていれば、特に役に立つだろう。`consult-grep`はプレビューをサポートしている。`consult-grep`はプロジェクトが見つかった場合には、カレントの[プロジェクトのディレクトリー](#プロジェクトのサポート)を検索する。見つからなかった場合には、`default-directory`が検索される。`C-u M-s g`のようにプレフィックス引数とともに`consult-grep`を呼び出した場合には、カンマ区切りでファイルとディレクトリーを手入力で指定できる。`C-u C-u M-s g`のようにプレフィックス引数を指定して呼び出した場合には、まだプロジェクト内部にいなくても最初にプロジェクトの選択ができる。

-   `consult-find`、`consult-fd`、`consult-locate`: regexpにたいしてパスをマッチしてファイルを検索する。`consult-grep`と同じようにプロジェクトのルートかカレントディレクトリーが検索のルートディレクトリーとなる。入力文字列は`consult-grep`の場合と同じように1つ目の部分が検索、、2つ目の部分はEmacsのフィルタリングに渡されることになる。`consult-find`へのプレフィックス引数はConsultのgrepコマンドと同じように機能する。

## コンパイル

<!-- -   `consult-compile-error`: Jump to a compilation error. Supports live preview -->
<!--     narrowing and recursive editing. -->
<!-- -   `consult-flymake`: Jump to Flymake diagnostic. Supports live preview and -->
<!--     recursive editing. The command supports narrowing. Press `e SPC`, `w SPC`, `n SPC` -->
<!--     to only show errors, warnings and notes respectively. -->
<!-- -   `consult-xref`: Integration with xref. This function can be set as -->
<!--     `xref-show-xrefs-function` and `xref-show-definitions-function`. -->

-   `consult-compile-error`: コンパイルエラーにジャンプする。ライブプレビュー、ナローイング、再帰編集をサポートしている。

-   `consult-flymake`: Flymakeのdiagnostic(診断)にジャンプする。ライブプレビューと再帰編集をサポート、ナローイングもこのコマンドはサポートしている。表示をerrors(エラー)、warnings(警告)、notes(ノート)だけにするにはそれぞれ`e SPC`、`w SPC`、`n SPC`を押下すればよい。

-   `consult-xref`: xrefとの統合だ。この関数は`xref-show-xrefs-function`および`xref-show-definitions-function`としてセットすることができる。

## ヒストリー

<!-- -   `consult-complex-command`: Select a command from the -->
<!--     `command-history`. This command is a `completing-read` version of -->
<!--     `repeat-complex-command` and is also a replacement for the `command-history` -->
<!--     command from chistory.el. -->
<!-- -   `consult-history`: Insert a string from the current buffer history, for example -->
<!--     the Eshell or Comint history. You can also invoke this command from the -->
<!--     minibuffer. In that case `consult-history` uses the history stored in the -->
<!--     `minibuffer-history-variable`. If you prefer `completion-at-point`, take a look at -->
<!--     `cape-history` from the [Cape](https://github.com/minad/cape) package. -->
<!-- -   `consult-isearch-history`: During an Isearch session, this command picks a -->
<!--     search string from history and continues the search with the newly selected -->
<!--     string. Outside of Isearch, the command allows you to pick a string from the -->
<!--     history and starts a new Isearch. `consult-isearch-history` acts as a drop-in -->
<!--     replacement for `isearch-edit-string`. -->

-   `consult-complex-command`: `command-history`からコマンドを選択する。このコマンドは`completing-read`版の`repeat-complex-command`であるとともに、"chistory.el"の`command-history`コマンドの置き換えでもある。

-   `consult-history`: カレントバッファーのヒストリー、たとえばEshellやComintから文字列を挿入する。このコマンドはミニバッファーからも呼び出せる。そのような場合には`consult-history`は`minibuffer-history-variable`に格納されているヒストリーを使用する。`completion-at-point`,が気に入っているようなら、[Cape](https://github.com/minad/cape)パッケージの`cape-history`を調べてみたらよいだろう。

-   `consult-isearch-history`: このコマンドはIsearchのセッション中にはヒストリーから検索文字列を物色して、新たに選択された文字列での検索を継続する。Isearchの外部にいる場合にはあなたがヒストリーから文字列を選んで、新たなIsearchを開始することができる。`consult-isearch-history`は`isearch-edit-string`のちょっとした置き換えとして機能するだろう。

## モード

<!-- -   `consult-minor-mode-menu`: Enable/disable minor mode. Supports -->
<!--     narrowing to on/off/local/global modes by pressing `i/o/l/g SPC` -->
<!--     respectively. -->
<!-- -   `consult-mode-command`: Run a command from the currently active minor or major -->
<!--     modes. Supports narrowing to local-minor/global-minor/major mode via the keys -->
<!--     `l/g/m`. -->


-   `consult-minor-mode-menu`: マイナーモードを有効あるいは無効にする。ナローイングへのサポートをローカルまたはグローバルに、オンあるいはオフにするにはそれぞれ`l/g/i/o SPC`ｔ押下すればよい。

-   `consult-mode-command`: 現在アクティブなメジャーモードやマイナーモードからコマンドを実行する。`l/g/m`というキーを通じたローカルのマイナーモード、グローバルなマイナーモード、そしてメジャーモードのナローイングをサポートしている。

## Orgモード

<!-- -   `consult-org-heading`: Variant of `consult-imenu` or `consult-outline` for Org -->
<!--     buffers. The headline and its ancestors headlines are separated by slashes. -->
<!--     Supports narrowing by heading level, priority and TODO keyword, as well as live -->
<!--     preview and recursive editing. -->
<!-- -   `consult-org-agenda`: Jump to an Org agenda heading. Supports narrowing by -->
<!--     heading level, priority and TODO keyword, as well as live preview and -->
<!--     recursive editing. -->

-   `consult-org-heading`: `consult-imenu`や`consult-outline`のOrgバッファー用の変種だ。ヘッドラインとその祖先となるヘッドラインの間の区切りはスラッシュ。ヘッダレベル、priority(優先度)とTODOでのナローイング、それにライブプレビューと再帰編集をサポートしている。

-   `consult-org-agenda`: Orgのagendaヘッダにジャンプする。ヘッダレベル、priorityとTODOでのナローイング、それにライブプレビューと再帰編集をサポートしている。

## ヘルプ

<!-- -   `consult-man`: Find Unix man page, via Unix `apropos` or `man -k`. `consult-man` opens -->
<!--     the selected man page using the Emacs `man` command. Supports live preview of -->
<!--     the theme while scrolling through the candidates. -->
<!-- -   `consult-info`: Full text search through info pages. If the command is invoked -->
<!--     from within an `*info*` buffer, it will search through the current manual. You -->
<!--     may want to create your own commands which search through a predefined set of -->
<!--     info pages, for example: -->

-   `consult-man`: Unixに`apropos`と`man -k`を通じてUnixのmanページを検索する。`consult-man`はEmacsの`man`コマンドを使用して選択されたmanページをオープンしている。候補スクロール中のライブプレビューをサポートしている。

-   `consult-info`: infoページを通じて全文検索(full text search)を行う。`*info*`バッファーでこのコマンドを呼び出すと、カレントのマニュアルを検索する。infoページを事前に定義して、そこから検索を行うようなコマンドを独自に作成したい場合には以下のような例ではどうだろう:

```lisp
    (defun consult-info-emacs ()
      "Emacsのinfoページを検索"
      (interactive)
      (consult-info "emacs" "efaq" "elisp" "cl" "compat"))
    
    (defun consult-info-org ()
      "Orgのinfoページを検索"
      (interactive)
      (consult-info "org"))
    
    (defun consult-info-completion ()
      "補完のinfoページを検索"
      (interactive)
      (consult-info "vertico" "consult" "marginalia" "orderless" "embark"
                    "corfu" "cape" "tempel"))
```

## その他

<!-- -   `consult-theme`: Select a theme and disable all currently enabled themes. -->
<!--     Supports live preview of the theme while scrolling through the candidates. -->
<!-- -   `consult-preview-at-point` and `consult-preview-at-point-mode`: Command and minor -->
<!--     mode which previews the candidate at point in the `*Completions*` buffer. This -->
<!--     mode is relevant if you use [Mct](https://git.sr.ht/~protesilaos/mct) or the default `*Completions*` UI. -->
<!-- -   `consult-completion-in-region`: In case you don't use [Corfu](https://github.com/minad/corfu) as your in-buffer -->
<!--     completion UI, this function can be set as `completion-in-region-function`. Then -->
<!--     your minibuffer completion UI (e.g., Vertico or Icomplete) will be used for -->
<!--     `completion-at-point`. -->
    
<!--         ;; Use `consult-completion-in-region' if Vertico is enabled. -->
<!--         ;; Otherwise use the default `completion--in-region' function. -->
<!--         (setq completion-in-region-function -->
<!--               (lambda (&rest args) -->
<!--                 (apply (if vertico-mode -->
<!--                            #'consult-completion-in-region -->
<!--                          #'completion--in-region) -->
<!--                        args))) -->
    
<!--     Instead of `consult-completion-in-region`, you may prefer to see the completions -->
<!--     directly in the buffer as a small popup. In that case, I recommend the [Corfu](https://github.com/minad/corfu) -->
<!--     package. There is a technical limitation of `consult-completion-in-region` in -->
<!--     combination with the Lsp modes. The Lsp server relies on the input at point, -->
<!--     in order to generate refined candidate strings. Since the completion is -->
<!--     transferred from the original buffer to the minibuffer, the server does not -->
<!--     receive the updated input. In contrast, in-buffer Lsp completion for example -->
<!--     via Corfu works properly since the completion takes place directly in the -->
<!--     original buffer. -->

-   `consult-theme`: テーマを選択して、それ以外の有効なすべてのテーマを無効にする。テーマ候補のスクロール中のライブプレビューをサポートしている。

-   `consult-preview-at-point`および`consult-preview-at-point-mode`: `*Completions*`バッファーのポイント位置の候補をプレビューするコマンドおよびマイナーモード。このモードは[Mct](https://git.sr.ht/~protesilaos/mct)や`*Completions*`のデフォルトUIを使っている場合には関係あるだろう。

-   `consult-completion-in-region`: バッファー内での補完UIとして[Corfu](https://github.com/minad/corfu)を使っていなければ、`completion-in-region-function`としてこの関数をセットできる。    その場合にはあなたのミニバッファー補完が`completion-at-point`に使用されることになる。

```lisp
        ;; Verticoが有効なら`consult-completion-in-region'
        ;; それ以外はデフォルトの`completion--in-region'関数を使う
        (setq completion-in-region-function
              (lambda (&rest args)
                (apply (if vertico-mode
                           #'consult-completion-in-region
                         #'completion--in-region)
                       args)))
```

`consult-completion-in-region`ではなく小さいポップアップとしてバッファー内で直接補完を確認できる方が好みに合うかもしれない。そのような場合には[Corfu](https://github.com/minad/corfu)パッケージをお勧めする。 `consult-completion-in-region`にはLspモードと組み合わせて使う際の技術的な制限が存在する。Lspサーバーは洗練された候補文字列を生成するためにポイント位置の入力に依存している。補完は元のバッファーからミニバッファーに送信されてしまうので、サーバーが更新された入力を受信しないのだ。それに比べてたとえばCorfuを通じたバッファー内での補完であれば、元のバッファーで補完が直接行われるので正しく機能するだろう。

# 特別な機能

<!-- Consult enhances `completing-read` with live previews of candidates, additional -->
<!-- narrowing capabilities to candidate groups and asynchronously generated -->
<!-- candidate lists. The internal `consult--read` function, which is used by most -->
<!-- Consult commands, is a thin wrapper around `completing-read` and provides the -->
<!-- special functionality. In order to support multiple candidate sources there -->
<!-- exists the high-level function `consult--multi`. The architecture of Consult -->
<!-- allows it to work with different completion systems in the backend, while still -->
<!-- offering advanced features. -->

候補のライブプレビュー、更に候補をグループ化してナローイング(絞り込み)を行う機能や候補リストの非同期生成によって`completing-read`を強化するのがConsultだ。ほとんどのConsultコマンドが使用する内部関数の`consult--read`は、`completing-read`の薄いラッパーであり、特別な機能を提供する。複数の補完ソースをサポートするために、より高レベルな関数である`consult--multi`が存在する。高度な機能を失うことなく異なる補完機能のバックエンドとして機能できるのはConsultのアーキテクチャによるものだ。

## ライブプレビュー

<!-- Some Consult commands support live previews. For example when you scroll through the items of `consult-line`, the buffer will scroll to the corresponding position. It is possible to jump back and forth between the minibuffer and the buffer to perform recursive editing while the search is ongoing. -->

一部のConsultコマンドはライブプレビューをサポートしている。たとえば`consult-line`のアイテムをスクロール中には、対応する位置へとバッファーがスクロールするのだ。検索を行っている最中にミニバッファーとバッファーの間をジャンプして行き来して、再帰編集を行うことも可能である。

<!-- Consult enables previews by default. You can disable them by adjusting the `consult-preview-key` variable. Furthermore it is possible to specify keybindings which trigger the preview manually as shown in the [example configuration](#use-package-example). The default setting of `consult-preview-key` is `any` which means that Consult triggers the preview *immediately* on any key press when the selected candidate changes. You can configure each command individually with its own `:preview-key`. The following settings are possible: -->

Consultのプレビューはデフォルトで有効になっている。`consult-preview-key`変数を調節して無効にもできる。[コンフィグの例](#use-packageの例)でも触れるが、キーバインディングを指定して手動でプレビューをトリガーすることも可能だ。`consult-preview-key`のデフォルトのセッティング`any`は、選択された候補が変更された際に何かキーを押下すると、Consultが*即座*にプレビューをトリガーすることを意味する。コマンド自体の`:preview-key`により、個別にコマンドの設定を行うことができる。セットできる設定は以下の通り:

-   `'any`: 自動で即時

-   `(list :debounce 0.5 'any)`: 自動で遅延あり

-   `"M-."`: 手動で即時

-   `(list :debounce 0.5 "M-.")`: 手動で遅延あり

-   `nil`: 無効化


<!-- A safe recommendation is to leave automatic immediate previews enabled in general and disable the automatic preview only for commands where the preview may be expensive due to file loading. Internally, Consult uses the value of `this-command` to determine the `:preview-key` customized. This means that if you wrap a `consult-*` command within your own function or command, you will also need to add the name of *your custom command* to the `consult-customize` call in order for it to be considered. -->

通常は自動かつ即時のままにしておいて、ファイルのロードによりプレビュー処理が高価だと思われるコマンドでのみ無効にするのが安全だしお勧めだ。内部的にはConsultが`this-command`の値を用いて`:preview-key`がカスタマイズされているかどうかを判断している。これはあなたが自作の関数やコマンドで`consult-*`コマンドをラップした場合には、*あなたのカスタムコマンド*が考慮されるようにその関数の名前を`consult-customize`呼び出しにも追加する必要があるという意味だ。

```lisp
    (consult-customize
     consult-ripgrep consult-git-grep consult-grep consult-man
     consult-bookmark consult-recent-file consult-xref
     consult--source-bookmark consult--source-file-register
     consult--source-recent-file consult--source-project-recent-file
     ;; my/command-wrapping-consult    ;; my/command内部では自動プレビューを無効にする
     :preview-key '(:debounce 0.4 any) ;; Option 1: 遅延プレビュー
     ;; :preview-key "M-.")            ;; Option 2: 手動プレビュー
```

<!-- In this case one may wonder what the difference is between using an Embark -->
<!-- action on the current candidate in comparison to a manually triggered preview. -->
<!-- The main difference is that the files opened by manual preview are closed again -->
<!-- after the completion session. During preview some functionality is disabled to -->
<!-- improve the performance, see for example the customization variables -->
<!-- `consult-preview-variables` and `consult-preview-allowed-hooks`. Only hooks listed -->
<!-- in `consult-preview-allowed-hooks` are executed. This variable applies to -->
<!-- `find-file-hook`, `change-major-mode-hook` and mode hooks, e.g., `prog-mode-hook`. In -->
<!-- order to enable additional font locking during preview, add the corresponding -->
<!-- hooks to the allow list. The following code demonstrates this for [org-modern](https://github.com/minad/org-modern) and -->
<!-- [hl-todo](https://github.com/tarsius/hl-todo). -->

この場合、カレント候補にEmbarkアクションを用いるのと、手動でプレビューをトリガーするのとでは何が違うのか不思議に思う人もいるだろう。主な違いは手動によるプレビューでオープンされたファイルは、補完セッションが終わった後に再び閉じられる点である。プレビューの間は性能向上のために一部機能が無効になる。カスタマイズ用の変数`consult-preview-variables`や`consult-preview-allowed-hooks`の例を確認して欲しい。実行されるフックは`consult-preview-allowed-hooks`にリストアップされたフックだけだ。この変数が適用されているのは`find-file-hook`、`change-major-mode-hook`、それに`prog-mode-hook`のようなモードフックだけである。プレビュー中に追加でフォントロックを有効にするためには、対応するフックをallow(許可)リストに追加する。以下のデモでは[org-modern](https://github.com/minad/org-modern)と[hl-todo](https://github.com/tarsius/hl-todo)をallowリストに追加する例だ。

```lisp
    ;; prog-modeフックにローカルモードを追加
    (add-to-list 'consult-preview-allowed-hooks 'hl-todo-mode)
    (add-to-list 'consult-preview-allowed-hooks 'elide-head-mode)
    ;; 有効なグローバルモード
    (add-to-list 'consult-preview-allowed-hooks 'global-org-modern-mode)
    (add-to-list 'consult-preview-allowed-hooks 'global-hl-todo-mode)
```

<!-- Files larger than `consult-preview-partial-size` are previewed partially. Delaying the preview is also useful for `consult-theme`, since the theme preview is slow. The delay results i a smoother UI experience. -->

`consult-preview-partial-size`より大きいサイズでは部分的なプレビューになる。テーマのプレビューは時間がかかるので、プレビューと同じように`consult-theme`を遅延させると役に立つかもしれない。遅延させることにより、よりスムーズなUIエクスペリエンスが得られるだろう。

```lisp
    ;; どのキーでもプレビューするが0.5秒遅延させる
    (consult-customize consult-theme :preview-key '(:debounce 0.5 any))
    ;; M-.は即時プレビュー、up/downなら0.5秒後、その他キーは1秒後
    (consult-customize consult-theme
                       :preview-key
                       '("M-."
                         :debounce 0.5 "<up>" "<down>"
                         :debounce 1 any))
```

## ナローイングとグルーピング

<!-- Consult has special support for candidate groups. If the completion UI supports the grouping functionality, the UI separates the groups with thin lines and shows group titles. Grouping is useful if the list of candidates consists of candidates of multiple types or candidates from [multiple sources](#multiple-sources), like the `consult-buffer` command, which shows both buffers and recently opened files. Note that you can disable the group titles by setting the `:group` property of the corresponding command to nil using the `consult-customize` macro. -->

補完グループにたいしてConsultには特別なサポートがある。機能のグルーピング(grouping: グループ化)をサポートする補完UIでは、UIがグループを細い線で区切ってグループのタイトルを票するのだ。複数タイプの候補や、`consult-buffer`コマンド(バッファーと最近オープンしたファイルの両方を表示する)のように[複数ソース](#複数ソース)から選んだ候補によって構築された候補リストには、グルーピングが役に立つかもしれない。`consult-customize`マクロで対応するコマンドの`:group`プロパティに`nil`をセットすればグループのタイプは無効化できることに注意。

<!-- By entering a narrowing prefix or by pressing a narrowing key it is possible to restrict the completion candidates to a certain candidate group. When you use the `consult-buffer` command, you can enter the prefix `b SPC` to restrict list of candidates to buffers only. If you press `DEL` afterwards, the full candidate list will be shown again. Furthermore a narrowing prefix key and a widening key can be configured which can be pressed to achieve the same effect, see the configuration variables `consult-narrow-key` and `consult-widen-key`. -->

ナローイング用のプレフィックスやナローイングキーを押下することで、補完候補を特定の候補グループに制限できる。`consult-buffer`コマンドの使用時には、プレフィックス`b SPC`で候補リストをそのバッファーだけに制限できる。その後に`DEL`を押下すると、完全な候補リストが再表示されるのだ。更にナローイングのプレフィックスキーとワイドニング(訳注: Emacsではwidenはnarrowを解除するコマンド))のキーと同等の効果を得るキーは設定可能だ。設定変数`consult-narrow-key`および`consult-widen-key`を確認して欲しい。

<!-- After pressing `consult-narrow-key`, the possible narrowing keys can be shown by pressing `C-h`. When pressing `C-h` after some prefix key, the `prefix-help-command` is invoked, which shows the keybinding help window by default. As a more compact alternative, there is the `consult-narrow-help` command which can be bound to a key, for example `?` or `C-h` in the `consult-narrow-map`, as shown in the [example configuration](#use-package-example). If [which-key](https://github.com/justbur/emacs-which-key) is installed, the narrowing keys are automatically shown in the which-key window after pressing the `consult-narrow-key`. -->

`consult-narrow-key`を押下した後に`C-h`を押下すれば利用可能なナローイングキーが表示されるだろう。何らかのプレフィックスキーの後に`C-h`を押下すると`prefix-help-command`が呼び出される。このコマンドはデフォルトではヘルプウィンドウにキーバインディングを表示するのだ。[コンフィグの例](#use-packageの例)で示すように何らかのキー、たとえば`?`にバインド可能な`consult-narrow-help`コマンド、`consult-narrow-map`の`C-h`といったより簡潔な代替えを設定してもよいだろう。[which-key](https://github.com/justbur/emacs-which-key)がインストール済みなら、`consult-narrow-key`の押下後にナローイングキーが自動的にwhich-keyウィンドウに表示される筈だ。

## 非同期検索

<!-- Consult has support for asynchronous generation of candidate lists. This feature is used for search commands like `consult-grep`, where the list of matches is generated dynamically while the user is typing a regular expression. The grep process is executed in the background. When modifying the regular expression, the background process is terminated and a new process is started with the modified regular expression. -->

Consultは候補リストの非同期生成をサポートしている。これはユーザーが正規表現をタイプ中にマッチしたリストを動的に生成する、`consult-grep`のような検索機能によって使用されている機能だ。grep のプロセスはバックグラウンドで実行される。正規表現が変更されるとバックグラウンドのプロセスを終了して、その変更された正規表現で新たなプロセスが開始される。

<!-- The matches, which have been found, can then be narrowed using the installed Emacs completion-style. This can be powerful if you are using for example the `orderless` completion style.  -->

見つかったマッチはインストール済みのEmacs補完スタイルを用いて絞り込まれる。これはたとえば補完スタイルに`orderless`を使っていれば、強力な機能かもしれない。

<!-- This two-level filtering is possible by splitting the input string. Part of the input string is treated as input to grep and part of the input is used for filtering. There are multiple splitting styles available, configured in `consult-async-split-styles-alist`: `nil`, `comma`, `semicolon` and `perl`. The default splitting style is configured with the variable `consult-async-split-style`. -->

この2段階のフィルタリングを可能にしているのは入力文字列の分割(splitting)だ。入力文字列の一部はgrep の入力となり、その入力の一部がフィルタリングの入力として使用される。複数の分割スタイルがある。`consult-async-split-styles-alist`には`nil`、`comma`、`semicolon`、`perl`が設定されている。デフォルトの分割スタイルは変数`consult-async-split-style`に設定されている。

<!-- With the `comma` and `semicolon` splitting styles, the first word before the comma or semicolon is passed to grep, the remaining string is used for filtering. The `nil` splitting style does not perform any splitting, the whole input is passed to grep. -->

分割スタイル`comma`と`semicolon`ではカンマやセミコロンの前の1つ目の単語はgrep、残りの文字列はフィルタリングに使用される。分割スタイル`nil`では何も分割せず、入力全体がgrepに渡される。

<!-- The `perl` splitting style splits the input string at a punctuation character, using a similar syntax as Perl regular expressions. -->

分割スタイル`perl`では入力文字がPerl正規表現と似た構文の句読点文字(punctuation character)で分割される。

<!-- Examples: -->

<!-- -   `#defun`: Search for "defun" using grep. -->
<!-- -   `#consult embark`: Search for both "consult" and "embark" using grep in any order. -->
<!-- -   `#first.*second`: Search for "first" followed by "second" using grep. -->
<!-- -   `#\(consult\|embark\)`: Search for "consult" or "embark" using grep. Note the usage of Emacs-style regular expressions. -->
<!-- -   `#defun#consult`: Search for "defun" using grep, filter with the word "consult". -->
<!-- -   `/defun/consult`: It is also possible to use other punctuation characters. -->
<!-- -   `#to#`: Force searching for "to" using grep, since the grep pattern must be longer than `consult-async-min-input` characters by default. -->
<!-- -   `#defun -- --invert-match#`: Pass argument `--invert-match` to grep. -->

例:

-   `#defun`: grepで"defun"を検索

-   `#consult embark`: grepで"consult"と"embark"の両方を任意の順番で検索

-   `#first.*second`: 後に"second"を伴う"first"を検索

-   `#\(consult\|embark\)`: grepで"consult"か"embark"を検索(Emacsスタイルの正規表現使用に注意)

-   `#defun#consult`: grepで"defun"を検索、単語"consult"でフィルタリング

-   `/defun/consult`: 他の句読点文字でも使用可

-   `#to#`: grepで"to"を強制的に検索(デフォルトではgrepのパターンは`consult-async-min-input`より長くなければならないため)

-   `#defun -- --invert-match#`: grepに引数`--invert-match`を渡す


<!-- Asynchronous processes like `find` and `grep` create an error log buffer `_*consult-async*` (note the leading space), which is useful for troubleshooting. The prompt has a small indicator showing the process status: -->

<!-- -   `:` the usual prompt colon, before input is provided. -->
<!-- -   `*` with warning face, the process is running. -->
<!-- -   `:` with success face, success, process exited with an error code of zero. -->
<!-- -   `!` with error face, failure, process exited with a nonzero error code. -->
<!-- -   `;` with error face, interrupted, for example if more input is provided. -->

`find`や`grep`といった非同期プロセスはエラーログ用のバッファー`_*consult-async*`(先頭のスペースに注意)を作成する。これは問題解決の際に役に立つ。プロンプトにはプロセスの状態を示す小さなインジケーターが表示される:

-   `:` 通常のプロンプトのコロンは入力の前に表示される

-   `*` プロセスが実行中にwarningフェイスで表示される

-   `:` プロセスが成功(エラーコードが0でexit)したときsuccessフェイスで表示される

-   `!` プロセスが失敗(エラーコードが0以外でexit)したときerrorフェイスで表示される

-   `;` 割り込み(更に入力が与えられた等)の際にerrorフェイスで表示される


## 複数ソース

<!-- Multiple static and asynchronous candidate sources can be combined. This feature is used by the `consult-buffer` command to present buffer-like candidates in a single menu for quick access. By default `consult-buffer` includes buffers, bookmarks, recent files and project-specific buffers and files. The `consult-buffer-sources` variable configures the list of sources. Arbitrary custom sources can be added to this list. -->

複数の静的および非同期の候補ソースを組み合わせることができる。これは`consult-buffer`コマンドで1つのメニューからクイックアクセスできるように、バッファー風の候補を表示する際に使用されている機能である。`consult-buffer`にはデフォルトではバッファー、ブックマーク、最近のファイル、それにプロジェクト固有のバッファーとファイルが含まれている。`consult-buffer-sources`はソースのリストを設定する変数だ。このリストには任意のカスタムソースを追加できる。

<!-- As an example, the bookmark source is defined as follows: -->

一例としてブックマーク用のソースは以下のように定義されている:

```lisp
    (defvar consult--source-bookmark
      `(:name     "Bookmark"
        :narrow   ?m
        :category bookmark
        :face     consult-bookmark
        :history  bookmark-history
        :items    ,#'bookmark-all-names
        :action   ,#'consult--bookmark-action))
```


<!-- Either the `:items` or the `:async` source field is required: -->
<!-- -   `:items` List of strings to select from or function returning list of strings. The strings can carry metadata in text properties, which is then available to the `:annotate`, `:action` and `:state` functions. The list can also consist of pairs, with the string in the `car` used for display and the `cdr` the actual candidate. -->
<!-- -   `:async` Alternative to `:items` for asynchronous sources. See the docstring for details. -->
<!-- Optional source fields: -->
<!-- -   `:name` Name of the source, used for narrowing, group titles and annotations. -->
<!-- -   `:narrow` Narrowing character, `(char . string)` pair or list of pairs. -->
<!-- -   `:category` Completion category. -->
<!-- -   `:preview-key` Preview key or keys which trigger preview. -->
<!-- -   `:enabled` Function which must return t if the source is enabled. -->
<!-- -   `:hidden` When t candidates of this source are hidden by default. -->
<!-- -   `:face` Face used for highlighting the candidates. -->
<!-- -   `:annotate` Annotation function called for each candidate, returns string. -->
<!-- -   `:history` Name of history variable to add selected candidate. -->
<!-- -   `:default` Must be t if the first item of the source is the default value. -->
<!-- -   `:action` Function called with the selected candidate. -->
<!-- -   `:new` Function called with new candidate name, only if `:require-match` is nil. -->
<!-- -   `:state` State constructor for the source, must return the state function. -->
<!-- -   Other source fields can be added specifically to the use case. -->

ソースのフィールド`:items`か`:async`のいずれかの指定は必須である。

-   `:items` 選択する文字列リスト、または文字列リストをリターンする関数。文字列にはテキストプロパティでメタデータをもたせることができる。そのメタデータは`:annotate`、`:action`、`:state`の関数から利用できる。このリストをペアーで設定することもできる。その場合には`car`の文字列が表示、実際の候補には`cdr`が使用される。

-   `:async` 非同期ソース用の`:items`の置き換え。詳細についてはdoc文字列(docstring)を参照のこと。

以下はオプションのソースフィールド:

-   `:name` ソースの名前。ナローイング、グループタイトル、注釈に用いられる。

-   `:narrow` ナローイング文字。`(char . string)`のようなペアー、またはペアーのリスト。

-   `:category` 補完カテゴリー。

-   `:preview-key` プレビューキー、またはプレビューをトリガーするキー。

-   `:enabled` ソースが有効なら`t`をリターンする関数。

-   `:hidden` このソースの候補がデフォルトで非表示なら`t`。

-   `:face` 候補のハイライトに用いるフェイス。

-   `:annotate` 候補それぞれに呼び出されて文字列をリターンする注釈関数。

-   `:history` 選択した候補を追加するヒストリー変数の名前。

-   `:default` ソースの最初のアイテムがデフォルト値なら`t`。

-   `:action` 選択した候補に呼び出す関数。

-   `:new` 新たな候補名で呼び出される関数。`:require-match`が`nil`の場合のみ。

-   `:state` ソースにたいする状態(state)コンストラクタ。state関数をリターンしなければならない。

-   他にもユースケースに応じて具体的なソースフィールドを追加可能。

<!-- The `:state` and `:action` fields of the sources deserve a longer explanation. The `:action` function takes a single argument and is only called after selection with the selected candidate, if the selection has not been aborted. This functionality is provided for convenience and easy definition of sources. The `:state` field is more general. The `:state` function is a constructor function without arguments, which can perform some setup necessary for the preview. It must return a closure which takes an ACTION and a CANDIDATE argument. See the docstring of `consult--with-preview` for more details about the ACTION argument. -->

ソースフィールドの`:state`と`:action`にはもっと詳しく説明しておく価値があるだろう。`:action`関数は1つの引数を受け取り、選択された候補が選択された後(選択が中止されていない)でのみ呼び出される。これはソースを手軽かつ簡単に定義する手段を提供するための機能だ。より汎用的なのが`:state`フィールドだろう。`:state`は引数を受け取らないコンストラクタ関数であり、プレビューに必要ないくつかのセットアップを行うことができる関数だ。ACTIONとCANDIDATEを引数として受け取るクロージャ(closure)をリターンしなければならない。ACTION引数の詳細については`consult--with-preview`のdoc文字列を参照して欲しい。

<!-- By default, `consult-buffer` previews buffers, bookmarks and files. Loading recent files or bookmarks can result in expensive operations. However it is possible to configure a manual preview as follows. -->

デフォルトでは`consult-buffer`がプレビューするのはバッファー、ブックマーク、ファイルである。最近のファイルやブックマークのロードは、結果として高価な処理となる可能性がある。その点については以下のように手動でプレビューを行うように設定できる。

```lisp
    (consult-customize
     consult--source-bookmark consult--source-file-register
     consult--source-recent-file consult--source-project-recent-file
     :preview-key "M-.")
```

<!-- Sources can be added directly to the `consult-buffer-source` list for convenience. For example, the following source lists all Org buffers and lets you create new ones. -->

利便性のために`consult-buffer-source`のリストにソースを直接追加できるようになっている。たとえば以下のソースリストではすべてのOrgバッファーに加えて、新たにOrgバッファーを作成できるようにした例だ。

```lisp
    (defvar org-source
      (list :name     "Org Buffer"
            :category 'buffer
            :narrow   ?o
            :face     'consult-buffer
            :history  'buffer-name-history
            :state    #'consult--buffer-state
            :new
            (lambda (name)
              (with-current-buffer (get-buffer-create name)
                (insert "#+title: " name "\n\n")
                (org-mode)
                (consult--buffer-action (current-buffer))))
            :items
            (lambda ()
              (consult--buffer-query :mode 'org-mode :as #'consult--buffer-pair))))
    
    (add-to-list 'consult-buffer-sources 'org-source 'append)
```

<!-- One can create similar sources for other major modes. See the [Consult wiki](https://github.com/minad/consult/wiki) for many additional source examples. See also the documentation of `consult-buffer` and of the internal `consult--multi` API. The function `consult--multi` can be used to create new multi-source commands. -->

他のメジャーモードにたいしても同様なソースを作成できる。ソースに関する追加の例については[Consult wiki](https://github.com/minad/consult/wiki)を参照のこと。`consult-buffer`や内部APIの`consult--multi`のドキュメントも参考にして欲しい。`consult--multi`関数は新たなマルチソースコマンドの作成に使用できるだろう。

## Embarkとの統合

<!-- **NOTE**: Install the `embark-consult` package from MELPA, which provides Consult-specific Embark actions and the Occur buffer export. -->

**注意** `embark-consult`パッケージはMELPAからインストールできる。これはConsult特有のEmbarkアクションとOccurバッファーのエクスポートを提供するパッケージだ。

<!-- Embark is a versatile package which offers context dependent actions, comparable to a context menu. See the [Embark manual](https://github.com/oantolin/embark) for an extensive description of its capabilities. -->

Embarkはコンテキストに応じたアクションを提案する、コンテキストメニューに匹敵する多目的パッケージだ。[Embark manual](https://github.com/oantolin/embark)にはその能力に関して広範な記述があるので参照して欲しい。

<!-- Actions are commands which can operate on the currently selected candidate (or target in Embark terminology). When completing files, for example the `delete-file` command is offered. With Embark you can execute arbitrary commands on the currently selected candidate via `M-x`. -->

アクション(actionとはカレントで選択された候補(Embarkの用語でtarget)を処理できるコマンドのこと。たとえばファイルを補完するときには、`delete-file`コマンドが提供されるだろう。Embarkを使うことによりカレントで選択された候補にたいして、`M-x`で任意のコマンドが実行できるのだ。

<!-- Furthermore Embark provides the `embark-collect` command, which collects candidates and presents them in an Embark collect buffer, where further actions can be applied to them. A related feature is the `embark-export` command, which exports candidate lists to a buffer of a special type. For example in the case of file completion, a Dired buffer is opened. -->

更にEmbarkは候補を収集(collect)してEmbarkのcollectバッファーに表示する、`embark-collect`コマンドを提供している。このバッファーに収集された候補にたいして、更にアクションを適用できるのだ。これに関連する機能が、候補リストを特別なタイプのバッファーにエクスポートする`embark-export`コマンドである。たとえばファイルの補完では、Diredバッファーがオープンされるといった具合だ。

<!-- In the context of Consult, particularly exciting is the possibility to export the matching lines from `consult-line`, `consult-outline`, `consult-mark` and `consult-global-mark`. The matching lines are exported to an Occur buffer where they can be edited via the `occur-edit-mode` (press key `e`). Similarly, Embark supports exporting the matches found by `consult-grep`, `consult-ripgrep` and `consult-git-grep` to a Grep buffer, where the matches across files can be edited, if the [wgrep](https://github.com/mhayashi1120/Emacs-wgrep) package is installed. These three workflows are symmetric. -->

Consultのコンテキストにおいて特に魅力的なのは`consult-line`、`consult-outline`、`consult-mark`、`consult-global-mark`でマッチした行がエクスポート可能だという点だろう。マッチした行をOccurバッファーにエクスポートすれば、`occur-edit-mode`(`e`を押下すればよい)で編集が可能なのである。同じように`consult-grep`、`consult-ripgrep`、`consult-git-grep`が見つけたマッチのGrepバッファーへのエクスポートもEmbarkはサポートしている。[wgrep](https://github.com/mhayashi1120/Emacs-wgrep)をインストールしていれば、ファイルを跨いでGrepバッファーのマッチを編集できるのだ。以下の3つのワークフローには対称性がある。

<!-- -   `consult-line` -> `embark-export` to `occur-mode` buffer -> `occur-edit-mode` for editing of matches in buffer. -->
<!-- -   `consult-grep` -> `embark-export` to `grep-mode` buffer -> `wgrep` for editing of all matches. -->
<!-- -   `consult-find` -> `embark-export` to `dired-mode` buffer -> `wdired-change-to-wdired-mode` for editing. -->

-   `consult-line` -> `embark-export`で`occur-mode`バッファーにエクスポート -> `occur-edit-mode`でバッファー内のマッチを編集

-   `consult-grep` -> `embark-export`で`grep-mode`バッファーにエクスポート -> `wgrep`ですべてのマッチが編集可

-   `consult-find` -> `embark-export`で`dired-mode`バッファーにエクスポート -> 編集は`wdired-change-to-wdired-mode`

# コンフィグ

<!-- Consult can be installed from [ELPA](https://elpa.gnu.org/packages/consult.html) or [MELPA](https://melpa.org/#/consult) via the Emacs built-in package manager. Alternatively it can be directly installed from the development repository via other non-standard package managers. -->

ConsultはEmacsビルトインのパッケージマネージャーで[ELPA](https://elpa.gnu.org/packages/consult.html)や[MELPA](https://melpa.org/#/consult)からインストールできる。 それ以外の非標準のパッケージマネージャーを使えば、開発用のレポジトリから直接インストールすることもできるだろう。

<!-- There is the [Consult wiki](https://github.com/minad/consult/wiki), where additional configuration examples can be contributed. -->

コンフィグへの追加例を投稿できる場として、[Consult wiki](https://github.com/minad/consult/wiki)も存在する。

<!-- **IMPORTANT:** It is recommended that you enable [lexical binding](https://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html) in your configuration. Many Consult-related code snippets require lexical binding, since they use lambdas and closures. -->


**重要:** コンフィグでは[lexical binding](https://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html)を有効にしておくようお勧めする。Consult関連のコードスニペットの多くはlambdaとclosureを使用するので、レキシカルバインディングが必要なのだ。

## use-packageの例

<!-- The Consult package only provides commands and does not add any keybindings or modes. Therefore the package is non-intrusive but requires a little setup effort. While the configuration example is long, it consists essentially of key bindings only, such that the risk of interference with other Emacs functionality is minimized. -->

Consultが提供するのはコマンドだけであり、キーバインディングやモードは何も提供していない。したがって差し出がましくないパッケージではあるものの、セットアップの努力を少し費やす必要があるだろう。以下のコンフィグ例は他のEmacs機能と干渉するリスクを最小限にしたため、長くはあるが詰まるところキーバインディングを設定しているだけだ。

<!-- In order to use the Consult commands, it is recommended to add keybindings for commands which are accessed often. Rarely used commands can be invoked via `M-x`. Feel free to only bind the commands you consider useful to your workflow. The configuration shown here relies on the `use-package` macro, which is a convenient tool to manage package configurations. -->

Consultコマンドを使用するには、頻繁にアクセスするコマンドにキーバインディングを追加することをお勧めする。滅多に呼び出さないコマンドなら`M-x`で呼び出せれば十分だ。あなたのワークフローにとって有用だと思えるコマンドだけバインドすればよいだろう。ここに示す設定は`use-package`マクロ(パッケージのコンフィグを管理する便利なツール)に依存している。

<!-- **NOTE:** There is the [Consult wiki](https://github.com/minad/consult/wiki), where you can contribute additional configuration examples. -->

**注意:** 追加のコンフィグ例を提供する場として[Consult wiki](https://github.com/minad/consult/wiki)が存在する。

```lisp
    ;; Consult用コンフィグ例
    (use-package consult
      ;; キーバインディングの置き換え; `use-package'によりlazyロードされる
      :bind (;; `mode-specific-map'のC-cバインディング
             ("C-c M-x" . consult-mode-command)
             ("C-c h" . consult-history)
             ("C-c k" . consult-kmacro)
             ("C-c m" . consult-man)
             ("C-c i" . consult-info)
             ([remap Info-search] . consult-info)
             ;; `ctl-x-map'のC-xバインディング
             ("C-x M-:" . consult-complex-command)     ;; 元はrepeat-complex-command
             ("C-x b" . consult-buffer)                ;; 元はswitch-to-buffer
             ("C-x 4 b" . consult-buffer-other-window) ;; 元はswitch-to-buffer-other-window
             ("C-x 5 b" . consult-buffer-other-frame)  ;; 元はswitch-to-buffer-other-frame
             ("C-x t b" . consult-buffer-other-tab)    ;; 元はswitch-to-buffer-other-tab
             ("C-x r b" . consult-bookmark)            ;; 元はbookmark-jump
             ("C-x p b" . consult-project-buffer)      ;; 元はproject-switch-to-buffer
             ;; レジスター高速アクセス用カスタムM-#バインディング
             ("M-#" . consult-register-load)
             ("M-'" . consult-register-store)          ;; 元はabbrev-prefix-mark (unrelated)
             ("C-M-#" . consult-register)
             ;; その他のカスタムバインディング
             ("M-y" . consult-yank-pop)                ;; 元はyank-pop
             ;; `goto-map'のM-gバインディング
             ("M-g e" . consult-compile-error)
             ("M-g f" . consult-flymake)               ;; 代替えはconsult-flycheck
             ("M-g g" . consult-goto-line)             ;; 元はgoto-line
             ("M-g M-g" . consult-goto-line)           ;; 元はgoto-line
             ("M-g o" . consult-outline)               ;; 代替えはconsult-org-heading
             ("M-g m" . consult-mark)
             ("M-g k" . consult-global-mark)
             ("M-g i" . consult-imenu)
             ("M-g I" . consult-imenu-multi)
             ;; `search-map'のM-sバインディング
             ("M-s d" . consult-find)                  ;; 代替えはconsult-fd
             ("M-s c" . consult-locate)
             ("M-s g" . consult-grep)
             ("M-s G" . consult-git-grep)
             ("M-s r" . consult-ripgrep)
             ("M-s l" . consult-line)
             ("M-s L" . consult-line-multi)
             ("M-s k" . consult-keep-lines)
             ("M-s u" . consult-focus-lines)
             ;; Isearchとの統合
             ("M-s e" . consult-isearch-history)
             :map isearch-mode-map
             ("M-e" . consult-isearch-history)         ;; 元はisearch-edit-string
             ("M-s e" . consult-isearch-history)       ;; 元はisearch-edit-string
             ("M-s l" . consult-line)                  ;; consult-lineのisearch検出に必要
             ("M-s L" . consult-line-multi)            ;; consult-lineのisearch検出に必要
             ;; ミニバッファーのヒストリー
             :map minibuffer-local-map
             ("M-s" . consult-history)                 ;; 元はnext-matching-history-element
             ("M-r" . consult-history))                ;; 元はprevious-matching-history-element
    
      ;; *Completions*バッファーのポイント位置で自動プレビューを有効にする
      ;; デフォルトの補完UIを使用する場合に関する設定
      :hook (completion-list-mode . consult-preview-at-point-mode)
    
      ;; :initのコンフィグは常に実行(遅延させない)
      :init
    
      ;; consult-register-load'、`consult-register-store'
      ;; 、ビルトインコマンド用のレジスタープレビューを調節する
      ;; レジスターのフォーマットの改善、細い分割線追加、レジスターのソート
      ;; ウィンドウのモードラインを非表示にする

      (advice-add #'register-preview :override #'consult-register-window)
      (setq register-preview-delay 0.5)
    
      ;; プレビュー付きでxrefを選択するために Consultを使用
      (setq xref-show-xrefs-function #'consult-xref
            xref-show-definitions-function #'consult-xref)
    
      ;; パッケージのlazyロード後に:configセクションの
      ;; 他の変数とモードを設定する
      :config

      ;; プレビューのオプション設定
      ;; デフォルト値の'anyはどのようにキーでもプレビューをトリガーする
      ;; (setq consult-preview-key 'any)
      ;; (setq consult-preview-key "M-.")
      ;; (setq consult-preview-key '("S-<down>" "S-<up>"))
      ;; 一部のコマンドとバッファーソースでは`consult-customize'マクロを使って
      ;; コマンドごとに:preview-keyを設定すると役に立つ
      (consult-customize
       consult-theme :preview-key '(:debounce 0.2 any)
       consult-ripgrep consult-git-grep consult-grep consult-man
       consult-bookmark consult-recent-file consult-xref
       consult--source-bookmark consult--source-file-register
       consult--source-recent-file consult--source-project-recent-file
       ;; :preview-key "M-."
       :preview-key '(:debounce 0.4 any))
    
      ;; ナローイングキーのオプション設定
      ;; <とC-+の両方を合理的に機能させる
      (setq consult-narrow-key "<") ;; "C-+"
    
      ;; ミニバッファーでナローイングヘルプを利用可能にするオプション
      ;; かわりに`embark-prefix-help-command'やwhich-keyを使う方が好みかもしれない
      ;; (keymap-set consult-narrow-map (concat consult-narrow-key " ?") #'consult-narrow-help)
    )
```

## カスタム変数

<!-- **TIP:** If you have [Marginalia](https://github.com/minad/marginalia) installed, type `M-x customize-variable RET ^consult` to see all Consult-specific customizable variables with their current values and abbreviated description. Alternatively, type `C-h a ^consult` to get an overview of all Consult variables and functions with their descriptions. -->


**ヒント:** [Marginalia](https://github.com/minad/marginalia)をインストールしていれば、`M-x customize-variable RET ^consult`をタイプしてConsult固有のカスタマイズ可能変数のカレント値と省略版の説明が確認できるだろう。`C-h a ^consult`とタイプすれば、かわりにConsultのすべての変数と関数の説明が確認できる筈だ。

<!-- <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> -->


<!-- <colgroup> -->
<!-- <col  class="org-left" /> -->

<!-- <col  class="org-left" /> -->
<!-- </colgroup> -->
<!-- <thead> -->
<!-- <tr> -->
<!-- <th scope="col" class="org-left">Variable</th> -->
<!-- <th scope="col" class="org-left">Description</th> -->
<!-- </tr> -->
<!-- </thead> -->

<!-- <tbody> -->
<!-- <tr> -->
<!-- <td class="org-left">consult-after-jump-hook</td> -->
<!-- <td class="org-left">Functions to call after jumping to a location</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-input-debounce</td> -->
<!-- <td class="org-left">Input debounce for asynchronous commands</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-input-throttle</td> -->
<!-- <td class="org-left">Input throttle for asynchronous commands</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-min-input</td> -->
<!-- <td class="org-left">Minimum numbers of input characters</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-refresh-delay</td> -->
<!-- <td class="org-left">Refresh delay for asynchronous commands</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-split-style</td> -->
<!-- <td class="org-left">Splitting style used for async commands</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-split-styles-alist</td> -->
<!-- <td class="org-left">Available splitting styles used for async commands</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-async-indicator</td> -->
<!-- <td class="org-left">Async indicator characters</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-bookmark-narrow</td> -->
<!-- <td class="org-left">Narrowing configuration for <code>consult-bookmark</code></td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-buffer-filter</td> -->
<!-- <td class="org-left">Filter for <code>consult-buffer</code></td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-buffer-sources</td> -->
<!-- <td class="org-left">List of virtual buffer sources</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-fd-args</td> -->
<!-- <td class="org-left">Command line arguments for fd</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-find-args</td> -->
<!-- <td class="org-left">Command line arguments for find</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-fontify-max-size</td> -->
<!-- <td class="org-left">Buffers larger than this limit are not fontified</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-fontify-preserve</td> -->
<!-- <td class="org-left">Preserve fontification for line-based commands.</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-git-grep-args</td> -->
<!-- <td class="org-left">Command line arguments for git-grep</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-goto-line-numbers</td> -->
<!-- <td class="org-left">Show line numbers for <code>consult-goto-line</code></td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-grep-max-columns</td> -->
<!-- <td class="org-left">Maximal number of columns of the matching lines</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-grep-args</td> -->
<!-- <td class="org-left">Command line arguments for grep</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-imenu-config</td> -->
<!-- <td class="org-left">Mode-specific configuration for <code>consult-imenu</code></td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-line-numbers-widen</td> -->
<!-- <td class="org-left">Show absolute line numbers when narrowing is active</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-line-start-from-top</td> -->
<!-- <td class="org-left">Start the <code>consult-line</code> search from the top</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-locate-args</td> -->
<!-- <td class="org-left">Command line arguments for locate</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-man-args</td> -->
<!-- <td class="org-left">Command line arguments for man</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-mode-command-filter</td> -->
<!-- <td class="org-left">Filter for <code>consult-mode-command</code></td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-mode-histories</td> -->
<!-- <td class="org-left">Mode-specific history variables</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-narrow-key</td> -->
<!-- <td class="org-left">Narrowing prefix key during completion</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-point-placement</td> -->
<!-- <td class="org-left">Placement of the point when jumping to matches</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-key</td> -->
<!-- <td class="org-left">Keys which triggers preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-allowed-hooks</td> -->
<!-- <td class="org-left">List of hooks to allow during preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-excluded-buffers</td> -->
<!-- <td class="org-left">Predicate to exclude buffers from preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-excluded-files</td> -->
<!-- <td class="org-left">Regexps matched against file names during preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-max-count</td> -->
<!-- <td class="org-left">Maximum number of files to keep open during preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-partial-size</td> -->
<!-- <td class="org-left">Files larger than this size are previewed partially</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-partial-chunk</td> -->
<!-- <td class="org-left">Size of the file chunk which is previewed partially</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-preview-variables</td> -->
<!-- <td class="org-left">Alist of variables to bind during preview</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-project-buffer-sources</td> -->
<!-- <td class="org-left">List of virtual project buffer sources</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-project-function</td> -->
<!-- <td class="org-left">Function which returns current project root</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-register-prefix</td> -->
<!-- <td class="org-left">Prefix string for register keys during completion</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-ripgrep-args</td> -->
<!-- <td class="org-left">Command line arguments for ripgrep</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-themes</td> -->
<!-- <td class="org-left">List of themes to be presented for selection</td> -->
<!-- </tr> -->


<!-- <tr> -->
<!-- <td class="org-left">consult-widen-key</td> -->
<!-- <td class="org-left">Widening key during completion</td> -->
<!-- </tr> -->
<!-- </tbody> -->
<!-- </table> -->


<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">


<colgroup>
<col  class="org-left" />

<col  class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">変数</th>
<th scope="col" class="org-left">説明</th>
</tr>
</thead>

<tbody>
<tr>
<td class="org-left">consult-after-jump-hook</td>
<td class="org-left">ある場所へジャンプ後に呼び出す関数</td>
</tr>


<tr>
<td class="org-left">consult-async-input-debounce</td>
<td class="org-left">非同期コマンド入力のデバウンス(debounce: 一定間隔経過後に処理)</td>
</tr>


<tr>
<td class="org-left">consult-async-input-throttle</td>
<td class="org-left">非同期コマンドの入力スロットル(throttle: 一定間隔で処理)</td>
</tr>


<tr>
<td class="org-left">consult-async-min-input</td>
<td class="org-left">入力の最小文字数</td>
</tr>


<tr>
<td class="org-left">consult-async-refresh-delay</td>
<td class="org-left">非同期コマンドのリフレッシュの遅延</td>
</tr>


<tr>
<td class="org-left">consult-async-split-style</td>
<td class="org-left">非同期コマンドが用いる分割スタイル</td>
</tr>


<tr>
<td class="org-left">consult-async-split-styles-alist</td>
<td class="org-left">非同期コマンドが利用可能な分割スタイル</td>
</tr>


<tr>
<td class="org-left">consult-async-indicator</td>
<td class="org-left">非同期のインジケーター文字</td>
</tr>


<tr>
<td class="org-left">consult-bookmark-narrow</td>
<td class="org-left"><code>consult-bookmark</code>のナローイング設定</td>
</tr>


<tr>
<td class="org-left">consult-buffer-filter</td>
<td class="org-left"><code>consult-buffer</code>のフィルター</td>
</tr>


<tr>
<td class="org-left">consult-buffer-sources</td>
<td class="org-left">仮想バッファーソースのリスト</td>
</tr>


<tr>
<td class="org-left">consult-fd-args</td>
<td class="org-left">fdにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-find-args</td>
<td class="org-left">findにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-fontify-max-size</td>
<td class="org-left">この制限を超えるバッファーはフォント化(fontify)されない</td>
</tr>


<tr>
<td class="org-left">consult-fontify-preserve</td>
<td class="org-left">行ベースのコマンド用のフォント化(fontification)を保持</td>
</tr>


<tr>
<td class="org-left">consult-git-grep-args</td>
<td class="org-left">git-grepにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-goto-line-numbers</td>
<td class="org-left"><code>consult-goto-line</code>で行番号を表示</td>
</tr>


<tr>
<td class="org-left">consult-grep-max-columns</td>
<td class="org-left">マッチした行の最大列数</td>
</tr>


<tr>
<td class="org-left">consult-grep-args</td>
<td class="org-left">grepにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-imenu-config</td>
<td class="org-left"><code>consult-imenu</code>にたいするモード固有の設定</td>
</tr>


<tr>
<td class="org-left">consult-line-numbers-widen</td>
<td class="org-left">ナローイングがアクティブ時の絶対行番号の表示</td>
</tr>


<tr>
<td class="org-left">consult-line-start-from-top</td>
<td class="org-left">上端から<code>consult-line</code>の検索を開始</td>
</tr>


<tr>
<td class="org-left">consult-locate-args</td>
<td class="org-left">locateにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-man-args</td>
<td class="org-left">manにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-mode-command-filter</td>
<td class="org-left"><code>consult-mode-command</code>のフィルター</td>
</tr>


<tr>
<td class="org-left">consult-mode-histories</td>
<td class="org-left">モード固有のヒストリー変数</td>
</tr>


<tr>
<td class="org-left">consult-narrow-key</td>
<td class="org-left">補完中のナローイングのプレフィックスキー</td>
</tr>


<tr>
<td class="org-left">consult-point-placement</td>
<td class="org-left">マッチにジャンプする際のポイント配置</td>
</tr>


<tr>
<td class="org-left">consult-preview-key</td>
<td class="org-left">プレビューをトリガーするキー</td>
</tr>


<tr>
<td class="org-left">consult-preview-allowed-hooks</td>
<td class="org-left">プレビュー中に許可されたフックのリスト</td>
</tr>


<tr>
<td class="org-left">consult-preview-excluded-buffers</td>
<td class="org-left">プレビューから除外するバッファーを判断する述語</td>
</tr>


<tr>
<td class="org-left">consult-preview-excluded-files</td>
<td class="org-left">プレビュー中にファイル名にマッチさせるregexp</td>
</tr>


<tr>
<td class="org-left">consult-preview-max-count</td>
<td class="org-left">プレビュー中にオープンしたままにするファイルの最大数</td>
</tr>


<tr>
<td class="org-left">consult-preview-partial-size</td>
<td class="org-left">これを超えるサイズのファイルは部分的にプレビューする</td>
</tr>


<tr>
<td class="org-left">consult-preview-partial-chunk</td>
<td class="org-left">部分的にプレビューする際のファイル部分のサイズ</td>
</tr>


<tr>
<td class="org-left">consult-preview-variables</td>
<td class="org-left">プレビュー中にバインドする変数のalist</td>
</tr>


<tr>
<td class="org-left">consult-project-buffer-sources</td>
<td class="org-left">仮想的なプロジェクトバッファーソースのリスト</td>
</tr>


<tr>
<td class="org-left">consult-project-function</td>
<td class="org-left">カレントプロジェクトのルートをリターンする関数</td>
</tr>


<tr>
<td class="org-left">consult-register-prefix</td>
<td class="org-left">補完中のレジスターキーのプレフィックス文字列</td>
</tr>


<tr>
<td class="org-left">consult-ripgrep-args</td>
<td class="org-left">ripgrepにたいするコマンドライン引数</td>
</tr>


<tr>
<td class="org-left">consult-themes</td>
<td class="org-left">選択用に与えられるテーマのリスト</td>
</tr>


<tr>
<td class="org-left">consult-widen-key</td>
<td class="org-left">補完中にwidenするキー</td>
</tr>
</tbody>
</table>

## プロジェクトのサポート

<!-- Multiple Consult search commands like `consult-grep` try to discover the current project and search in the project top level directory by default, if a project is found. Otherwise they fall back to the `default-directory`. By default, Consult uses the Emacs built-in project discovery support (`project-current` and `project-root`). It is possible to configure alternative methods via the customization variable `consult-project-function`. -->

Consultに複数ある検索コマンドのうち、`consult-grep`のようにカレントプロジェクトを見つけ出して、もし見つかったらデフォルトではプロジェクトのトップレベルのディレクトリーを検索するコマンドがある。それ以外の場合には`default-directory`にフォールバックするコマンドだ。デフォルトではConsultはEmacsのビルトインのプロジェクト発見サポート(`project-current`と`project-root`)を使用する。カスタマイズ変数`consult-project-function`を介して代替えの手法を設定することができる。

```lisp
    ;; オプションで別プロジェクトのルート関数を設定
    ;; 1. project.el (デフォルト)
    (setq consult-project-function #'consult--default-project--function)
    ;; 2. vc.el (vc-root-dir)
    (setq consult-project-function (lambda (_) (vc-root-dir)))
    ;; 3. locate-dominating-file
    (setq consult-project-function (lambda (_) (locate-dominating-file "." ".git")))
    ;; 4. projectile.el (projectile-project-root)
    (autoload 'projectile-project-root "projectile")
    (setq consult-project-function (lambda (_) (projectile-project-root)))
    ;; 5. プロジェクトサポートを無効にする
    (setq consult-project-function nil)
```

## 個々のコマンドの微調整

<!-- **NOTE:** Consult supports fine-grained customization of individual commands. This configuration feature exists for experienced users with special requirements. There is the [Consult wiki](https://github.com/minad/consult/wiki), where we collect further configuration examples. -->

**注意:** Consultは個別のコマンドにたいするきめ細かなカスタマイズをサポートしている。この設定機能は経験を積んだユーザーの特化した要求に応えるために存在する機能だ[Consult wiki](https://github.com/minad/consult/wiki)には更に多くのコンフィグ例が集められている。

<!-- Commands and buffer sources allow flexible, individual customization by using the `consult-customize` macro. You can override any option passed to the internal `consult--read` API. Note that since `consult--read` is part of the internal API, options could be removed, replaced or renamed in future versions of the package. -->

`consult-customize`マクロを使用すればコマンドやバッファーソースにたいして、個別に柔軟なカスタマイズが可能になる。内部APIの`consult--read`に渡すすべてのオプションはオーバーライド可能だ。`consult--read`な内部APIなので、このパッケージの将来のバージョンにおいて削除、置き換え、改名される可能性があることに注意して欲しい。

<!-- Useful options are: -->

以下に役に立つであろうオプションを挙げておこう:

<!-- -   `:prompt` set the prompt string -->
<!-- -   `:preview-key` set the preview key, default is `consult-preview-key` -->
<!-- -   `:initial` set the initial input -->
<!-- -   `:initial-narrow` set the initial narrow key -->
<!-- -   `:default` set the default value -->
<!-- -   `:history` set the history variable symbol -->
<!-- -   `:add-history` add items to the future history, for example symbol at point -->
<!-- -   `:sort` enable or disable sorting -->
<!-- -   `:group` set to nil to disable candidate grouping and titles. -->
<!-- -   `:inherit-input-method` set to non-nil to inherit the input method. -->

-   `:prompt` プロンプト文字列をセット

-   `:preview-key` プレビューキーをセット(デフォルトは`consult-preview-key`)

-   `:initial` 初期入力をセット

-   `:initial-narrow` 初期のナローキーをセット

-   `:default` デフォルト値をセット

-   `:history` ヒストリー変数のシンボルをセット

-   `:add-history` 未来のヒストリーにアイテム(たとえばポイント位置のシンボル)を追加

-   `:sort` ソートの有効/無効

-   `:group` `nil`にセットすると候補のグルーピングとタイトルが無効になる

-   `:inherit-input-method` 非`nil`にすると入力メソッドを継承する

```lisp
    (consult-customize
     ;; `consult-theme'のプレビューを完全に無効にする
     consult-theme :preview-key nil
     ;; `consult-buffer'のプレビューをキー`M-.'にセット
     consult-buffer :preview-key "M-."
     ;; `consult-line'のプロンプト変更、プレビュー用に複数キーバインディングを指定
     ;; `minibuffer-local-completion-map'や`vertico-map'でプレビューや次候補を
     ; 選択するために<S-up>と<S-down>のバインドが必要なことに注意
     consult-line :prompt "Search: "
     :preview-key '("S-<down>" "S-<up>"))
```

<!-- The configuration values are evaluated at runtime, just before the completion session is started. Therefore you can use for example `thing-at-point` to adjust the initial input or the future history. -->

この設定値は実行時、補完セッションの開始直前に評価される。つまり初期入力や未来のヒストリーの調節に、たとえば`thing-at-point`を使うことができるのだ。

```lisp
    (consult-customize
     consult-line
     :add-history (seq-some #'thing-at-point '(region symbol)))
    
    (defalias 'consult-line-thing-at-point 'consult-line)
    
    (consult-customize
     consult-line-thing-at-point
     :initial (thing-at-point 'symbol))
```

<!-- Generally it is possible to modify commands for your individual needs by the following techniques: -->

一般的には以下のテクニックにしたがえば、あなた個人のニーズに合わせてコマンドを変更できるだろう。

<!-- 1.  Use `consult-customize` in order to change the command or source settings. -->
<!-- 2.  Create your own wrapper function which passes modified arguments to the Consult functions. -->
<!-- 3.  Create your own buffer [multi sources](#multiple-sources) for `consult-buffer`. -->
<!-- 4.  Create advices to modify some internal behavior. -->
<!-- 5.  Write or propose a patch. -->

1.  コマンドやソースのセッティングの変更には`consult-customize`を使う

2.  変更した引数をConsultの関数に渡すラップ関数を独自に作成する

3.  `consult-buffer`用には独自に[複数ソース](#複数ソース)のバッファーを作成する

4.  内部的な挙動の変更にはadviceを作成する

5.  パッチの記述や提案


# 推奨パッケージ

<!-- I use and recommend this combination of packages: -->

以下の組み合わせはわたしが使っているお勧めのパッケージだ:

<!-- -   consult: This package -->
<!-- -   [vertico](https://github.com/minad/vertico): Fast and minimal vertical completion system -->
<!-- -   [marginalia](https://github.com/minad/marginalia): Annotations for the completion candidates -->
<!-- -   [embark and embark-consult](https://github.com/oantolin/embark): Action commands, which can act on the completion candidates -->
<!-- -   [orderless](https://github.com/oantolin/orderless): Completion style which offers flexible candidate filtering -->
<!-- -   [wgrep](https://github.com/mhayashi1120/Emacs-wgrep): Editing of grep buffers. Use with `consult-grep` via `embark-export`. -->


-   consult: このパッケージ

-   [vertico](https://github.com/minad/vertico): 高速で最小限の垂直補完システム

-   [marginalia](https://github.com/minad/marginalia): 補完候補用の注釈

-   [embark and embark-consult](https://github.com/oantolin/embark): 補完候補に作用可能なアクションコマンド

-   [orderless](https://github.com/oantolin/orderless): 候補にたいして柔軟なフィルタリングを提供する補完スタイル

-   [wgrep](https://github.com/mhayashi1120/Emacs-wgrep): grepバッファーの編集。`embark-export`を通じて`consult-grep`で使用する

<!-- There exist multiple fine completion UIs beside Vertico, which are supported by Consult. Give them a try and find out which interaction model fits best for you. -->

Vertico以外にもConsultがサポートしている優れた補完UIが複数存在する。是非試してみて、あなたに最適な対話モデルを見つけ出して欲しい。

<!-- -   The builtin completion UI, which pops up the `*Completions*` buffer. -->
<!-- -   The builtin `icomplete-vertical-mode`. -->
<!-- -   [mct by Protesilaos Stavrou](https://git.sr.ht/~protesilaos/mct): Minibuffer and Completions in Tandem, which builds on the default completion UI. -->


-   `*Completions*`バッファーをポップアップするビルトインの補完UI

-   ビルトインの`icomplete-vertical-mode`

-   [mct by Protesilaos Stavrou](https://git.sr.ht/~protesilaos/mct): デフォルトの補完UI上に構築されたミニバッファーと補完の連携

<!-- Note that all packages are independent and can be exchanged with alternative components, since there exist no hard dependencies. Furthermore it is possible to get started with only default completion and Consult and add more components later to the mix. For example you can omit Marginalia if you don't need annotations. I highly recommend the Embark package, but in order to familiarize yourself with the other components, you can first start without it - or you could use with Embark right away and add the other components later on. -->

パッケージはすべて独立しており強制依存関係は存在しないので、代替えコンポーネントに置き換え可能であることに注目して欲しい。更にデフォルトの補完とConsultで開始して、後からコンポーネントを追加して組み合わせることもできるのだ。たとえば注釈が不要ならMarginaliaは省略してもよいだろう。Embarkパッケージについては強く推奨するが、他のコンポーネントと親しむためにまずはEmbark抜きで始めてみるか、あるいはまずEmbarkを使ってみて後から他のコンポーネントを追加してみるのもよいと思う。

<!-- We document a [list of auxiliary packages](https://github.com/minad/consult/wiki/Auxiliary-packages) in the Consult wiki. These packages integrate Consult with special programs or with other packages in the wider Emacs ecosystem.  -->

Consult wikiに[list of auxiliary packages](https://github.com/minad/consult/wiki/Auxiliary-packages)としてパッケージを文書化しておいた。これらは特別なプログラムや、Emacsエコシステムの他のより広範なパッケージとConsultを統合するためのパッケージだ。

# バグレポート

<!-- If you find a bug or suspect that there is a problem with Consult, please carry out the following steps: -->

Consultの問題が疑われるバグを見つけたら、どうか以下のステップを踏襲していただきたい:

<!-- 1.  **Search through the issue tracker** if your issue has been reported before (and has been resolved eventually) in the meantime. -->
<!-- 2.  **Remove all packages involved in the suspected bug from your installation.** -->
<!-- 3.  **Reinstall the newest version of all relevant packages**. Updating alone is not sufficient, since package.el sometimes causes miscompilation. The list of packages includes Consult, Compat, Vertico or other completion UIs, Marginalia, Embark and Orderless. -->
<!-- 4.  Either use the default completion UI or ensure that exactly one of `vertico-mode`, `mct-mode`, or `icomplete-mode` is enabled. The unsupported modes `selectrum-mode`, `ivy-mode`, `helm-mode`, `ido-mode` and `ido-ubiquitous-mode` must be disabled. -->
<!-- 5.  Ensure that the `completion-styles` variable is properly configured. Try to set `completion-styles` to a list including `substring` or `orderless`. -->
<!-- 6.  Try to reproduce the issue with the newest stable Emacs version. Start a bare bone Emacs instance with `emacs -Q` on the command line. Execute the following minimal code snippets in the scratch buffer. This way we can exclude side effects due to configuration settings. If other packages are relevant to reproduce the issue, include them in the minimal configuration snippet. -->

1.  あなたの問題が以前に報告済みの問題かどうか(そして最終的に解決されていないかどうか)を**issueトラッカーで検索する**。

2.  **インストールしたパッケージからバグが疑われるパッケージをすべて削除する**。

3.  **関連パッケージの最新バージョンを再インストールする**。"package.el"は時々コンパイルミスを起こすので、単独で更新しても十分ではない。パッケージのリストにはConsult、Compat、Vertico、その他の補完UI、Marginalia、Embark、Orderlessが含まれる。

4.  デフォルトの補完UIを使用しているか、あるいは`vertico-mode`、`mct-mode`、`icomplete-mode`のいずれかが1つだけが有効になっていることを確認する。サポートされていない`selectrum-mode`、`ivy-mode`、`helm-mode`、`ido-mode`、`ido-ubiquitous-mode`は無効にしておかなければならない。

5.  変数`completion-styles`が正しく設定されているか確認する。`substring`または`orderless`を含めたリストを`completion-styles`にセットしてみる。

6.  Emacsの最新の安定バージョンで問題の再現を試みる。コマンドラインから`emacs -Q`により必要最低限の機能のEmacsインスタンスを開始する。以下の最小限のコードスニペットをscratchバッファーで実行する。この方法ならコンフィグのセッティングによる副作用を除外できるだろう。問題の再現に他のパッケージが関係しているようなら、それらを最小限の設定スニペットに含める。

<!-- Minimal setup with Vertico for `emacs -Q`: -->

以下はVerticoでの`emacs -Q`用の最小セットアップ:

```lisp
    (package-initialize)
    (require 'consult)
    (require 'vertico)
    (vertico-mode)
    (setq completion-styles '(substring basic))
```

<!-- Minimal setup with the default completion system for `emacs -Q`: -->

以下はデフォルト補完システムでの`emacs -Q`用の最小セットアップ:

```lisp
    (package-initialize)
    (require 'consult)
    (setq completion-styles '(substring basic))
```

<!-- Please provide the necessary important information with your bug report: -->

以下は必要となる重要な情報なので、是非バグレポートと一緒に提供していただきたい:

<!-- -   The minimal configuration snippet used to reproduce the issue. -->
<!-- -   Your completion UI (Default completion, Vertico, Mct or Icomplete). -->
<!-- -   A stack trace in case the bug triggers an exception. -->
<!-- -   Your Emacs version, since bugs may be fixed or introduced in newer versions. -->
<!-- -   Your operating system, since Emacs behavior varies subtly between Linux, Mac and Windows. -->
<!-- -   The package manager, e.g., straight.el or package.el, used to install the Emacs packages, in order to exclude update issues. Did you install Consult as part of the Doom Emacs distribution? -->
<!-- -   Do you use Evil? Consult does not provide Evil integration out of the box, but there is some support in [evil-collection](https://github.com/emacs-evil/evil-collection). -->

-   問題を再現可能な最小限の設定スニペット

-   補完UI(デフォルトの補完か、Vertico、Mct、あるいはIcompleteか

-   例外をトリガーするバグの場合にはスタックトレース

-   Emacsのバージョン(新しいバージョンではバグが訂正された、あるいは紛れ込んだのかもしれないので)

-   オペレーティングシステム(Emacs の挙動はLinux、Mac、Windowsの間で微妙に異なるので)

-   Emacsパッケージのインストールに使用したパッケージマネージャー(たとえば"straight.el"や"package.el"など)。これは更新における問題を除外するためだ。あなたはDoom Emacs ディストリビューションの一部としてConsultをインストールしたのか?

-   Evilを使用していないだろうか? Consultはそのまま使用できるEvil統合は提供していないが、[evil-collection](https://github.com/emacs-evil/evil-collection)弐いくつかのサポートが存在する。

<!-- When evaluating Consult-related code snippets you should enable [lexical binding](https://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html). Consult often relies on lambdas and lexical closures. -->

Consult関連のコードスニペットを評価する際には[lexical binding](https://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html)を有効にすること。Consultはlambdaやclosureに依存することがよくあるからだ。

# ハック

## 非同期補完コマンドの作成

<!-- If you have a completion source that's both dynamic and expensive to generate, `completing-read` may not be the best choice. Instead, `consult--read` serves as a thin wrapper around `completing-read` that provides this functionality. For example, consider the following slow script that splits its input on space: -->

動的かつ生成が高価であるようなソースの場合には、`completing-read`が最良の選択ではないかもしれない。`completing-read`の薄いラッパーである`consult--read`もこの機能を提供しており、その役目を任せられる筈だ。たとえば入力をスペースで分割する以下のような低速なスクリプトで考えてみると:

```shell:testibus
    #!/usr/bin/env bash
    # simulate work
    sleep .1
    # 補完候補の生成
    printf "%s\n" "$*" | tr " " "\n" | sort
```

<!-- Let's assume this script is callable as `testibus hello world`. To have Consult use it for completion, use `consult--process-collection`: -->

このスクリプトを`testibus hello world`のように呼び出すとしよう。これをConsultの補完に用いるために`consult--process-collection`を使用する:

```lisp
    (consult--read
     (consult--process-collection
      (lambda (input) (list "testibus" (string-trim input))))
     :prompt "run testibus: ")
```

<!-- If the completion candidates are generated by Lisp instead, use `consult--dynamic-collection`: -->

かわりにLispで補完候補を生成する場合には`consult--dynamic-collection`を使えばよい:

```lisp
    (consult--read
     (consult--dynamic-collection
      (lambda (input)
        (sleep-for 0.1) ;; Simulate work
        (split-string input nil t)))
     :prompt "run testibus: ")
```

<!-- `consult--dynamic-collection` can take a function with a callback such that the completion UI can update for long running computations. -->

計算に時間を要する処理にたいして補完UIが更新できるように、`consult--dynamic-collection`はコールバックを受け取ることができる。

```
    (consult--read
     (consult--dynamic-collection
      (lambda (input callback)
        (dotimes (i 3)
          (sleep-for 0.1) ;; 処理のシミュレート
          (funcall callback (mapcar (lambda (s) (format "%s%s" s i))
                                    (split-string input nil t))))))
     :prompt "run testibus: ")
```

<!-- The asynchronous completion collections `consult--dynamic-collection` and `consult--process-collection` can be used for `consult--multi` sources. Specify them as `:async` field of the source plist. -->


非同期で補完を収集する`consult--dynamic-collection`および`consult--process-collection`は、ソース`consult--multi`にたいして使用できるのだ。ソースplistの`:async`フィールドでこれらを指定すればよいだろう。

## ライブプレビュー

<!-- Implementing live preview requires the definition of a state or preview function as defined by `consult--with-preview`. The preview function receives the candidate and some action to perform (e.g., `'preview`). In its simplest form supporting live preview, it looks something like this: -->

ライブプレビューの実装には状態(state)の定義や`consult--with-preview`によって定義されるプレビュー関数が必要だ。プレビュー関数の役目は候補を受け取って、何らかの処理(つまり`'preview`)を行うことである。ライブプレビューをサポートする最もシンプルな形式は以下のようになるだろう:

```lisp
    (defun testibus--preview (action cand)
      (pcase action
        ('preview
         (with-current-buffer-window " *testibus*" 'action nil
           (erase-buffer)
           (insert (format "input: %s\n" cand))))))
```

<!-- See the docstring of `consult--with-preview` for the lifecycle of the action argument. Once defined, we can use this preview function in `consult--read`: -->

action引数のライフサイクルについては`consult--with-preview`のdoc文字列を参照して欲しい。一度定義してしまえば`consult--read`でプレビュー関数として使用できる:

```lisp
    (consult--read
     (consult--dynamic-collection
      (lambda (input callback)
        (dotimes (i 3)
          (sleep-for 0.1) ;; Simulate work
          (funcall callback (mapcar (lambda (s) (format "%s%s" s i))
                                    (split-string input nil t))))))
     :prompt "run testibus: "
     :state #'testibus--preview)
```

# 貢献してくれる人たちへ

<!-- Consult is a community effort, please participate in the discussions. Contributions are welcome, but you may want to discuss potential contributions first. Since this package is part of [GNU ELPA](https://elpa.gnu.org/packages/consult.html) contributions require a copyright assignment to the FSF. -->

Consultはコミュニティの努力が産み出した。是非議論に参加して欲しい。貢献は大歓迎だが、まずは貢献の可能性について議論したいかもしれない。このパッケージは[GNU ELPA](https://elpa.gnu.org/packages/consult.html)の一部なので、貢献にはFSFへの権利の譲渡が必要になる。

<!-- If you have a proposal, take a look at the [Consult issue tracker](https://github.com/minad/consult/issues) and the [Consult wishlist](https://github.com/minad/consult/issues/6). There have been many prior feature discussions. Please search through the issue tracker, maybe your issue or feature request has already been discussed. You can contribute to the [Consult wiki](https://github.com/minad/consult/wiki), in case you want to share small configuration or command snippets.  -->

何か提案がある場合には[Consult issue tracker](https://github.com/minad/consult/issues)および[Consult wishlist](https://github.com/minad/consult/issues/6)を確認して欲しい。機能に関する以前の議論が多数見つかる筈だ。issueトラッカーを検索して欲しい。もしかしたらあなたの問題や機能リクエストは、既に以前議論されていたかもしれないからだ。小さ目のコンフィグやコマンドスニペットを共有したい場合には、[Consult wiki](https://github.com/minad/consult/wiki)に投稿して欲しい。

# 謝辞

<!-- This package took inspiration from [Counsel](https://github.com/abo-abo/swiper#counsel) by Oleh Krehel. Some of the Consult commands originated in the Counsel package or the wiki of the Selectrum package. This package exists only thanks to the help of these great contributors and thanks to the feedback of many users. Thank you! -->

これはOleh Krehel氏の[Counsel](https://github.com/abo-abo/swiper#counsel)から発想を得て作成されたパッケージだ。一部のConsultコマンドにはCounselパッケージや、Selectrumパッケージのwikiを起源するコマンドもある。このパッケージの唯一の存在意義はこれらの偉大なパッケージを寄贈してくれた人たち、そしてたくさんのユーザーからのフィードバックに感謝を表すことにある。ありがとう!

<!-- Code contributions: [Aymeric Agon-Rambosson](https://github.com/aagon), [Amos Bird](https://github.com/amosbird), [Ashton Wiersdorf](https://github.com/ashton314), [Adam Spiers](https://github.com/aspiers/), [Augusto Stoffel](https://github.com/astoff), [Clemens Radermacher](https://github.com/clemera/), [Zhengyi](https://github.com/fuzy112), [Geoffrey Lessel](https://github.com/geolessel), [Illia Ostapyshyn](https://github.com/iostapyshyn), [jakanakaevangeli](https://github.com/jakanakaevangeli), [JD Smith](https://github.com/jdtsmith), [Jean-Philippe Bernardy](https://github.com/jyp), [mattiasdrp](https://github.com/mattiasdrp), [Mohamed Abdelnour](https://github.com/mohamed-abdelnour), [Mohsin Kaleem](https://github.com/mohkale), [Fox Kiester](https://github.com/noctuid), [Omar Antolín Camarena](https://github.com/oantolin/), [Earl Hyatt](https://github.com/okamsn/), [Omar Polo](https://github.com/omar-polo), [Piotr Kwiecinski](https://github.com/piotrkwiecinski), [Robert Weiner](https://github.com/rswgnu), [Sergey Kostyaev](https://github.com/s-kostyaev/), [Alexandru Scvorțov](https://github.com/scvalex), [Tecosaur](https://github.com/tecosaur), [Sylvain Rousseau](https://github.com/thisirs), [Tom Fitzhenry](https://github.com/tomfitzhenry/), [Iñigo Serna](https://hg.serna.eu) and [Alex Kreisher](https://github.com/akreisher). -->

コードに貢献してくれた人たち: [Aymeric Agon-Rambosson](https://github.com/aagon)、[Amos Bird](https://github.com/amosbird)、[Ashton Wiersdorf](https://github.com/ashton314)、[Adam Spiers](https://github.com/aspiers/)、[Augusto Stoffel](https://github.com/astoff)、[Clemens Radermacher](https://github.com/clemera/)、[Zhengyi](https://github.com/fuzy112)、[Geoffrey Lessel](https://github.com/geolessel)、[Illia Ostapyshyn](https://github.com/iostapyshyn)、[jakanakaevangeli](https://github.com/jakanakaevangeli)、[JD Smith](https://github.com/jdtsmith)、[Jean-Philippe Bernardy](https://github.com/jyp)、[mattiasdrp](https://github.com/mattiasdrp)、[Mohamed Abdelnour](https://github.com/mohamed-abdelnour)、[Mohsin Kaleem](https://github.com/mohkale)、[Fox Kiester](https://github.com/noctuid)、[Omar Antolín Camarena](https://github.com/oantolin/)、[Earl Hyatt](https://github.com/okamsn/)、[Omar Polo](https://github.com/omar-polo)、[Piotr Kwiecinski](https://github.com/piotrkwiecinski)、[Robert Weiner](https://github.com/rswgnu)、[Sergey Kostyaev](https://github.com/s-kostyaev/)、[Alexandru Scvorțov](https://github.com/scvalex)、[Tecosaur](https://github.com/tecosaur)、[Sylvain Rousseau](https://github.com/thisirs)、[Tom Fitzhenry](https://github.com/tomfitzhenry/)、[Iñigo Serna](https://hg.serna.eu)、[Alex Kreisher](https://github.com/akreisher)

<!-- Advice and useful discussions: [Enrique Kessler Martínez](https://github.com/Qkessler), [Adam Porter](https://github.com/alphapapa/), [Bruce d'Arcus](https://github.com/bdarcus), [Clemens Radermacher](https://github.com/clemera/), [Dmitry Gutov](https://github.com/dgutov/), [Howard Melman](https://github.com/hmelman/), [Itai Y. Efrat](https://github.com/iyefrat), [JD Smith](https://github.com/jdtsmith), [Manuel Uberti](https://github.com/manuel-uberti/), [Stefan Monnier](https://github.com/monnier/), [Omar Antolín Camarena](https://github.com/oantolin/), [Steve Purcell](https://github.com/purcell/), [Radon Rosborough](https://github.com/raxod502), [Tom Fitzhenry](https://github.com/tomfitzhenry/) and [Protesilaos Stavrou](https://protesilaos.com). -->

有意義な議論やアドバイスを与えてくれた人たち: [Enrique Kessler Martínez](https://github.com/Qkessler)、[Adam Porter](https://github.com/alphapapa/)、[Bruce d'Arcus](https://github.com/bdarcus)、[Clemens Radermacher](https://github.com/clemera/)、[Dmitry Gutov](https://github.com/dgutov/)、[Howard Melman](https://github.com/hmelman/)、[Itai Y. Efrat](https://github.com/iyefrat)、[JD Smith](https://github.com/jdtsmith)、[Manuel Uberti](https://github.com/manuel-uberti/)、[Stefan Monnier](https://github.com/monnier/)、[Omar Antolín Camarena](https://github.com/oantolin/)、[Steve Purcell](https://github.com/purcell/)、[Radon Rosborough](https://github.com/raxod502)、[Tom Fitzhenry](https://github.com/tomfitzhenry/)、[Protesilaos Stavrou](https://protesilaos.com)