jsonをelispパッケージにバンドルするにはどうすればよいですか?


7

json.el(http://edward.oconnor.cx/2006/03/json.el)を使用するelispパッケージを配布したいと思います。これは、jsonがプリインストールされていないバージョンのemacs(emacs 22.1に同梱されているOSXなど)で機能するために必要です。jsonのようなサードパーティのパッケージをパッケージに同梱するための推奨される方法はありますか?

これをソース形式で直接クライアントに配布します。


1
Emacsバージョン23未満をサポートしている場合は、「パッケージ」という用語(ELPAを意味する)を使用しないことをお勧めします。「ライブラリ」はより不可知的な用語です。
フィル2016

2
1つのオプションは、が使用可能かどうかを確認するために使用するかlocate-library、または単に(require 'json nil :noerror)失敗jsonしたときload-pathrequire対処することです。使用できない場合は、独自のコピーのサブディレクトリをに追加してから、
フィル2016

2
なぜjson.elライブラリーと一緒に出荷する必要があるのですか?(require 'json)取得する場所をユーザーに知らせるコメント(ファイルヘッダーコメント)にメモを含めて追加するだけjson.elです。それは礼儀正しく、十分で、ユーザーにとって簡単です。ライブラリが実際にを必要と せずjson.el、それが便利であるか、一部の機能(すべてではない)のみに必要な(require 'json nil t)場合は、コード内でその存在をテストする条件(featurepまたはfboundpまたはboundp)を使用および追加します。(require 'json nil t)特定の関数定義で使用することもできます。
2016

OSXの組み込みEmacs-22は古いだけでなく、GUIサポートの欠如によっても機能しなくなっているとのことですので、使用しない方がよいでしょう。
Stefan

回答:


7

他の人がEmacs 23または22をターゲットにしているかどうかを指摘しているように、「パッケージ」はなく、ライブラリしかありません。「パッケージ」は、パッケージマネージャーが追加されたとき、Emacs 24より前のEmacsには存在しません。

ライブラリとのバンドル

それをバンドルします。

パッケージの前にライブラリをインストールする標準的な方法はないため、json.elをユーザーに提供するものにバンドルできます。ある種のアーカイブだと思います。とにかく手動でインストールする必要があるので、必要なファイルをすべて選択できます。Emacs24/25ユーザーの場合はライブラリ、古いバージョンの場合はライブラリ+ json.elだけです。

これを文書化する限り、問題は発生しません。

パッケージとの同梱

同梱は絶対にしないでください。

ただし、Emacs 24以降の適切なパッケージをビルドする場合は、を含めないでjson.elください。

パッケージマネージャーは、バンドルされたのコピーをjson.el実際のライブラリと一緒に喜んでインストールします。のload-pathバンドルされたコピーの最初にパッケージが来るためjson.el、は組み込みのものをオーバーライドし、より新しいバージョンのを期待するパッケージにあらゆる種類の問題を引き起こしますjson.el

行く方法(私の意見では)

パッケージの2つのディストリビューションを作成します。

  • Emacs 24以降用の適切なEmacsパッケージ。たとえば、対応するパッケージメタデータを含むTAR。Emacs 24ユーザーに更新を自動的に配布するパッケージで小さなパッケージリポジトリをホストすることもできます。
  • ライブラリとjson.elを含むが、古いEmacsバージョンのユーザー向けのパッケージメタデータを含まない TARファイル。

注意する必要があるのは、古いEmacsバージョンのユーザーがEmacs 24に更新する場合のみです。この場合、ライブラリの以前のインストールを手動で削除しjson.el、適切なEmacs 24パッケージを再度インストールする必要があります。

代替

2つの異なるディストリビューションを維持したくない場合はjson.el、をバンドルできますが、別の名前を使用できますmy-library-json-compat.el。別の名前を使用すると、のバンドルコピーがjson.el組み込みのものをオーバーライドすることはありません。

バンドルされたコピー内の関数とシンボルは組み込みのものと依然として競合するため、実際のものjson.elが使用可能な場合はバンドルされたコピーを読み込まないように注意する必要がありますが、これは簡単です。

(unless (require 'json nil 'no-error)
  (require 'json "my-library-json-compat"))

Emacsはをロードしようとしjson.el、失敗すると別の名前でバンドルされたコピーにフォールバックします。

実際の行き方(私の意見では)

ユーザーにEmacs 24にアップデートするように伝えます。Emacs22の最後のリリースは8年前、Emacs 23の最後のリリースはまだ4年前です。どちらのバージョンも古く、多くの機能が欠如しており、多くのパッケージ(Magitなど)は現在Emacs 24のみをサポートしています。Emacs 22/23は行き止まりで、そこから先に進む方法はありません。

Emacs 24へのアップデートは簡単です。最新のLinuxディストリビューションのパッケージリポジトリには、少なくともEmacs 24.1が含まれています。OS Xの場合、ビルド済みのAppバンドルが利用可能で、最新の安定したEmacs 24が人気のOS XパッケージマネージャーHomebrewに含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.