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

可以了, 不是设置

hl-line 应该是 dirvish-hl-line

我给Dirvish加上了nerd-icons的支持,这样可以在GUI和terminal里都用Dirvish

Pull Request

terminal的效果图:

希望有用吧 :smiley:

8 个赞

我重装了一次系统后把 emacs 的配置迁移,发现了 dirvish-emerge 的一个奇怪现象。

Arch Linux. Emacs 28.2.

测试配置如下:

;; dirvish 是 git clone 下来的
(add-to-list 'load-path "~/.emacs.d/dirvish")
(add-to-list 'load-path "~/.emacs.d/dirvish/extensions")

(require 'dirvish)
(require 'dirvish-emerge)

;; 抄的文档的配置
(setq
  dirvish-emerge-groups

  '(("Recent files" (predicate . recent-files-2h))
     ("Documents" (extensions "pdf" "tex" "bib" "epub"))
     ("Video" (extensions "mp4" "mkv" "webm"))
     ("Pictures" (extensions "jpg" "png" "svg" "gif"))
     ("Audio" (extensions "mp3" "flac" "wav" "ape" "aac"))
     ("Archives" (extensions "gz" "rar" "zip")))
)

(dirvish-override-dired-mode)

(provide 'init)

(GIF 有点长)

Peek 2023-05-06 01-43

  • 在没有打开 dirvish-emerge-mode 之前,工作一切正常。
  • 打开dirvish-emerge-mode 之后,移动光标,文件不能正常预览。按 RET 无法正常打开文件,会有 cond: Wrong type argument: stringp, nil 的报错。
  • 关闭 dirvish-emerge-mode 之前,工作又恢复正常。

GIF 我录的不够全,在 dirvish-emerge-mode 打开会,分组是能够显示的:

我没有在讨论和 issue 中搜索到与 emerge-mode 相关的问题,麻烦大佬帮忙看看。

看了你左边的文件列表样式就知道问题出在time-style了,和我在dirvish-fd中遇到的一样,可以看楼上的解决方法,其实就是给dired-listing-switches加上一个“–time-style=iso”

1 个赞

Brilliant! 就是这个原因,谢谢你的帮助

忘记之前的系统是啥了,不过我昨天确实把 locale 设置成中文了

公司的电脑, 正常,
回到住处, 当打开了某个目录时, 即 此时也进入了 dired-mode, 但 一片空白, 什么都没有,

对于 非专业的人 来说, 原来这里要, 指定 时间格式, 找了一整天 终于在这里看到了

我抄的 【新手教程】一个面向产品经理的Emacs新手教程

;但 当前系统中的 时间格式如果是中文的话, 就什么都看不到
 (dired-listing-switches "-AFhlvX") 

就是一片空白, 同时 这里还设了个, 我现在也不知道有没相关, 不折腾了, 注释掉了

(setq dirvish-hide-details t)

现在加了个 时间格式, 就 OK了

 (dired-listing-switches "-AFhlvX --time-style=iso") ;时间格式的问题

希望, 一些比较 个例, 或 典型的现象的 帖子, 能有

特殊的标记

这楼 贴子太长, 真不好看完, 而且还有 几个贴子 更长, 属 “lazycat” 的帖子 更胜一畴

这个贴子, 我其实是有, 粗略看过几次了, 作者官网也看了几次, 都看的 较模糊

非IT人士, 也没时间, 入这么深, 但相关 文字编辑 不少,

但 emacs 真是好工具, 好机器

现在不用 dirvish--debouncing-delay 了吗? describe-variable 找不到,设置了也不起用(延迟 preview)

现在应该是 dirvish-redisplay-debounce。 另外借这层楼说下, 这几个月实在没精力维护这个项目和回答楼上(以及github issue)的问题,抱歉。主要原因是最近被迫在 windows 上做事,很不自由很不快乐。等过段时间有空会整理一下这个帖子。

可以添加几个热心网友共同维护项目

之前我自己糊了一个小插件,类似大佬的项目,也能在 windows 上面跑(我感觉大佬可以搞一下 windows 的兼容性)

output1

原来在 windows 上的截屏

2 个赞

大佬的这个包 real amazing, 又好看, 又好用, 我现在有一个小小的问题, 切换目录的时候, dirvish-quicksort 设置的排序会被清除, 比如我在当前目录设置了 ctime 排序, 然后我切进别的目录看了一眼再切回来, 就变回 name 排序了, 有办法做到保留设置的排序状态吗, 全局保持也行

最近 dirvish-side 会让 emacs 疯狂变卡,好像一直在查 git 的状态, linux emacs29 pgtk,但是最近没有时间细看,我暂时关掉 side 了

ps:大佬能不能让 side 像 treemacs 那样支持多项目

做了个介绍Dirvish的视频,欢迎大家观看

10 个赞

一些在 Windows 上使用 Dirvish 的心得:

图片预览
在 Windows 下,之所以默认的图片预览会有问题,是因为 Windows 自带一个叫 convert.exe 的程序,与 ImageMagick 的 convert 冲突,系统默认会调用 Windows 自带的 convert。
在 Emacs 中将 ImageMagick 的路径排到最前面解决问题:

  (setenv "PATH" (concat "d:/Env/media/imagemagick/;" (getenv "PATH")))
  (add-to-list 'exec-path "d:\\Env\\media\\imagemagick")

图片 MediaInfo
多重原因导致图片的 MediaInfo 无法显示。
首先 Dirvish 里,判断是否进行图片 MediaInfo 时,有这样一行:

(defcustom dirvish-show-media-properties
  (and (executable-find "mediainfo") (executable-find "pdfinfo") t)
  "Show media properties automatically in preview window."
  :group 'dirvish :type 'boolean)

也就是说不仅要安装 MediaInfo,还得同时安装 poppler(pdfinfo)才行

然后就是 Windows 的路径问题,如果不使用 utf8-beta 选项,运行时传给 MediaInfo 的文件路径会是一坨乱码。解决方式也很简单,可以找找站内关于 Windows UTF8 设置的帖子。

  (setq default-process-coding-system '(utf-8 . gbk))

视频预览
Dirvish 默认使用 ffmpegthumbnailer 来进行视频缩略图生成。
这玩意并不支持 Windows。试着在 msys2 环境编译,但失败了。于是我选择换一个程序。
目前用的是 mtn: movie thumbnailer 3.4.2 Free Download - VideoHelp
preview-dispatcher 如下:

    (dirvish-define-preview mtn (file ext preview-window)
      "Preview video files.
  Require: `mtn' (executable)"
      :require ("mtn")
      (when (member ext dirvish-video-exts)
        (let* ((width (dirvish-media--img-size preview-window))
               (height (dirvish-media--img-size preview-window 'height))
               (cache (dirvish-media--cache-path file (format "images/%s" width) ".jpg"))
               (path (dirvish--get-parent-path cache)))
          (if (file-exists-p cache)
              `(img . ,(create-image cache nil nil :max-width width :max-height height))
            `(cache . ("mtn" "-P" "-i" "-c" "1" "-r" "1" "-O" ,path ,file "-o"
                       ,(format ".%s.jpg" ext) "-w"
                       ,(number-to-string width)))))))
    (add-to-list 'dirvish-preview-dispatchers 'mtn)
3 个赞

我最近因为抄别人的Dired配置也发生了你这个报错。我是MacOS 12 Emacs 28.2 原生Dired。

根据这个网页,我猜测这段代码中涉及的 --group-directories-first ,就是网页中说的-X | --sort=extension选项,是 GNU 版本的ls 特有的。 在MacOS终端中输入man ls 可以发现ls没有-X选项。

--group-directories-first删掉就可以正常运行了。

不过如果你需要这个功能,那你就需要GNU版本 ls

brew install coreutils

dired-toggle-read-only 进入编辑模式,替换文件名中的一些字符。在minibuffer里粘贴上需要被替换的字符串,此时, 想光标切换到dir buffer去复制需要替换的字符,却无法切换到dir buffer。

需要啥设置吗?

How to customize like this? Can anyone share your configure.

直接调用 dirvish-side 就可以了

是的,就是想要这种side-panel,但是默认的风格没有图片上这种树状结构而是每个目录都是扁平的。另外,默认好像也没有预览。想要图片上这种来浏览整个代码结构。

修复了dirvish-subtree 下的 omit bug