Emacs的;加载dired之前的C-x C-j,dired-x

时间:2014-06-28 00:20:17

标签: emacs require autoload dired

试图减少requireinit.el的数量。

但是,在dired-x中,有一个很棒的C-x C-j = dired-jump,它会跳转到当前缓冲区的目录。即使我们尚未加载C-x C-jdired,也很自然希望使用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 ...

但实际上,这些都是我的头脑,所以我放弃了它。

我做了一个更简单的"解决方案,打算删除这个,但感觉别人会喜欢这个,所以会为你提出问题和答案。评论和其他策略表示赞赏。

2 个答案:

答案 0 :(得分:3)

C-h i g (dired-x) Optional Installation Dired Jump RET

  

为了dired-jumpdired-jump-other-window(*注意   杂项命令::)在 direddired-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)