パッケージには、単純パッケージとマルチファイルパッケージがあります。単純パッケージはパッケージアーカイブに単一のEmacs Lispファイルとして格納され、一方、マルチファイルパッケージはtarファイル(複数のLispファイルや、場合によってはマニュアルなどの非Lispファイルを含む)として格納されます。
通常の使用においては、単純パッケージと複数ファイルパッケージの違いは比較的重要ではなく、パッケージメニューのインターフェースでは両者を区別しません。ただし、作成手順は異なり、これについては以下の節で説明します。
各パッケージ(単一ファイルか複数ファイルかを問わず)には、特定の属性があります:
短い単語(例:‘auctex’)。これは通常、プログラムで使用されるシンボル接頭辞でもあります(Emacs Lisp コーディング規約を参照)。
関数 version-to-list が認識できる形式(例:‘11.86’)のバージョン番号。パッケージの各リリースではバージョン番号をインクリメントする必要があり、これによりパッケージアーカイブを参照するユーザーがアップグレードとして認識できるようになります。
これは、パッケージメニューにパッケージが表示されている際に表示されます。1行に収め、理想的には36文字以内とする必要があります。
これは、パッケージの簡潔な説明とインストール状況に続き、C-h P (describe-package)
によって作成されたバッファに表示されます。通常は複数行にわたり、パッケージの機能や、インストール後の利用開始方法が詳細に記述されています。
本パッケージが依存するその他のパッケージの一覧(許容可能な最小バージョン番号が含まれる場合があります)。この一覧は空である場合があり、その場合は本パッケージに依存関係がないことを意味します。そうでない場合、本パッケージをインストールすると、その依存関係も再帰的に自動的にインストールされます。いずれかの依存関係が見つからない場合、本パッケージはインストールできません。
コマンド package-install-file
またはパッケージメニュー経由でパッケージをインストールすると、package-user-dir
の下に name-version という名前のサブディレクトリが作成されます。ここで name はパッケージ名、version
はそのバージョン(例:~/.emacs.d/elpa/auctex-11.86/)です。これをパッケージの コンテンツディレクトリ と呼びます。Emacs はここにパッケージの内容(シンプルなパッケージの場合は単一の Lisp
ファイル、複数ファイルからなるパッケージの場合はそこから抽出されたファイル)を格納します。
Emacs then searches every Lisp file in the content directory for autoload
magic comments (see Autoload).
These autoload definitions are saved to a file named name-autoloads.el in the content directory. They
are typically used to autoload the principal user commands defined in the
package, but they can also perform other tasks, such as adding an element to
auto-mode-alist (see How Emacs Chooses a Major Mode). Note that
a package typically does not autoload every function
and variable defined within it—only the handful of commands typically
called to begin using the package. Emacs then byte-compiles every Lisp file
in the package.
インストール後、インストールされたパッケージがロードされます。Emacsはパッケージのコンテンツディレクトリをload-pathに追加し、name-autoloads.el内のオートロード定義を評価します。
Emacsが起動するたびに、インストール済みパッケージを現在のセッションで利用できるよう、関数 package-activate-all
が自動的に呼び出されます。これは、初期初期化ファイルの読み込み後、通常の初期化ファイルの読み込み前に行われます(概要:起動時の動作シーケンスを参照)。初期初期化ファイルでユーザーオプション package-enable-at-startup が nil に設定されている場合、パッケージは自動的に利用できなくなります。
この関数は、現在のセッションでパッケージを利用可能にします。ユーザーオプション package-load-list
で利用可能にするパッケージを指定します。デフォルトでは、インストール済みのすべてのパッケージが利用可能になります。The GNU Emacs Manual の パッケージのインストール
を参照してください。
ほとんどの場合、起動時に自動的に行われるため、package-activate-allを呼び出す必要はありません。単に、package-activate-allより前に実行すべきコードは初期初期化ファイルに、その後に実行すべきコードはメインの初期化ファイルに記述するようにしてください(The GNU Emacs Manualの初期化ファイルを参照してください)。