参照 all-the-icons.el 写一个扩展:nerd-icons.el

明白了,\377 可以再观望观望。 刚才看了下nerd-icons-data.el,里面有 fileicon 的定义,而nerd-fonts好像并不包含 fileicon。

fileicon 这部分需要讨论一下。

all-the-icons 里面有个单独的 all-the-icons-alist,算是个杂集,里面也放了一些作者自定义的图标。我把它取消了,代码中一些用到 alltheicons 的都改为 fileicon,不知是否合适。

fileicon 目前也是比较缺的,需要从其它集合中挑选。

对,all-the-icons-icon-alist 是一个集合,创建了一个文件名和图标之间的映射表。这个主要是用于all-the-icons-icon-for-bufferall-the-icons-icon-for-file,可以根据文件名自动提取出相应文件类型的 icon。

fileicon是一个单独的字体,这里你是想保留吗?把alltheicons归到fileicon也没问题,就是重新选择图标并创建映射关系。这样fileicon就需要按照all-the-icons的方式挑选图标。还有一个方案就是完全去掉fileicon,用真正的字体去映射。

还有一个需要优化的是,需要加上memorize 优化性能。

我不知道你是怎么插入字符编码的,想提 PR 不知如何下手。

看到你的 PR 了,非常感谢。

我把把代码拉下来,再补了一个函数和几个测试,然后改了两处变量命名。不知道 PR 能不能协作,还是我打一个 PATCH 文件给你?

命名的错误很大程度是因为我改了命名规则导致的,在 all-the-icons 中的 *-icon-alist 我改成了 *-icon-spec。原本是为了区分,因为我把 nerd-icons-data.el 中的变量命名为 nerd-icons-alist{/fileicon, /faicon ...} 了,所以:

  1. 描述 icon 如何渲染的信息,存放在 -icon-spec
  2. 映射 icon 名称和图标的变量叫做 -alist

关于 font famliy,由于现在只有一个字体,总是返回 “Hack Nerd Font”(可以增设一个 nerd-icons-family 变量以应对使用其它 nerd fonts 的场景),所以相应的 family 函数的主要意义应该是为了兼容 all-the-icons? 对于 all-the-icons 的用法我还需要多做了解。

关于 fileicon/faicon/…,由于现在只有一个字体,我更愿意称它们为集合,用 iconset 表示?iconset 跟 fontset 对应,icon-spec 跟 font-spec 概念上也正好对应。

我是用 nerd-fonts.el 来查询和插入 icon 符号的,刚才更新了,增加输出十六进制代码的功能。


UPDATE

pr 是可以协作的:Allowing changes to a pull request branch created from a fork - GitHub Docs 好像还可以由 maintainers 来追加 commit。没用过这个功能,不知道是啥体验。

今天一直在外面,没来得及回复。你可以先merge再修改。也可以追加后再merge。如果不添加family 函数,很多函数会报错,无法设置正确的face。

@casouri 翻译的这篇很有参考价值啊 翻译了Emacs,字体与字体集

我前面有个地方设置错了:

 (dolist (charset '(han kana symbol cjk-misc bopomofo))
-  (set-fontset-font (frame-parameter nil 'font) charset "Noto Sans Mono CJK SC"))
+  (set-fontset-font t charset "Noto Sans Mono CJK SC"))

相当于把中文字体设置到了 frame,而后续符号又追加到 default (t),所以不对板。看起来,default 的优先级低于 frame,这样也比较合理。

我现在是直接写死的 (set-fontset-font t '(#x4e00 . #x9fff) "WenQuanYi Micro Hei")。编码问题确实头大。

Faint! 发现 nerd font 居然没有 emacs, elisp和 org 的 icon!这该如何是好?

我早就想去提 ISSUE 了,这几天忙一下就忘记了。又赶上家里猫丢了一只小橘猫,昨天还去公安局看了几个小时监控,心力憔悴。


UPDATE

我这就去提 ISSUE!

好像还有不少图标缺失,我有空整理下。nerd-font 为啥不直接集成 fileicon 呢?那就省事了

老铁还是喵星人啊~~~ 宠物丢了是很麻烦

已经提了 [Request] icons for Emacs, elisp and orgmode · Issue #342 · ryanoasis/nerd-fonts · GitHub

确实很早就想提了。nf 有一个 custom 段,vim 等一些图标也都在里边,少了 Emacs 不能忍。

Great! 最好加上 org 图标啊

希望能早日找到😔

all-the-icons目前还是 emacs 里最好的 icon 包,可惜不支持 terminal。我提交了一个 issue: Merge all fonts into one · Issue #143 · domtronn/all-the-icons.el · GitHub ,不知道作者是否能支持。

非常希望nerd-icons.el能尽快成熟起来,能一个字体走天下。不过对于 Emacs 图标缺失还不少,这个恐怕是要些时日。

放假期间,我参考 all-the-iconsicons-in-terminal 也简单写了一个包icons-in-terminal.el,能同时支持 GUI 和 TUI,而且最大程度兼容了all-the-icons接口,所有调用all-the-icons-xxx的地方直接改成icons-in-terminal-xxx即可。和all-the-icons 一样,除了主字体之外还需要安装图标字体,不过对系统来讲经过映射只有一个icons-in-terminal.ttf,这样在终端里可以设置用该字体显示 Unicode 字符。 目前效果看起来还凑合,可能还有部分字体缺失或者错位,需要后续调试再看了。

2 个赞

老兄有没有发现自己定义的 face 颜色跟 all-the-icons 有差别?

比如:

左边是 all-the-icons, 右边是icons-in-terminal /nerd-icons。同样是 purple,定义也完全一样,但是调用发现颜色是另外一个值(基于 light background?)。不知道怎么回事。

右边是在终端下?跟终端色彩有关?

不是,这是同一个 frame 两个窗口的截图,都是 GUI 下。按说定义完全一样的啊,不解。

我在 Terminal 里配置了 Nerd Font 后 lsd 能输出 icon,但是在 eshell 里装了 nerd-icons.el 和 all-the-icons 都不能输出 icon,字体也改了,能看一下你这块的配置吗?

不明白 eshell 里安装 nerd-icons.el 和 all-the-icons 是什么意思。。。