Next: Simple Packages, Up: Packaging [Contents][Index]
パッケージはシンプルパケージ(simple package)か複数ファイルパッケージ(multi-file package)のいずれかです。シンプルパッケージは単一のEmacs Lispファイル内に格納される一方、複数ファイルパッケージはtarファイル(複数のLispファイルとマニュアルのような非Lispファイルが含まれる可能性がある)に格納されます。
通常の使い方ではシンプルパッケージと複数ファイルパッケージとの違いは比較的重要ではありません。Package Menuインターフェースでは、それらの間に差異はありません。しかし以降のセクションで説明するように作成する手順は異なります。
パッケージ(シンプルか複数ファイル)はそれぞれ特定の属性(attributes)をもっています:
短い単語(たとえば‘auctex’)。これは通常はそのプログラム内でシンボルプレフィクスとしても使用される(Coding Conventionsを参照)。
関数version-to-list
が理解できる形式のバージョン番号(たとえば‘11.86’)。パッケージの各リリースではバージョン番号もアップすること。
そのパッケージがPackage Menuにリストされる際にが表示される。理想的には36文字以内の単一行であること。
これはC-h P
(describe-package
)により作成されたバッファーに表示されて、その後にそのパッケージの簡単な説明(brief
description)とインストール状態(installation
status)が続く。これには通常はパッケージの能力とインストール後に使用を開始する方法を複数行に渡って完全に記述すること。
そのパッケージが依存する他のパッケージ(最低のバージョン番号を含むかもしれない)。このリストは空でもよく、その場合にはパッケージは依存パッケージがないことを意味する。それ以外ならパッケージをインストールすることにより依存パッケージも自動的にインストールされる。依存パッケージのいずれかが見つからなければパッケージをインストールすることはできない。
コマンドpackage-install-file
、またはPackage
Menuのいずれかを介したパッケージのインストールでは、package-user-dir
にname-versionという名前のサブディレクトリーが作成されます。ここでnameはパッケージ名、versionはバージョン番号です(たとえば~/.emacs.d/elpa/auctex-11.86/)。わたしたちはこれをパッケージのコンテンツディレクトリー(content
directory)と呼んでいます。これはEmacsがパッケージのコンテンツ(シンプルパッケージでは単一のLispファイル、または複数ファイルパッケージから抽出されたファイル)を配置する場所です。
その後にEmacsはautoloadマジックコメント(Autoloadを参照)にたいしてコンテンツディレクトリー内のすべてのLispファイルを検索します。これらのautoload定義はコンテンツディレクトリーのname-autoloads.elという名前のファイルに保存されます。これらは通常はパッケージ内で定義された主要なユーザーコマンドのautoloadに使用されますが、auto-mode-alist
への要素の追加(Auto Major Modeを参照)等の別のタスクを行うこともできます。パッケージは通常はその中で定義された関数と変数のすべてをautoloadしないことに注意してください
—
通常はそのパッケージの使用を開始するために呼び出される一握りのコマンドだけがautoloadされます。それからEmacsはそのパッケージ内のすべてのLispファイルをバイトコンパイルします。
インストール後はインストールされたパッケージはロード済み(loaded)になります。Emacsはload-path
にコンテンツディレクトリーを追加してname-autoloads.el内のautoload定義を評価します。
Emacsのスタートアップ時はインストール済みパッケージをロードするために、常に自動的に関数package-initialize
が呼び出されます。これはinitファイルと、(もしあれば)abbrevファイルのロード後、かつafter-init-hook
の実行前に行われます(Startup Summaryを参照)。ユーザーオプションpackage-enable-at-startup
がnil
なら自動的なパッケージのロードは無効です。
この関数は、インストール済みパッケージとそれらがロード済みかを記録する、Emacsの内部レコードを初期化する。ユーザーオプションpackage-load-list
は、どのパッケージをロードするかを指定する。デフォルトでは、すべてのインストール済みパッケージがロードされる。Package
Installation in The GNU Emacs Manualを参照のこと。
オプション引数no-activateが非nil
なら、インストール済みパッケージを実際にロードせずにこのレコードを更新する。これは内部でのみ使用される。