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

kapmix

前两天跟您提远程服务器上 ls 命令不支持 mtime参数的。

1 个赞

请问前辈:

(defvar dirvish-scopes
  '(:frame selected-frame :tab tab-bar--current-tab-index :persp persp-curr))

里面的 persp-curr 是不是已经没有这个函数了?

感觉它应该是这种东西:

(defun persp-curr ()
  (safe-persp-name (get-frame-persp)))

确实,很早以前想简单兼容一下 persp 和 perspective 这两个包写的。因为我自己不用这俩,他们api变动了我也没注意。大概意思是让每个 workspace 有一个独立的 dirvish 会话不互相干扰。有兴趣PR不? 不知道他们包里有没有自带的函数可以直接返回一个 persp struct 用来比较的,这样就免去在 dirvish 里声明一堆他们的函数。

不好意思,似乎之前的代码是没问题的。

因为我用的是 persp,所以没有 persp-curr 这个函数,但是如果用的是 perspective,那么是有 persp-curr 这个函数的。

而如果用 persp 的话,那么对应获取 persp struct 的函数应该是 get-current-persp,用户自己改一下就可以啦。

1 个赞

模仿 github 的样式改进了下 git-msg。左对齐+响应式终于看着舒服了。

pp
4 个赞

太强了

1 个赞

想请教一下原本 dired 的这个部分在 dirvish 中如何显示:

image

BTW,这个包实在是太好用了,给孩子好用哭了。

试试这个命令 dired-hide-details-mode

嗷嗷感谢感谢,确实有效果,但是 detail 的效果似乎太多了,而且在 dirvish-side 上也会出现。

试试这个:(setq dired-hide-details-preserved-columns '(1))

确实会减少内容,但是 dirvish-side 上也会出现

我找到了,只需要这样设置,就可以在 dirvish-side 中不显示了:

(setq dirvish-hide-details '(dirvish-side))
1 个赞

可以,在 dirvish-attributes 中加入 collapse 就行了

这个容易,可以加上。等会。

哇谢谢谢谢,不过我已经解决好了。

彻底告别 dired-hide-details-mode :laughing: @Deeson @Thysrael

8 个赞

想请教一下,我在不开启的 emerge 的时候是正常的

但是开启 dirvish-emerge-mode 后就变成了 dired-hide-details 的感觉了:

我的配置为:

(use-package dired
  :straight nil
  :bind (:map dired-mode-map
              ("C-c C-p" . wdired-change-to-wdired-mode))
  :custom
  ;; Always delete and copy recursively
  (dired-recursive-deletes 'top)
  (dired-recursive-copies 'always)
  ;; Move between two dired buffer quickly
  (dired-dwim-target t)
  ;; Ask whether destination dirs should get created when copying/removing files.
  (dired-create-destination-dirs 'ask)
  ;; symlink
  (dired-hide-details-hide-symlink-targets nil)
  (dired-listing-switches "-Bhl --group-directories-first --almost-all")
  (dired-vc-rename-file t)
  (dired-clean-confirm-killing-deleted-buffers nil)
  :config
  (setq delete-by-moving-to-trash t)
  )

;; 使用 `E` 可以用外部命令打开文件
(use-package dirvish
  :straight t
  :init
  (dirvish-override-dired-mode)
  :custom-face
  (dirvish-hl-line ((t (:inherit hl-line))))
  (dirvish-collapse-file-face ((t (:height 0.8))))
  (dirvish-collapse-dir-face ((t (:inherit dired-directory :height 0.8))))
  :custom
  (dirvish-quick-access-entries
   '(("h" "~/" "Home")
     ("d" "~/Desktop/" "Desktop")
     ("p" "~/project/" "Project")
     ("b" "~/blog/" "Blog")
     ("r" "~/roam/" "Roam")
     ("l" "~/learn/" "Learn")
     ))
  ;; dirvish 底栏
  (dirvish-mode-line-format
   '(:left (sort symlink) :right (file-time index)))
  (dirvish-side-mode-line-format
   '(:right (yank file-size index)))
  ;; dirvish 条目
  ;; collapse 是对于目录的折叠
  (dirvish-attributes
   '(vc-state nerd-icons collapse git-msg file-modes file-time file-size))
  ;; dirvish 侧边栏条目
  (dirvish-side-attributes
   '(vc-state nerd-icons collapse))
  ;; dirvish 顶栏
  (dirvish-header-line-format
   '(:left (path) :right (omit yank vc-info free-space)))
  (dirvish-path-separators '("~" "/" "/"))
  (dirvish-window-fringe 4)
  (dirvish-hide-cursor t)
  ;; 将 pdf 预览换成 pdf-preface
  (dirvish-preview-dispatchers
   '(video image gif audio epub archive font pdf-preface))
  (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"))
     ("Office"        (extensions "doc" "docx" "xls" "xlsx" "ppt" "pptx"))))
  ;; (dirvish-hide-details '(dirvish-side))
  ;; (dirvish-preview-disabled-exts '("bin" "exe" "gpg" "elc" "eln" "pdf"))
  :bind
  (
   ("<f6>" . dirvish-side)
   :map dirvish-mode-map          ; Dirvish inherits `dired-mode-map'
   ("?"   . dirvish-dispatch)     ; contains most of sub-menus in dirvish extensions
   ;; 导航
   ("a"   . dirvish-quick-access)
   ("r"   . dirvish-history-jump)
   ("M-f" . dirvish-history-go-forward)
   ("M-b" . dirvish-history-go-backward)
   ;; fd
   ("f"   . dirvish-fd)
   ("F"   . dirvish-fd-switches)
   ("y"   . dirvish-yank-menu)
   ("N"   . dirvish-narrow)
   ("<"   . dired-up-directory)
   (">"   . dired-find-file)
   ;; 快速排序
   ("s"   . consult-line)
   ("S"   . dirvish-quicksort)
   ;; 快速标记
   ("M" . dirvish-mark-menu)
   ("W" . dirvish-copy-file-path)
   ("v"   . dirvish-vc-menu)      ; remapped `dired-view-file'
   ("TAB" . dirvish-subtree-toggle)
   ("M-t" . dirvish-layout-toggle)
   ("M-s" . dirvish-setup-menu)
   ("M-e" . dirvish-emerge-menu)
   ("M-j" . dirvish-fd-jump))
  :hook
  (dirvish-mode . dired-omit-mode)
  ;; (dirvish-setup . dirvish-emerge-mode)
  :config
  ;; 让 side-window 在 ace-window 表现的更自然
  (with-eval-after-load 'ace-window
    (define-advice aw-ignored-p (:around (orig-fn window) dirvish-advice)
      (or (funcall orig-fn window)
          (and (> (length (window-list)) 2) ;; Check if there are more than two windows
               (functionp 'dirvish-side--session-visible-p)
               (eq window (dirvish-side--session-visible-p))))))
  )

archlinux 系统,Emacs 30.1,刚更新完 dirvish 。

请问该怎么排查呀?

我也按照这个解决了,感谢道友。

不好意思还想请问一下为什么在 full screen 后 mode-line 就不显示了,但是似乎这里有一个 dirvish-misc-mode 的 buffer。

如果是 mode-line 本身出了问题应该会有报错,你看看 Messages 里面有没有,看是不是哪个 mode-line 的部件出错了。 如果没报错的话你要 emacs -q 排查一下了,我这边没复现。

另外上面这个 emerge 的问题确实是 dirvish 的 bug,我有空看看能不能修。 但总体上还是非常不建议在 --time-style 里面包含中文, 对其他一些包也有影响,比如 diredfl 会着色错误。dirvish-time-string-format 里包含中文是没问题的。