试图减少require
中init.el
的数量。
但是,在dired-x
中,有一个很棒的C-x C-j
= dired-jump
,它会跳转到当前缓冲区的目录。即使我们尚未加载C-x C-j
和dired
,也很自然希望使用dired-x
。但那时它是未定义的。
如何调和?
换句话说,我遇到了这个问题,因为我正在尝试以下的混合物:
(setq-default dired-omit-files-p t) ; The old way was messy
(setq dired-omit-files "^\\.?#\\|^\\.$") ; I like `..' in my dired
(setq dired-details-hidden-string "")
(add-hook 'dired-load-hook
(lambda ()
(load "dired-x")
(when (locate-library "dired-details")
(load "dired-details")
(dired-details-install)
)
))
我想知道这个功能是否有神奇的自动加载,但我并不是真的理解这些。也就是说,在dired-x.el
中,我找到了
;;;###autoload
(defun dired-jump ...
但实际上,这些都是我的头脑,所以我放弃了它。
我做了一个更简单的"解决方案,打算删除这个,但感觉别人会喜欢这个,所以会为你提出问题和答案。评论和其他策略表示赞赏。
答案 0 :(得分:3)
C-h i g (dired-x) Optional Installation Dired Jump
RET
为了
dired-jump
和dired-jump-other-window
(*注意 杂项命令::)在dired
和dired-x
之前工作 正确加载你应该为这些功能设置自动加载。在 您的.emacs
文件已放入
(autoload 'dired-jump "dired-x"
"Jump to Dired buffer corresponding to current buffer." t)
(autoload 'dired-jump-other-window "dired-x"
"Like \\[dired-jump] (dired-jump) but in other window." t)
(define-key global-map "\C-x\C-j" 'dired-jump)
(define-key global-map "\C-x4\C-j" 'dired-jump-other-window)
我不确定为什么dired-x
库与默认功能分开。只有当Emacs构建过程查看它时,;;;###autoload
cookie才会生效(由此类注释产生的自动加载语句通常最终会出现在loaddefs.el
个文件中),所以很明显不是发生(并且可能是故意的,但你的猜测和我的一样好)。
答案 1 :(得分:0)
以下简单解决方案仅定义C-x C-j
,但只要加载dired
- 并因此加载dired-x
,就会覆盖。
;; if dired(-x) is not loaded, C-x C-j is undefined
(defun undefined-c-x-c-j-loads-dired-and-jumps ()
(interactive)
(load "dired")
(dired-jump))
(global-set-key (kbd "C-x C-j") 'undefined-c-x-c-j-loads-dired-and-jumps)