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
相关产品推荐
相关产品推荐

