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


10

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

私は試しましたC-h d function-name RETが、実際の関数自体ではなく、関数の説明文字列のみを返します。

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

(恥ずかしい裏話:機能して.emacsいないバージョンを使用して、ファイル内の機能している関数を誤って上書きしました。元の関数はまだメモリ内にあります。そして、機能します!しかし、私は一生、どのようにそれを実行したか思い出せません。)


1
.emacsバッファで開いたままにしている場合は、クレイジーなように元に戻してみてください。
Gilles「SO-邪悪になるのをやめよう」

回答:


10

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

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

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


1
ありがとうございました!(symbol-function 'function-name)まさに私が探していたものです!また、C関数のソースが本当に必要な場合は、Olegの回答からの情報を使用してソースを取得できるようです。
Micah R Ledbetter

ありがとう!また、関数がオートロードされている場合は、ソースコードを取得する前に一度呼び出す必要があります。
ゲルハルトバーガー2014年

3

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

ドキュメントから:

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

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

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

うーん。これは知っておくと便利ですが、組み込み関数でのみ機能すると思います。これは私が探していたものではありません。
Micah R Ledbetter

1
ユーザー定義関数でも機能します
Oleg Pavliv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.