emacs-nerd-icons 一个all-the-icons的替代方案(支持GUI和terminal)

你可以用终端kitty来做测试,因为他这个包在终端里也是支持的。 下面是我对kitty部分字符的设定,你也可以参考:

symbol_map U+2E80-U+FA2D  Sarasa Gothic SC Nerd Font

下面是安装我用的字体

yay -S ttf-sarasa-gothic-nerd-fonts  

如果终端中的符号是正常的,你emacs里的符号不正常,那就说明你emacs关于字体的配置有问题。

请问这个是 kitty 的配置吗?

symbol_map U+2E80-U+FA2D  Sarasa Gothic SC Nerd Font

我没有太理解这个调试的思路?是说 kitty 有一个功能是将一些一些字符用特定字体(sarasa-gothic-nerd-fonts)展示,然后我安装这个特定字体来看看有没有用吗?那这个 sarasa-gothic-nerd-fonts 还是 nerd-fonts 吗?

不过如果不执行 symbol_map 这个指令,然后只用 kitty 并下载字体,似乎是可用的

请问这说明了什么呀?

我配置字体的代码如下,请问能看出什么问题吗?

(defun +setup-fonts ()
  "Setup fonts."
  ;; JetBrainsMono 这个字体并不支持一些字符,好像 Sarasa Term SC 支持得更多一些,但是不知道 vscode 为啥可以
  (set-face-attribute 'default nil :font (font-spec :family "JetBrainsMono Nerd Font" :size +font-en-size)) ; 设置英文字体
  (set-fontset-font t 'han (font-spec :family "LXGW WenKai" :size +font-han-size))
  (set-fontset-font t 'han (font-spec :script 'han) nil 'append) ; 设置中文字体 Sarasa Term SC LXGW WenKai
  (set-fontset-font t 'unicode (font-spec :family "Noto Color Emoji") nil 'append)
  ;; (set-fontset-font t 'unicode (font-spec :family "Symbola") nil 'append)
  )

那个配置是因为我只对部分字体做了配置,所以单独拿了出来,它不影响我英文字体。可以看的出来的是不可能是什么系统问题,如果有正确的字体,也能正常显示符号。所以你可以先把你的字体配置去掉。仅仅安装他的两个包,看看是不是就能正常显示了。同时你可以在那个不显示符号的位置执行describe-char来看看字体是否为nerd font。

即使 emacs -q 依然是这种失败的结果

另外如果使用 describe-char 描述这个错误字符,他会描述成一个 space,如下所示

             position: 223 of 1111 (20%), column: 56
            character: SPC (displayed as SPC) (codepoint 32, #o40, #x20)
              charset: ascii (ASCII (ISO646 IRV))
code point in charset: 0x20
               script: latin
               syntax:   	which means: whitespace
             category: .:Base, a:ASCII, l:Latin
             to input: type "C-x 8 RET 20" or "C-x 8 RET SPACE"
          buffer code: #x20
            file code: #x20 (encoded by coding system utf-8-unix)
              display: by this font (glyph code):
    ftcrhb:-JB-JetBrainsMono Nerd Font-regular-normal-normal-*-20-*-*-*-m-0-iso10646-1 (#x04)

不过我用 describe 描述正常显示的图标,结果类似。

不需要emacs -q,那样你安装的包岂不是也没了,是把你字体的配置注释掉就好

确定这个竖线不是feature吗?因为竖线左边是文件的信息,右边是文件名,感觉像是故意做出来方便区分的

其实就蛮奇怪的,一般字符缺失不是像他那样的,而是也会显示一个符号,但不能正常显示。dired我没设置,是没有这个竖线的。

我确实没有表达清楚,我说的 emacs -q 就是没有其他配置,只有 nerd-icons 和 nerd-icons-dired 这两个包,就会出现这种“极高竖线”的情况。

此外如果使用 knosole 来运行 emacs -nw,其效果如下,可以看到依然是没有这个字符的:

如果只去掉字体设置,其效果如下:

在极高线出 describe-char,其效果如下:

position: 1072 of 1111 (96%), column: 56
            character: SPC (displayed as SPC) (codepoint 32, #o40, #x20)
              charset: ascii (ASCII (ISO646 IRV))
code point in charset: 0x20
               script: latin
               syntax:   	which means: whitespace
             category: .:Base, a:ASCII, l:Latin
             to input: type "C-x 8 RET 20" or "C-x 8 RET SPACE"
          buffer code: #x20
            file code: #x20 (encoded by coding system utf-8-unix)
              display: by this font (glyph code):
    ftcrhb:-ADBO-Source Code Pro-regular-normal-normal-*-16-*-*-*-m-0-iso10646-1 (#x01)

不清楚是什么原因,非常感谢您的帮助。

应该不是 feature,可以参考我发的第一张图,里面有正常显示的图标,也有极高竖线。感谢您的帮助。

你先试试一个最小配置,先别配置其他东西,你再看看有没有问题

(use-package nerd-icons
  :custom
  (nerd-icons-font-family "Sarasa Term SC Nerd")
  :ensure t)
(use-package nerd-icons-dired
  :hook
  (dired-mode . nerd-icons-dired-mode))

依然是有问题的

没有任何配置的情况下也有那个竖线吗?你确认nerd-icons-dired-mode是enable的吧?有点摸不到头脑了。。。

就是用的您上面给的那个配置呀,写在 init.el 里面(里面只有那俩包和 straight 启动部分),early-init.el 也清空了。确实是有这个竖线的,会不会是我的 emacs GUI 界面本身对于未找到的字符就是这个极高竖线?因为之前也出现过一些字符未找到,然后出现极高竖线的情况,比如我使用 JetBrainsMono Nerd Font 就没有办法渲染一些字符,如下所示:

emacs 版本是 29.1,操作系统是 manjaro 23.1

我的 emacs 配置在 GitHub - Thysrael/emacs.d: my emacs config

抱歉,我刚才(nerd-icons-font-family “Sarasa Term SC Nerd”)的位置多了个emacs,你再试试,固定下这个字体。

“多了个 emacs ”是指什么呀?

刚才写成了(emacs-nerd-icons-font-family “Sarasa Term SC Nerd”),好久之前写的,我也没检查,你先试试我改好的配置。

哇,解决了诶,太感谢了 orz

不过为啥图标有大有小呀?

你可以换字体固定嘛,是nerd字体就好

我试了几款,似乎都会出现极高竖线,可能只有 Sarasa Term SC Nerd 不会。总之还是感谢了,不过我好像定位到了 bug,当我使用 nerd-icons-insert 插入字体的时候,会发现所有的 midicon 是插入后都是一条极高竖线