package-install
はデフォルトではパッケージアーカイブからtarballをダウンロードしてそのファイルをインストールします。あなたがパッケージのソースをハッキングして、あなたの変更を他の人たちと共有したい場合には、これでは不十分かもしれません。そのような場合にはアップストリームのソースを直接取得して、それにたいして作業したいと思うのではないでしょうか。そのようにすることによって、パッチ開発やバグレポートが容易になることが多々あるからです。
パッケージのソースコードをソースから直接手に入れるためにpackage-vc-install
を使うのも1つの手段です。このコマンドは通常のパッケージの場合と同じように、すべてのファイルがバイトコンパイルされて、auto-loadされることも保証してくれます。この方法でインストールされたパッケージは、他のパッケージとまったく同じように振る舞うでしょう。それらのパッケージはpackage-upgrade
やpackage-upgrade-all
を使ってアップグレード、package-delete
を使って再び削除することができます。通常のパッケージのリストにさえこれらのパッケージが表示されます。パッケージのリストに加えずにソースのcloneだけを望む場合には、package-vc-checkout
を使用してください。
ソースをチェックアウトするとカレントの開発HEADにたいするバグを再現させたり、新しい機能を実装して不満を解消したいと思うかもしれません。このパッケージのメタデータにメンテナーへ連絡する方法が示されていれば、コマンドpackage-report-bug
を使用してバグを電子メール経由で報告することができます。このレポートにはあなたがカスタマイズしたすべてのユーザーオプションが含まれます。メンテナーと共有したい変更を行ったら、まずその変更をコミットしてからコマンドpackage-vc-prepare-patch
でその変更を共有できます。パッチの準備を参照してください。
あなたが自分のパッケージを保守している場合は、リモートレポジトリにoneするのではなくローカルでのチェックアウトを使いたいと思うかもしれません。package-vc-install-from-checkout
を使ってこれを行うことができます。これはパッケージのディレクトリー(パッケージのファイルとディレクトリーを参照)からあなたのチェックアウトにシンボリックリンクを作成して、コードの初期化を行うコマンドです。初期化を繰り返してautoloadを更新するために、package-vc-rebuild
の使用が必要かもしれないことに注意してください。
ソースからパッケージをインストールするためにはパッケージのソースをどこから取得するか(たとえばコードレポジトリ)、そしてコードの構造に関する基本情報(たとえば複数ファイルパッケージのメインファイル)をEmacsが承知していなければなりませんこれらのプロパティを記述するのがパッケージ仕様(package specification)です。
パッケージアーカイブ(Package Archives in The Emacs Lisp Reference
Manualを参照)からサポートされると、Emacsはそのアーカイブからパッケージの仕様を自動的にダウンロードできます。package-vc-install
に渡される1つ目の引数がパッケージを命名するシンボルであれば、Emacsはそのパッケージ用にアーカイブが提供する仕様を使用します。
;; EmacsはGNU ELPAからBBDBの仕様をダウンロードする: (package-vc-install 'bbdb)
package-vc-install
の1つ目の引数はパッケージ仕様の場合もあります。これによってユーザーオプションpackage-archives
にリストされている既知のアーカイブ以外の場所からソースパッケージをインストールできるようになります。パッケージ仕様は(name
. spec)
という形式のリストです。ここでspecは下記テーブルの任意のキーを使用するプロパティリストである必要があります。
コードレポジトリやバージョンコントロールシステムでの作業に使用する基本的な用語の定義についてはVCS Concepts in The GNU Emacs Manualを参照してください。
:url
パッケージのソースコードを取得するレポジトリを指定するURL文字列。
:branch
インストールするコードのリビジョンを指定する文字列。バージョンのバージョン番号と混同しないこと。
:lisp-dir
Lispソースのロードに用いる、レポジトリに相対的なディレクトリー名文字列。デフォルトはレポジトリのルートディレクトリー。
:main-file
パッケージのメタデータを集約したプロジェクトのメインファイル名文字列。与えられない場合のデフォルトはパッケージ名に".el"を追加したファイル名。
:doc
Infoファイルをビルドするためのレポジトリに相対的なドキュメンテーションファイル名文字列。TexinfoまたはOrgのファイルが指定できる。
:make
Infoファイルのビルド前に実行を要するレポジトリのMakefileで定義されたターゲットを与える文字列、またはリスト(ターゲットが複数の場合)。package-vc-allow-build-commands
が非nil
のときのみ効果がある。
:shell-command
Infoファイルのビルド前に実行を要するシェルコマンドを与える文字列。package-vc-allow-build-commands
が非nil
のときのみ効果がある。
:vc-backend
パッケージのレポジトリのコピーのダウンロードに用いるVCバックエンドを指名する文字列(Version Control
Systems in The GNU Emacs
Manualを参照)。省略時には提供されたURLからEmacsが推測を試み、それに失敗するとプロセスはpackage-vc-default-backend
の値にフォールバックする。
;;情報を手作業で指定: (package-vc-install '(bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git" :lisp-dir "lisp" :doc "doc/bbdb.texi"))