Dirvish: 基于 Dired 的极简、一站式文件管理器

谢谢大佬,Message里面没有任何打印信息。

我用精简配置复现了一下,还是会不显示 mode-lline:

我的配置如下:

(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name
        "straight/repos/straight.el/bootstrap.el"
        (or (bound-and-true-p straight-base-dir)
            user-emacs-directory)))
      (bootstrap-version 7))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

(use-package dired
  :straight nil
  :custom
  (dired-listing-switches "-Bhl --group-directories-first --almost-all --time-style=iso")
  )

;; 使用 `E` 可以用外部命令打开文件
(use-package dirvish
  :straight t
  :init
  (dirvish-override-dired-mode)
  )

此外我注意到在 tui 界面里是正常的:

精简配置后也是可以正常显示:

是不是这几行造成的? 注释掉能行不?

;; `dirvish--build-layout`
    (when (and (display-graphic-p) (> emacs-major-version 28))
      (let ((window-safe-min-height 0) (window-resize-pixelwise t))
        (dolist (win util-windows) (fit-window-to-buffer win 2 1))))
1 个赞

可以了,完全好了!

好的,我晚点看看怎么弄

1 个赞

想请教一下这个“总计”有没有办法去掉:

dired-free-space

1 个赞

好像不是这个问题,即使将它设置成 nil,依然有问题。

很神奇的是,只在一台机子上有这个问题。

会不会和你使用的 ls 命令有关

猜测是某些 Linux 发行版的语言包擅自「翻译」命令输出导致的。在你的终端看看不同的 LANG 和 LC_ALL 设置下 ls -ls 的输出是不是不同。你看看设置 (setenv "LANG" "en_US.UTF-8") 有用不?

1 个赞

有用,谢谢!

1 个赞

刚刚dirvish更新了。同样的配置,打不开了:

(global-set-key [f2] '(lambda () (interactive) (dirvish-dwim "~/Downloads")))

M-x直接运行 dirvish-dwim,dirvish两个命令,都没反应。

不报错? 安装问题吗 package-recompile 一下或者删了重装看看。

我试了git的很多版本。

af239a04bb4d772ba2b10e64937395456ad9430c 是最后一个可以的版本;再新就打不开了。

紧随其后的 e02395c40bd5439ece54989229760bde1e9ea4c1 版本, dirvish.el 文件改成了

(run-hook-with-args 'dirvish-find-entry-hook key 'dired)

将e02395c4改成能用的, e02395c4也能用dirvishi:

(run-hook-with-args 'dirvish-find-entry-hook key buffer)

但是最新的版本改成这个,还是不能用。 奇怪了。

doomemacs 几天前已经 bump 到了一个很新的 commit, 如果 dired 都用不了应该很快有人提 issue, 所以我判断你的问题大概率不是 dirvish 代码导致的,bisect 也就无从谈起。

引用一下论坛的提问指引:

为提高大家的交流效率, 请反馈问题之前先自我排查, 请仔细阅读FAQ。

排查是否是因为自己配置文件引起的问题:

  1. 用 emacs -Q -l test.el 启动 Emacs
  2. test.el 这个文件需要你手动创建, 文件的内容之包括需要测试的插件和配置
  3. 如果 emacs -Q 启动没有问题,请使用二分注释法排查自己的配置代码
  4. 需要注意的是, 如果 *.el 文件内容是正确的, 但是Emacs行为总是不对, 请检查是否有老版本的 > *.elc 或 *.eln 文件没有删除?

先重点关照一下4.

好的。我再排查一下。 emacs是官方的30.1版本。

@alexluigit dirvish.el 文件 dirvish–find-entry 函数

    (and (run-hook-with-args-until-success
          'dirvish-find-entry-hook entry find-fn)
         (cl-return-from dirvish--find-entry))

将上面3行去掉,问题消失;如果加上,就出问题。 我看到这3行是 e02395c4 版本加上的。这以前的版本都没有问题。

您看看?

我去读了读你以前发的配置文件。里面有 (add-hook 'dirvish-find-entry-hook (lambda (&rest _) (setq truncate-lines t))。我看你都开始逐行分析 dirvish 代码了,想当然以为你肯定已经排查过自己配置了。

这3行解释了 dirvish-find-entry-hook 使用方式的变化: 如果你在这个 hook 中添加的任一 hook 函数有非空的返回值,dirvish 就认为你要自己接管文件的打开方式,然后中止之后的执行。这主要是用来设置默认用外置程序打开某些文件用的。

你把这行删了就好了,truncate-lines 在 dirvish 里默认值是 t 了,这设置已经不需要了。

先排查自己的配置文件难道不是容易的多吗? 最多也就10来项,就算一个一个注释了重启也花不了你这些工夫啊。是因为英文文档不方便读吗?

我考虑过要不要维护一份中文文档来着,想想觉得没必要,直接 ai 翻译一下页面应该差不多了。以后再有 breaking changes 我还是来这里说一下吧, 虽然文档和 docstring 一般都写了。

2 个赞

果然可以了,感谢回复。

我试过,把配置文件都删了,只保留了dirvish的,也是不行。 您说的那行配置我应该也是抄过来的。我也是想当然的认为和文档里的配置一致。

我昨天更新了最新版,发现打开 dirvish 后,有可能 preview 是空白的,需要上下移动一下光标,才能正常显示 preview。(我在 emacs -Q 下也测试了,也有这个问题),请问有其他人遇到过吗?

这个提交 Commit b17fdcb 已经修复了,现在没问题啦!

感谢作者的工作! :laughing: