Emacsのセッションでは、同一のファイルを複数回読み込むことができます。例えば、バッファ内で関数定義を編集して書き直し、再インストールした後に、元のバージョンに戻したい場合があるでしょう。その場合は、そのファイルを読み直すことで対応可能です。
ファイルを読み込んだり再読み込みしたりする際は、load および load-library
関数が、似た名前の未コンパイルファイルではなく、バイトコンパイル済みファイルを自動的に読み込むことに留意してください。保存して再インストールする予定のファイルを書き換えた場合は、新しいバージョンをバイトコンパイルする必要があります。そうしないと、Emacs
は新しい未コンパイルファイルではなく、古いバイトコンパイル済みファイルを読み込んでしまいます。その場合、ファイル読み込み時に表示されるメッセージに、再コンパイルを促すための
‘(compiled; note, source is newer)’
が含まれます。
Lispライブラリファイルでフォームを記述する際は、そのファイルが複数回ロードされる可能性があることに留意してください。例えば、ライブラリを再ロードした際に各変数を再初期化すべきかどうかを検討してください。defvarは、変数がすでに初期化されている場合はその値を変更しません。(グローバル変数の定義を参照してください。)
alistに要素を追加する最も簡単な方法は、次の通りです。
(push '(leif-mode " Leif") minor-mode-alist)
ただし、ライブラリを再読み込みすると、複数の要素が追加されてしまいます。この問題を回避するには、add-to-list を使用してください(リスト変数の変更を参照):
(add-to-list 'minor-mode-alist '(leif-mode " Leif"))
ライブラリが既にロードされているかどうかを明示的に判定したい場合があります。ライブラリが provide を使用して名前付きフィーチャーを提供している場合、ファイルのより早い段階で featurep を使用することで、provide
の呼び出しが以前に実行されたかどうかを判定できます(フィーチャーを参照)。あるいは、次のような方法を用いることもできます:
(defvar foo-was-loaded nil) (unless foo-was-loaded execute-first-time-only (setq foo-was-loaded t))