明白了,\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-buffer
和 all-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 ...}
了,所以:
- 描述 icon 如何渲染的信息,存放在
-icon-spec
。 - 映射 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。
我前面有个地方设置错了:
(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-icons
和 icons-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 字符。
目前效果看起来还凑合,可能还有部分字体缺失或者错位,需要后续调试再看了。
-
GUI:
-
TUI:
-
Icons:
老兄有没有发现自己定义的 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 是什么意思。。。