GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Conclusion.html ・ emacs-doc.conao3.com

18 結論

これで本入門編の締めくくりとなります。Emacs Lispによるプログラミングについて、値の設定や、自分や友人のための簡単な.emacsファイルの作成、そしてEmacsの簡単なカスタマイズや拡張の作成ができるだけの知識を習得できたはずです。

ここは立ち寄る場所です。あるいは、よろしければ、そのまま先へ進み、独学されるのもよいでしょう。

プログラミングの基本的な仕組みをいくつか学びました。ですが、ほんの一部に過ぎません。まだ触れていない、使い勝手の良い括弧やヒンジが、まだまだたくさんあります。

今すぐ辿れる道筋は、GNU Emacsのソースコード群やThe GNU Emacs Lisp Reference Manualの中にあります。

Emacs Lispのソースコードを読み解くのは、まさに冒険だ。ソースを読み進めていて、見慣れない関数や式に出会ったら、それが何をするものなのかを突き止めたり、調べたりする必要がある。

リファレンスマニュアルをご覧ください。これはEmacs Lispに関する、網羅的かつ完全で、比較的読みやすい解説書です。専門家だけでなく、あなたと同等の知識を持つ方に向けて書かれています。(リファレンスマニュアルは、標準のGNU Emacsディストリビューションに同梱されています。この入門書と同様にTexinfoソースファイルとして提供されているため、コンピュータ上で閲覧できるほか、組版された印刷本としても読むことができます。)

GNU Emacsに組み込まれているもう一つのヘルプ、すなわちすべての関数と変数の組み込みドキュメントと、ソースへ案内してくれるプログラム xref-find-definitions を参照してください。

私がどのようにソースを調査しているか、一例を挙げます。その名の通り、simple.elはかなり前に最初に調べたファイルです。たまたまsimple.elに含まれる関数の中には複雑なもの、あるいは少なくとも一見して複雑に見えるものがあります。例えば、open-lineの関数は複雑に見えます。

forward-sentence関数のときと同様に、この関数もじっくりと読み進めてみるとよいでしょう。(forward-sentence関数を参照してください。)あるいは、その関数を飛ばして、split-lineなどの別の関数に目を向けてもよいでしょう。すべての関数を読み通す必要はありません。count-words-in-defunによれば、split-line関数には102個の単語と記号が含まれています。

短いながらも、split-lineにはまだ学習していない式skip-chars-forward、indent-to、current-column、insert-and-inheritが含まれています。

skip-chars-forward 関数を例に考えてみましょう。GNU Emacs では、C-h f (describe-function) と関数名を入力することで、skip-chars-forward について詳しく調べることができます。これにより、関数のドキュメントが表示されます。

indent-toのような名前の付いた関数が何を行うのか、推測できるかもしれません。あるいは、調べてみることもできます。ちなみに、describe-function関数自体はhelp.elに含まれています。これは、長いながらも解読可能な関数の一つです。C-h fコマンドを使えば、describe-functionを調べることができます!

この例では、コードがLispであるため、*Help*バッファには関数のソースコードが含まれるライブラリ名が格納されています。ライブラリ名にポイントを置き、RETキー(この場合はhelp-followにバインドされています)を押すと、M-.(xref-find-definitions)と同様に、直接ソースコードへ移動できます。

describe-function の定義では、標準の文字コードを使わずに interactive 式をカスタマイズする方法と、一時バッファを作成する方法が示されています。

(indent-to 関数は Emacs Lisp ではなく C で記述されており、組み込み関数です。適切に設定されていれば、help-follow や xref-find-definitions でそのソースコードを参照できます。)

xref-find-definitions を使えば関数のソースコードを参照でき、これは M-. にバインドされています。最後に、Info でマニュアルを開き、i (Info-index) と関数名を入力するか、あるいは印刷版マニュアルの索引で関数を調べることで、リファレンスマニュアルの記述を確認できます。

同様に、insert-and-inheritが何を意味するのかも分かります。

その他の興味深いソースファイルには、paragraphs.el、loaddefs.el、loadup.elなどがあります。paragraphs.elファイルには、短くて分かりやすい関数のほか、長めの関数も含まれています。loaddefs.elファイルには、数多くの標準的なオートロードやキーマップが収録されています。私はそのすべてに目を通したことはなく、一部だけを見てきました。loadup.elはEmacsの標準部分をロードするファイルであり、Emacsがどのように構築されているかについて多くのことを教えてくれます。(ビルドに関する詳細は、The GNU Emacs Lisp Reference ManualのBuilding Emacsを参照してください。)

先ほど申し上げた通り、基礎的な事項をいくつか学んでいただきました。しかし、非常に重要な点として、プログラミングの主要な側面にはほとんど触れていません。あらかじめ定義されたsort関数を使うこと以外、情報の並べ替え方については何も述べていません。変数やリストを使うこと以外、情報の保存方法についても何も述べていません。そして、プログラムを書くプログラムをどう書くかについても、何も述べていません。これらは別の、異なる種類の本、そして異なる種類の学習で扱うべきテーマです。

あなたは、GNU Emacsを用いた多くの実践的な作業に十分対応できる程度まで習得しました。あなたは、第一歩を踏み出したのです。これで、始まりは終わりました。