web-dev-qa-db-ja.com

Emacsで既存の関数の定義を印刷する方法はありますか?

Emacsの既存の関数の定義を見たいです。これは可能ですか?

C-h d function-name RETを試しましたが、実際の関数自体ではなく、関数のドキュメント文字列のみが返されます。

関数の定義全体を返すbashのtypeコマンドに似たものを考えています。

(恥ずかしい裏話:.emacsファイルの動作中の関数を動作していないバージョンで誤って上書きしました。元の関数はまだメモリにあります!そして動作します!しかし、lifeにはできません=私のやり方を覚えています。)

10

C-h f function-name RETと入力すると、関数のドキュメントと、利用可能な場合は関数ソースへのリンクが表示されます。

関数のソースの場所を取得するために呼び出すことができる簡単なLISP関数はないと思います。ルックアップは、ヘルプシステムの他の部分とかなり絡み合っています。 find-LISP-object-file-nameは、関数のソースがどこにあるかを把握しようとするメイン関数です。

function-nameがプリミティブ(EmacsのCソースで定義されている)でない限り、そのコードは(symbol-function 'function-name)、またはより一般的には(indirect-function'function-name)で見ることができます。ただし、関数がバイトコンパイルされている場合、表示されるのはそのバイトコードだけです。

M-x find-functionポイントの近くの関数の定義を返します。

ドキュメントから:

バッファ内のポイント付近の関数の定義( `function-called-at-point 'で選択)を含むソースファイルを検索し、定義の前にポイントを配置します。バッファがすでに存在する場合は、移動する前にマークを設定します。

Cで実装された関数も含めたい場合は、.emacsファイルに以下を追加する必要があります。

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))
3
Oleg Pavliv