デフォルトでは、package-install はパッケージアーカイブから Tarball
をダウンロードし、そのファイルをインストールします。パッケージのソースコードを改変し、その変更を他のユーザーと共有したい場合には、この方法では不十分な場合があります。その場合は、アップストリームのソースを直接取得して作業するのが望ましいでしょう。そうすることで、パッチの開発やバグ報告がより容易になることが多いです。
その一つの方法は、package-vc-install
を使用して、パッケージのソースコードをソースから直接取得することです。このコマンドは、通常のパッケージと同様に、すべてのファイルがバイトコンパイルされ、自動的にロードされることも確実に行います。この方法でインストールされたパッケージは、他のパッケージと同様に動作します。package-upgrade や package-upgrade-all を使用してアップグレードでき、package-delete
を使用して再度削除することも可能です。さらに、通常のパッケージ一覧にも表示されます。パッケージリストに追加せず、単にパッケージのソースをクローンしたい場合は、package-vc-checkout を使用してください。
なお、現時点では組み込みパッケージを package-vc-install
でアップグレードすることはできません。
ソースをチェックアウトした状態で、現在の開発ヘッドに対してバグを再現したり、ちょっとした要望を叶えるために新機能を実装したりしたい場合があるでしょう。パッケージのメタデータにメンテナーへの連絡方法が記載されている場合は、コマンド
package-report-bug
を使用してメールでバグを報告できます。この報告には、カスタマイズしたすべてのユーザーオプションが含まれます。メンテナーに共有したい変更を加えた場合は、まず変更をコミットし、その後コマンド
package-vc-prepare-patch を使用して共有してください。パッチの準備を参照してください。
パッケージをソースからインストールするには、Emacsがパッケージのソースコードの入手先(コードリポジトリなど)と、コードの構造に関する基本情報(複数ファイルからなるパッケージにおけるメインファイルなど)を把握している必要があります。パッケージ仕様では、これらの属性が記述されます。
パッケージアーカイブ(The Emacs Lisp Reference ManualのPackage
Archivesを参照)が指定されている場合、Emacsはそのアーカイブからパッケージの仕様を自動的にダウンロードできます。package-vc-installに渡された第1引数がパッケージ名を示すシンボルである場合、Emacsはそのパッケージについてアーカイブが提供する仕様を使用します。
;; Emacs will download BBDB's specification from GNU ELPA: (package-vc-install 'bbdb)
package-vc-install
の第1引数には、パッケージ指定を指定することも可能です。これにより、ユーザーオプション package-archives
に記載されている既知のアーカイブ以外の場所からソースパッケージをインストールできます。パッケージ指定は (name . spec) 形式のリストであり、その中で
spec は、以下の表にあるいずれかのキーを用いたプロパティリストである必要があります。
コードリポジトリやバージョン管理システムを扱う際の基本用語の定義については、The GNU Emacs ManualのVCS Conceptsを参照してください。
:urlパッケージのソースコードを取得するリポジトリを指定するURLを含む文字列。
:branchインストールするコードのリビジョンを示す文字列です。パッケージのバージョン番号と混同しないようご注意ください。
:lisp-dirLispソースの読み込みに使用するディレクトリのリポジトリ相対名を指定する文字列。デフォルトではリポジトリのルートディレクトリとなります。
:main-fileパッケージのメタデータを取得するための、プロジェクトのメインファイルを指定する文字列。指定しない場合は、パッケージ名に ".el" を付加したものがデフォルトとなります。
:docInfoファイルのビルド元となるドキュメントファイルのリポジトリ相対パスを指定する文字列。これはTexinfoファイルまたはOrgファイルのいずれかとなります。
:makeInfoファイルのビルド前に実行すべき、リポジトリのMakefileで定義されたターゲットまたは複数のターゲットを指定する文字列または文字列のリスト。package-vc-allow-build-commandsがnilでない場合にのみ有効となる。
:shell-commandInfoファイルのビルド前に実行するシェルコマンドを指定する文字列。package-vc-allow-build-commandsがnilでない場合にのみ有効となる。
:vc-backendパッケージのリポジトリのコピーをダウンロードする際に使用するVCバックエンドを指定するシンボル(The GNU
Emacs ManualのVersion
Control Systemsを参照)。省略した場合、Emacsは指定されたURLに基づいて推測を試み、それが失敗した場合はpackage-vc-default-backendの値にフォールバックします。
;; Specifying information manually:
(package-vc-install
'(bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git"
:lisp-dir "lisp"
:doc "doc/bbdb.texi"))