組み込み関数と変数のソースコードに移動する


9

一日中、私は常に使用していますC-h fC-h vdescribe-functiondescribe-variable関数や変数のドキュメントを検索します)。多くの場合、必要な情報がすべて得られない場合は、次の最後にあるファイルリンクをクリックします。

some-random-command is an interactive compiled Lisp function in `some-mode.el'.

ソースコードに移動します。これはインストール済みパッケージでは機能しますが、組み込みパッケージでは機能しないようです。たとえば、コマンドのヘルプページの上部に表示されるのは、次のdescribe-functionとおりです。

describe-function is an interactive compiled Lisp function.

ソースコードへのリンクなし。組み込みパッケージのソースコードにすばやく移動する方法はありますか?

たとえば、ソースコードを見つけて、/usr/share/emacs/24.5/lispそのディレクトリにすばやくアクセスする方法はいくつも考えられることは承知していますが、ソースコード。ありがとうございました!


5
M-x find-function; M-x find-variable; M-x find-face; M-x find-library。私は常にEmacsのフルインストールを使用してすべてにアクセスできるようにしています。自分のEmacsをビルドした直後に、Cソースコードをコピーしてその場所を設定し、Cソースコードの定義も見つけることができます。変数find-function-C-source-directoryを参照して、コピーした後のCソースコードの場所を設定します。
法律家、2016年

1
Emacsののmasterブランチを使用して、私は次を得るM-x describe-function説明機能「ヘルプfns.el」でインタラクティブな自動ロードコンパイルされたLisp関数です。 そこからクリック(またはEnterキーを押す)help-fns.elすると、コードの該当するセクションに移動します。おそらく、複数のEmacsバージョンがあり、現在使用しているものにはすべてのソースコードがインストールされていませんか?
法律家、2016年

emacs -Q(initファイルなしで)Emacsを起動したときにこの動作が発生する場合、またはで始まるレシピで再現できる場合emacs -Q(たとえば、どのライブラリをロードするか、どのようにロードするかなど)、バグの報告を検討してください。レポート:M-x report-emacs-bug
Drew

4
nb IIRC、DebianのEmacsパッケージ(おそらく他のOSも)は、.elファイル(オプションとして扱われる)を.elcファイル(必須)から分離しているため、1つ以上の追加パッケージをインストールしてそれらを取得する必要があります。OSパッケージマネージャーからEmacsを入手した場合は、おそらくこれで説明できます。
phils 2016年

1
バイナリの名前(実行権限を持つ)(emacsまたはemacsclient)に対してgrep(またはその他の検索ユーティリティ)を実行し、ハードドライブ上のどこにあるかを確認できます。私は自分の専用フォルダに完全に別々に私のものを保存します。たとえば、オペレーティングシステムに同梱されているバージョン- /usr/bin/emacs/usr/bin/emacsclient、および.appで終わるOSXアプリケーションフォルダーに適切にパッケージ化されたバージョンがあります-つまり、/Applications/Emacs.app(Emacs.app 内には、バイナリとすべてのソースコードファイル)。
法律家、2016年

回答:


7

ファイル名のない「インタラクティブコンパイルされたLisp関数」(または変数についても同様)が時々見られる理由は、関数がバイトコンパイルされたファイルからロードされ、対応するElispソースファイルが存在しないためです。ソースコードを表示するには、Emacsがソースコードを見つけられる必要があります。

多くのディストリビューションは、Lispソースファイルを個別のパッケージで出荷しています。たとえば、Debianおよび派生物では、をインストールしemacs24-elます。ソースからEmacsをビルドする場合make install、Elispソースをコピーします。

プリミティブ(サブルーチンと特殊な形式)のソースコードを見たい場合は、EmacsがCソースを見つけられるようにする必要があります。ソースからインストールしない限り、通常は利用できません。

Emacsは、のディレクトリでLispソースを探しますload-pathfoo.elc,ファイルから読み込まれた関数または変数の場合は、foo.elまたはfoo.el.gzです。EmacsはでCソースをsource-directory探し、ソースファイルが見つからない場合は別のディレクトリを指定するように求めます。


私がソースからこのバージョンのEmacsをビルドしたことを誓ったかもしれませんがM-x emacs-version、それを最後に「Debianによって変更されました」と言うとき、私は私のOS(Ubuntu)のパッケージマネージャーからのバージョンを使用していることを示しますよね?
elethan

@elethan「Debianによって変更されました」と表示されている場合は、Ubuntuパッケージをインストールまたは少なくともビルドしました。ソースからビルドした可能性があります(おそらく、Ubuntuリリースのバージョンよりも新しいバージョンが必要だったためです)。あなたは走っています/usr/bin/emacs/usr/local/bin/emacs
Gilles「SO-邪悪なことをやめなさい」

1

ソースコードにすばやくジャンプする方法を探している場合は、カーソルの下のシンボルの定義にジャンプする方法もfind-function-at-pointありfind-variable-at-pointます。たとえば、それらをCh CfやCh Cvにバインドできます。

または、M-を使用するelisp-slime-navを試すこともできます。シンボルの定義にジャンプし、M-に戻ります-変​​数、関数、ライブラリ、フェースに移動します-https://github.com/purcell/elisp-slime-nav/

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