2017-03-20 5 views
1

HTTP APIと通信する小さなemacsプラグインを構築しようとしています。残念ながら、url-retrieve関数はemacs < = 22で異なる署名を持っていました。特にこれらの古いバージョンはサポートしませんが、例外を生成することでユーザーのemacsインストールを中断したくありません。 emacsが特定の最小バージョンよりも下にある場合、elispソースファイルの処理を中止することは可能ですか?emacs <= 22の場合、.elファイルの処理を停止します。

(emacsの異なるバージョン間で動作elispのパッケージを構築する上でのベストプラクティスへの任意のポインタがはるかに高く評価されるだろう - 私は非常に多くのelisp初心者です。)

答えて

0

使用Emacs version

(when (>= 22 emacs-major-version) 
    (error "Emacs version %d is not supported" emacs-major-version)) 

v22はほぼ8年前にv23によって廃止されました。私は多くの人々がまだそれを使用していることを疑う...おっと...それを取り戻す... Mac OS Xのシエラは22.1に付属しています。 ;-)

1

ファイルのロードを停止する方法があるかどうかわかりません。すべてのバージョンで動作する小さなlispファイルを持つことができ、Emacsのバージョンに応じて他のファイルを選択的にロードするだけです。

(if (<= emacs-major-version 22) 
    (require 'foo-22) 
    (require 'foo-23+)) 

emacs-minor-version(もint型)とemacs-version(文字列)もあります。

古いバージョンではライブラリが動作しない場合は、おそらくエラーになるはずです。それを使用するものは、最終的には破損するので、早くも大きなものでも失敗する可能性があります。あなたも空想取得し、23+でurl-retrieve作品の道をエミュレートしようとすることができます

(defun foo-url-retrieve (url callback &optional cbargs silent inhibit-cookies) 
    "Wrapper for `url-retrieve'." 
    (if (<= emacs-major-version 22) 
     (url-retrieve url callback cbargs) 
    (url-retrieve url callback cbargs silent inhibit-cookies))) 

は、おそらくより良いバージョンのいずれかのために使用することができますurl-retrieveのラッパーを定義することです。 しかし私は22歳までのバージョンについて気にしないことに同意します。

関連する問題