emacsclient 字体检查不起作用

标签 emacs fonts emacsclient

我正在尝试为 emacsclient 设置字体,如下所示:

(let ((default-font (cond
                     ((member "Inconsolata" (font-family-list))
                      "Inconsolata 14")
                     (t
                      "monospace 20"))))
  (set-default-font default-font)
  (add-to-list 'default-frame-alist `(font . ,default-font)))

我在 cond sexp 处C-x C-e,它返回“Inconsolata 14”。我在 let sexp 处 C-x C-e 并更新了字体。

当我通过启动 emacs 时

$ emacs

它可以工作(字体设置为 Inconsolata 14)。

但是当我通过启动应用程序时

$ emacsclient --alternate-editor="" --create-frame "$@"

字体改为等宽 20。

请指教。

编辑:

我发现通过包含

(message "%s" (font-family-list))

在我的 .emacs 文件中,当 emacsclient 启动时,(font-family-list) 返回 nil

不幸的是,也在初始化期间:

;; Both also print `nil` to the `*Messages*` buffer.
(message "%s" (find-font (font-spec :name "inconsolata")))
(message "%s" (find-font (font-spec :name "Inconsolata")))

;; Throws "error: No fonts being used"
(message "%s" (describe-font "Inconsolata"))

我不知道如何在初始化期间检测是否安装了字体。我的问题变成了:当 emacsclient 启动时,如何可靠地检查字体是否可用?

编辑2:

after-init-hookemacs-startup-hookwindow-setup-hookbefore-make 中回显-frame-hookafter-make-frame-functions 也会导致 nil

最佳答案

叹息...也对这个问题很恼火,但我找到了 Emacs Lisp 解决方案。以下是我的 Emacs 配置中相应片段的直接复制/粘贴:

(defun frame-font-setup
    (&rest ...)
  ;; (remove-hook 'focus-in-hook #'frame-font-setup)
  (unless (assoc 'font default-frame-alist)
    (let* ((font-family (catch 'break
                          (dolist (font-family
                                   '("Powerline Consolas"
                                     "Consolas for Powerline"
                                     "Consolas"
                                     ;;
                                     "Powerline Inconsolata-g"
                                     "Inconsolata-g for Powerline"
                                     "Inconsolata-g"
                                     ;;
                                     "Powerline Source Code Pro"
                                     "Source Code Pro for Powerline"
                                     "Source Code Pro"
                                     ;;
                                     "Powerline DejaVu Sans Mono"
                                     "DejaVu Sans Mono for Powerline"
                                     "DejaVu Sans Mono"
                                     ;;
                                     "Monospace"))
                            (when (member font-family (font-family-list))
                              (throw 'break font-family)))))
           (font (when font-family (format "%s-12" font-family))))
      (when font
        (add-to-list 'default-frame-alist (cons 'font font))
        (set-frame-font font t t)))))
(add-hook 'focus-in-hook #'frame-font-setup)

嗯嗯...[高兴]

关于emacsclient 字体检查不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221960/

相关文章:

python - Emacs 协作缓冲区以错误的模式打开

bash - emacs + '=' 之后的 comint-dynamic-complete-filename

emacs - 在 grep 模式下评估 sexp 并在新缓冲区中显示输出

wpf - 如何在 WPF 中找到任意字形的精确大小?

fonts - Arial Black-Websafe字体?

Emacs:获取 new-frame 和 emacsclient -c 以使用设置的帧大小?

emacs - 在命令行上评估 emacs lisp 表达式

emacs - 在Elisp中的lambda递归

Emacsclient 钩住 kill

javascript - 确定 Google 网络字体是否已加载