You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

all-the-icons-dired在emacsclient中无法加载的问题求助

问题描述

我正在使用all-the-icons-dired插件,配置代码如下:

(use-package all-the-icons
  :if (display-graphic-p)
  :config
  (add-hook 'dired-mode-hook 'all-the-icons-dired-mode))

直接启动Emacs时图标可正常加载,但使用emacsclient -c .启动时,图标完全无法加载。环境信息:

Ubuntu - 22.04
emacs - 27.1
ExecStart=/usr/bin/emacs --fg-daemon # systemd service entry
问题原因

Emacs daemon通过systemd启动时处于无图形界面环境,此时display-graphic-p返回nil,导致use-package的:if条件不满足,all-the-icons包未被加载。当用emacsclient -c创建图形窗口时,已错过包的加载时机,相关钩子也未注册,因此图标无法显示。

解决方案

修改配置,确保all-the-icons在图形窗口创建时完成加载和初始化,以下两种方式任选其一:

方式一:通过窗口创建钩子处理

(use-package all-the-icons
  :config
  ;; 为指定窗口初始化图标环境
  (defun my-init-all-the-icons (frame)
    (with-selected-frame frame
      (when (display-graphic-p frame)
        ;; 确保图标字体已安装(首次运行会自动下载)
        (all-the-icons-install-fonts t)
        ;; 开启dired图标模式
        (add-hook 'dired-mode-hook 'all-the-icons-dired-mode))))
  
  ;; 初始化当前窗口(针对非daemon启动场景)
  (my-init-all-the-icons (selected-frame))
  ;; 为后续新建的窗口添加初始化钩子
  (add-hook 'after-make-frame-functions 'my-init-all-the-icons))

方式二:简化钩子判断逻辑

(use-package all-the-icons
  :config
  (add-hook 'dired-mode-hook
            (lambda ()
              (when (display-graphic-p)
                (all-the-icons-dired-mode)))))
额外检查

如果修改后仍不生效,可手动执行M-x all-the-icons-install-fonts确保图标字体已正确安装,重启Emacs daemon后再测试。

内容的提问来源于stack exchange,提问作者Abhisek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:53:21