2

メインラインの emacs 機能をできるだけ多く使用し、以前のバージョンで実行したときに正常にフォールバックする .emacs を作成したいと考えています。たとえば、emacs 22 には存在しなかったが、emacs 22 でドットファイルを実行することになったというまれな機会に、emacs 23 に存在するいくつかの機能を試行錯誤で見つけました。しかし、私はこれに対してより積極的なアプローチを取り、バージョン >= <some-threshold>(たとえば) の場合にのみ有効になるドットファイルのサブセットを作成したいと考えています。私が今注目している機能は ですscroll-bar-modeが、一般的な解決策が欲しいです。

この情報の一貫したソースを見たことがありません。gnu.org オンライン ドキュメント、関数コード自体を確認しましたが、これまでのところ何も確認していません。サポートしたい emacs のすべてのバージョンを保持せずに、どうすればこれを判断できますか?

4

3 に答える 3

2

ご質問に直接お答えすることはできませんが、私が使用する手法の 1 つはfunctionp、関数が存在するかどうかを示す関数をチェックすることです。

例えば

(if (load "completion" t)
  (progn
    (initialize-completions)
    (if (functionp 'dynamic-completion-mode)
      (dynamic-completion-mode) ; if exists
      (completion-mode)         ; otherwise use old version
    )
  ) ; progn
) ; if

update : バージョン固有のマクロの追加

使用functionpに加えて、いくつかのバージョン固有のマクロもあります。

(defmacro GNU_EMACS_21 (&rest stuff)
   (list 'if (string-match "GNU Emacs 21" (emacs-version)) (cons 'progn stuff)))
(defmacro GNU_EMACS_20 (&rest stuff)
  (list 'if (string-match "GNU Emacs 20" (emacs-version)) (cons 'progn stuff)))
(defmacro GNU_EMACS_19 (&rest stuff)
  (list 'if (string-match "GNU Emacs 19" (emacs-version)) (cons 'progn stuff))) 
(defmacro WINSYS_X (&rest stuff)
  (list 'if (eq window-system 'x) (cons 'progn stuff)))
(defmacro WINSYS_W32 (&rest stuff)
  (list 'if (eq window-system 'w32) (cons 'progn stuff)))
(defmacro WINSYS_NIL (&rest stuff)
  (list 'if (eq window-system nil) (cons 'progn stuff)))
(defmacro SYSTYPE_LINUX (&rest stuff)
  (list 'if (string-match "linux" (symbol-name system-type)) (cons 'progn stuff)))

次に、これらを使用できます。

(GNU_EMACS_21
  (if (load "cua" t)
    (CUA-mode t)
  )
)
(WINSYS_NIL ; when running in text mode
  (push (cons 'foreground-color "white") default-frame-alist)
  (push (cons 'background-color "black") default-frame-alist)
  (push (cons 'cursor-color "cyan") default-frame-alist)
  (push (cons 'minibuffer t) default-frame-alist)
)

ただし、これは既にご存知だと思います。「CUAモードがEmacsに組み込まれたのはいつですか」などの質問には答えるのが難しい..

于 2010-03-22T15:01:56.013 に答える
0

通常は、Emacs のバージョンをテストするよりも、使用したい関数または変数の存在をテストする方が良い方法です。たとえば、fboundpとを使用します。boundpをチェックすることが理にかなっている場合featurepもありますが、通常はfboundpまたはを使用する方が適切boundpです。

于 2011-08-21T18:40:59.043 に答える
0

「NEWS」ファイル (Ch N からアクセス可能) は、機能が導入された時期に関するヒントを提供する場合があります。

于 2010-03-22T15:23:25.847 に答える