自動ロードはあなたが探しているものではありません。それが行うことは、最初にコードが必要になったときに単純にロードすることです。これは、起動時間を短く保ちながら Emacs の機能を拡張する便利な方法です。
あなたの問題を解決するには、あなたが本当にやりたいことを考えなければなりません: コードの一部をある時点でロードしたいだけですか、それとも にあるすべてのバッファーに対してバッファーローカルなカスタマイズをしたいc-mode
ですか?
.emacs
起動時に Emacs にコードをロードさせたい場合は、コードを直接ファイルに入れるか、load-file
またはrequire
の代わりにor を使用しautoload
ます。
load-file
単純にファイル名を取り、そのファイルに Lisp コードをロードして評価します。したがって、コードが「/path/to/my-c-setup.el」という名前のファイルにある場合、次の行を .emacs に入れると、コードは起動するたびにロードされます:
(load-file "/path/to/my-c-setup.el")
おそらく、ロードするすべてのファイルに絶対パス名を付けたくないでしょう。その場合、load-library
代わりに関数を使用できますload-file
が、変数に格納されているディレクトリのいずれかで指定されたファイル名を見つけようとしますload-path
。
(add-to-list 'load-path "/path/to")
(load-library "my-c-setup.el")
利点は、そのadd-to-list
部分を 1 回だけ実行する必要があり、その後のすべての呼び出しload-library
でそのディレクトリ内のコードを見つけることができることです。
(provide 'feature)
別の方法は提供/要求メカニズムです。.el ファイルに呼び出しを入れることで、いくつかの機能を「提供」することができます。
(provide 'my-c-mode-customizations)
次に(require 'feature)
、.emacs ファイルに次のように記述します。コードも同様にロードされます。
(require 'my-c-mode-customizations)
c-mode
ただし、がバッファーでアクティブ化されたときにのみコードをロードする場合は、Emacs のフックメカニズムを使用してそれを実現します。
フックは、既存のプログラムによって特定の機会に呼び出される関数を格納できる変数です。
ほとんどのメジャー モードは、メジャー モードが呼び出されるたびに呼び出される関数を追加できる、カスタマイズ可能なフック変数を提供します。たとえば、c-mode は を提供しますc-mode-hook
。バッファーに対して c-mode がオンになっているときはいつでも独自のカスタマイズが呼び出されるようにするには、それらを関数に入れmy-c-mode-customizations
、次の行を .emacs ファイルに追加します。
(add-hook 'c-mode-hook 'my-c-mode-customizations)
もちろん、autoload
Emacs がその関数の定義を実際に見つける必要があります。