在Emacs 23.2中,dired-omit-toggle命令去哪儿了?

3

升级从Emacs 21.2到23.2的挑战仍在继续... 在我的.emacs文件中,我有非常方便的:

(global-set-key (quote [f4]) (quote dired-omit-toggle))

自从Emacs 18时代,它就一直能用...但在Emacs 23.2中不再起作用:

Lisp错误: (void-function dired-omit-toggle)

有没有办法在Emacs 23.2中替换这个功能呢?

EmacsWiki说:

To use this mode add the following to your InitFile.

  (add-hook 'dired-load-hook
            (function (lambda () (load "dired-x"))))

这正是我这些年来一直在使用的。但是Emacs 23.2不再支持这个功能了。有没有什么替代方案可以在Emacs 23.2中使用?

2个回答

3
自从 Emacs 22 版本起,您需要调用 dired-omit-mode 而不是 dired-omit-toggle。仍然需要加载 dired-x。从 NEWS.22 中得知:在 Dired-x 中,省略文件现在是一个次要模式,即 dired-omit-mode。模式切换命令绑定到 M-o 键。新的命令 dired-mark-omitted ,绑定到 * O,标记被省略的文件。变量 dired-omit-files-p 已过时,请使用模式切换函数代替。

Gilles,你是一个救命恩人。看起来我面临的挑战源于我没有经历过Emacs 22,因此它的NEWS文件在我尝试让Emacs 23工作时不正确。无论如何,你的建议很有效。我很快会发布替换它的代码。 - Android Eve

0

由于我从Emacs 21升级到23是逐步进行的,需要在多个系统上维护相同的.emacs文件,其中一些使用Emacs 21,另一些使用Emacs 23,因此我想出了以下代码:

(GNUEmacs21
 (global-set-key (quote [f4]) (quote dired-omit-toggle))
)

(GNUEmacs22
 (global-set-key (quote [f4]) (quote dired-omit-mode))
)

(GNUEmacs23
 (global-set-key (quote [f4]) (quote dired-omit-mode))
)

在 .emacs 文件中,GNUEmacs21、GNUEmacs22 和 GNUEmacs23 已经被定义。

(defmacro GNUEmacs23 (&rest body)
  (list 'if (string-match "GNU Emacs 23" (version))
        (cons 'progn body)))

(defmacro GNUEmacs22 (&rest body)
  (list 'if (string-match "GNU Emacs 22" (version))
        (cons 'progn body)))

(defmacro GNUEmacs21 (&rest body)
  (list 'if (string-match "GNU Emacs 21" (version))
        (cons 'progn body)))

2
我不建议采用这种方法,因为你必须确定Emacs的哪个版本更改了该功能。大多数这样的不兼容性最好通过测试函数或变量的可用性来解决。在这里,我会做类似于(eval-after-load "dired-x" '(if (not (fboundp 'dired-omit-toggle)) (defalias 'dired-omit-toggle 'dired-omit-mode)))的事情。 - Gilles 'SO- stop being evil'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接