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

@alexluigit 这个预览文件夹时上面怎么有一行空白?

可以了!zsbd

这好像是我特意空的一行,当时觉得和默认设置看起来比较协调。这样看起来的话似乎是有点多余,我等会改一下。

只有通过dirvish命令进入目录才能预览?开启dirvish-override-dired-mode后,通过dired进入目录不能预览?这有点不符合直觉啊。

这个链接 404

(defun my-highlight-line-on () 
      (custom-set-faces ;; 修改当前行的高亮背景色。
       '(hl-line ((t (:background "#daa520" ))))))
(add-hook 'xah-fly-command-mode-activate-hook 'my-highlight-line-on)

没有 用 dirvish 时, 这个函数是 有效的,

用了 dirvish 就没用了, 上面链接也打不开, 不知道, 在那里 可以设置吗

主要目的想在 xah-fly-mode 时, 当前是在 命令模式, 还是在 插入模式时, 以区别当前的不同状态

隔了这么久破案了,就是帖子上面提到过的–time-style的问题。

我系统设置了中文locale,于是ls -l出来的时间格式是“X月X日 H:m“,这就导致了dirvish-fd处理出现问题,表现出来就是上面的形式。 只要设置dired-listing-switches的–time-style就能解决。

    (setq dired-listing-switches
          "-l --almost-all --human-readable --group-directories-first --no-group --time-style=iso")

可以了, 不是设置

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 个赞