Emacsでファイルを探すには、C-x C-f (find-file)
コマンドを使用します。このコマンドは、長さの問題に対してほぼ正解ですが、完全には一致しません。
find-fileのソースを見てみましょう:
(defun find-file (filename) "Edit file FILENAME. Switch to a buffer visiting file FILENAME, creating one if none already exists." (interactive "FFind file: ") (switch-to-buffer (find-file-noselect filename)))
(find-file
関数定義の最新バージョンでは、複数のファイルを対象とするために任意のワイルドカードを指定できるようになっています。これにより定義が複雑になるため、ここでは関連性がないとして解説を省略します。ソースコードは、M-. (xref-find-definitions) または
C-h f (describe-function)
のいずれかを用いて確認できます。)
提示している定義は、簡潔ながら完全なドキュメントを備えており、コマンドを対話的に使用する際にファイル名の入力を求めるインタラクティブな仕様となっています。定義の本体には、find-file-noselect と switch-to-buffer という2つの関数が含まれています。
C-h f(describe-functionコマンド)に示されているドキュメントによれば、find-file-noselect関数は指定されたファイルをバッファに読み込み、そのバッファを返します。(最新バージョンでは、オプションのwildcards引数のほか、ファイルをリテラルとして読み込むための引数や、警告メッセージを抑制するための引数も追加されています。これらのオプション引数は本説明には関係ありません。)
However, the find-file-noselect function does not
select the buffer in which it puts the file. Emacs does not switch its
attention (or yours if you are using find-file-noselect) to the selected buffer. That is
what switch-to-buffer does: it switches the buffer
to which Emacs attention is directed; and it switches the buffer displayed
in the window to the new buffer. We have discussed buffer switching
elsewhere. (See Switching
Buffers.)
このヒストグラムプロジェクトでは、プログラムが各定義の長さを判定するため、個々のファイルを画面に表示する必要はありません。switch-to-bufferを用いる代わりに、コンピュータプログラムの参照先を別のバッファへ切り替えつつ、それを画面に再表示しないset-bufferを利用できます。したがって、find-fileを呼び出して処理を行うのではなく、独自の式を記述する必要があります。
タスクは簡単です。find-file-noselectとset-bufferを使ってください。