糊了一个 corfu 适用的 all-the-icons 的 icon 效果

之前缺少一些功能,抽空试试新版本corfu

Update:corfu只支持27+啊 :joy:

不可能所有文件类型都支持的。不认识的先统一用某图标替代,等上游合并就好了。统一协调比啥都重要。

另外,elisp 不是有图标吗?nerdfont 收 PR这么严格的吗还是?

看这里:[Request] icons for Emacs, elisp and orgmode · Issue #342 · ryanoasis/nerd-fonts (github.com)

维护者可能是VI党吧

这 issue 提的地方不对吧。

nerdfont 是其它 devicons、awesome 等一堆字体的集合,那么多上游,有一个合并就成了。

那该提哪里呢?这是个悖论呀 :joy:

nerdfont 官网列了图标来源的,看看哪个好进。

放哪里的问题是由nerd font 维护者决定的,理论上放上游字体或者新加字体都行,但是可能会有冲突。大家给出了几种方案都没有通过,这个在讨论中有的。原始issue并不是我提的,不知道 @twlz0ne 大佬怎么看。

我的理解是 nerdfont 是程序化批量添加图标的,只为某些图标开特例徒增维护成本是不行的。所以应该向 devicon 等这些提 PR。至于冲突,指的是多个图标集含有相似的图标?这是 nerdfont 维护者考虑的事情,而且你这现状没有冲突。

刚看了下 nerdfont repo,明白你说的冲突是指 code points range,确实也可以在 nerdfont 提 PR。 :sweat_smile:

对的,也有用户提出能不能增加file-icons,至今也没有结论。

找了一个最近已合并的 PR,基本把步骤写清楚了。基本上是设计方面的事情,和代码无关。依样画葫芦试试看?

1 个赞

佷闲地给 nerdfont 提了个 PR:

11 个赞

糊了一个 corfu 适用的 nerd-icons 的 margin formatter。相当于极简的 kind-icons,方便魔改。

;; ref to lsp-completion--item-kind
(defvar +corfu-icons--icons
  `((text . ,"nf-cod-text_size")
    (method . ,"nf-cod-symbol_method")
    (function . ,"nf-cod-symbol_method")
    (constructor . ,"nf-cod-symbol_method")
    (field . ,"nf-cod-symbol_field")
    (variable . ,"nf-cod-symbol_variable")
    (class . ,"nf-cod-symbol_class")
    (interface . ,"nf-cod-symbol_interface")
    (module . ,"nf-cod-symbol_namespace")
    (property . ,"nf-cod-symbol_property")
    (enum . ,"nf-cod-symbol_enum")
    (keyword . ,"nf-cod-symbol_keyword")
    (snippet . ,"nf-cod-symbol_snippet")
    (color . ,"nf-cod-symbol_color")
    (file . ,"nf-cod-symbol_file")
    (reference . ,"nf-cod-references")
    (folder . ,"nf-cod-folder")
    (dir . ,"nf-cod-symbol_file")
    (enum-member . ,"nf-cod-symbol_enum_member")
    (constant . ,"nf-cod-symbol_constant")
    (struct . ,"nf-cod-symbol_structure")
    (event . ,"nf-cod-symbol_event")
    (operator . ,"nf-cod-symbol_operator")
    (type-parameter . ,"nf-cod-symbol_parameter")))
(defvar +corfu-icons--cache nil)

;; poor man's kind-icons
(defun +corfu-icons-margin-formatter (_)
  (when-let ((kind-func (plist-get completion-extra-properties :company-kind)))
    (lambda (cand)
      (let ((kind (funcall kind-func cand)))
        (or (alist-get kind +corfu-icons--cache)
            (let* ((name (alist-get kind +corfu-icons--icons "nf-cod-code"))
                   (icon (nerd-icons-codicon name))
                   (disp (propertize (concat icon " ") 'face 'shadow)))
              (setf (alist-get kind +corfu-icons--cache) disp)
              disp))))))

得益于你的这个PR,nerd-icons 得以集成。