1

多数のコンピューターで Emacs 構成を共有しています。それらの中には、自分の emacs のコピーを簡単に維持できるものもあれば、その余裕がないものもあります。次のメッセージが表示されます。

'disabled-command-hook' は廃止された変数です (Emacs 22.1 以降)。「無効コマンド機能」を使用する

これは、まだコンパイルされていないファイルをバイトコンパイルするように構成を設定しているため、起動時に発生します。問題は、まだ 1 つまたは 2 つの Emacs 21 インスタンスがあることです。古いものと新しいものの両方をサポートするにはどうすればよいですか? 私のgoogle-fuは私のために働いていません。

このマクロを使用してみました:

(defmacro WhenEmacsOlderThan (major minor &rest body)
   `(if (or (< emacs-major-version ,major) (and (= emacs-major-version ,major)
                                                                           (< emacs-minor-version ,minor)))
      (progn ,@body)
     nil
    )
 )

使用中は次のようになります。

(WhenEmacsOlderThan 22 1
   (setq disabled-command-hook nil)
 )

しかし、廃止された変数に関する新しいバージョンの Emacs にはまだメッセージが表示されます。私は何が欠けていますか?

このような他の質問を見つけましたが、目標はメッセージを非表示にすることでした. メッセージが表示される理由と、バージョン間で互換性のある方法で問題を回避する方法を理解したいです。

ありがとう。

4

2 に答える 2

2

メッセージは警告であるため、(setq disabled-command-hook nil)引き続き機能しますが、その変数が削除されると、警告も消えるので、準備を整えてください。できるよ:

(setq disabled-command-hook nil) ;; Obsolete since Emacs-22.
(setq disabled-command-function nil)

したがって、すべてのバージョンで機能します。また、警告を回避できる可能性があります

(if (boundp 'disabled-command-hook)
    (setq disabled-command-hook nil)) ;; Obsolete since Emacs-22.
(setq disabled-command-function nil)
于 2012-10-09T20:08:55.113 に答える
0

disabled-command-hook代わりに、がそうであるかどうかを直接確認できますobsoleteか?

(defun make-obsolete (obsolete-name current-name &optional when)
  ....
  (put obsolete-name 'byte-obsolete-info

かもね

(if (not (get disabled-command-hook 'byte-obsolete-info))
  (setq disabled-command-hook nil))
于 2012-10-09T18:17:26.927 に答える