求助:如何给dirvish设置较小的字体?

我最近使用dirvish时有个小问题感觉非常不方便:字体太大显示丑陋。如何给dirvish设置较小字体?

因为项目文件较多,目录层级较深,dirvish显示时把较长较深的文件换行显示,看起来非常丑:

vscode显示文件的侧栏就使用了比编辑区更小的字体。

dirvish很好用,最近作者也回归开发了,希望越来越好。

按理说,这种界面,不应该开启折行呀。

可以关闭折行试一试:

(toggle-truncate-lines 1)

另外,改变字体,你需要看看上面用的什么 face 或 overlay:

  1. 光标定位到你想要调字体的字符上;
  2. 使用 describe-char 命令;
  3. 弹出的界面,最下面说明了该字符上的 face 或 overlay

然后就可以修改对应的 face,就可以调整字号、颜色等

有时候,字符字体没有特别设置,那就是继承的 default,而你又不想改变 default 的样式,那么可以自己新建一个 face,然后利用 hook,在这个 buffer 打开时,覆盖一下 default 的 face:

(defface test '() "new face")
(set-face-attribute 'test nil :height 150)
;; add to hook
(face-remap-add-relative 'default 'test)
;; Doom Emacs, for `solaire-mode' is enable in special buffer
(face-remap-add-relative 'solaire-default-face 'test)
2 个赞

直接hook一下text-scale-decrease?text-scale-FOO应该都只对当前buffer生效的

1 个赞

确实呀!如果只改变字号的话,用 text-scale-decrease 更直接方便。

可以使用根据模式来设置字体,height就是设置字体的大小

(defun my-set-font-for-mode ()
  (cond
   ((derived-mode-p 'dired-mode)
    (setq-local face-remapping-alist '((default (:family "M PLUS Code Latin 50" :height 180) default))))
   ((derived-mode-p 'vterm-mode)
    (setq-local face-remapping-alist '((default (:family "Kode Mono" :height 160) default))))
   ))

我也是根据 mode 来设置字体。因为我用的 setup,就写了个关键字。

(setup-define :set-font
  (lambda (font)
    `(add-hook ',(setup-get 'hook)
               (lambda ()
                 (let ((face-name (intern (format "%s-font-face" ',(setup-get 'mode)))))
                   (unless (facep face-name)
                     (make-face face-name))
                   (set-face-attribute face-name nil :font ,font)
                   (setq buffer-face-mode-face face-name)
                   (buffer-face-mode)))))
  :documentation "Set the font for the current mode.
This will create a unique face for the mode and set the buffer
font to FONT using that face."
  :debug '(form)
  :repeatable t)

然后

(:with-mode dired-mode (:set-font "Aporetic Serif Mono 12"))

我记得狗哥之前对 treemacs 有这种缩小字体的设置

这个折行的问题应该是已经解决了。 至于说给 dirvish 单独设置较小的字体,我没有具体试过,但本质上和给 dired-mode 单独设置字体是同一个问题,因为 dirvish 的 major-mode 还是 dired-mode 没变。我试了下 text-scale-decrease,除了右边留了点缝好像没啥问题。更好的办法似乎还是楼上各位提到的单独为 dired-mode 设置一个小号字体,我有空的时候再研究下。