Emacsの既存の関数の定義を見たいです。これは可能ですか?
C-h d function-name RET
を試しましたが、実際の関数自体ではなく、関数のドキュメント文字列のみが返されます。
関数の定義全体を返すbashのtype
コマンドに似たものを考えています。
(恥ずかしい裏話:.emacs
ファイルの動作中の関数を動作していないバージョンで誤って上書きしました。元の関数はまだメモリにあります!そして動作します!しかし、lifeにはできません=私のやり方を覚えています。)
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"))