【问题标题】:How to manage fonts in emacs?如何管理emacs中的字体?
【发布时间】:2015-04-10 06:59:16
【问题描述】:

是否有任何标准技术、软件包等用于管理 emacs 中的字体设置?

我想在某处定义一次默认的固定和可变宽度字体,并使用这些默认值在模式下设置面部字体。例如,将org-mode的默认字体设置为可变宽度默认值,并将其代码面设置为固定宽度默认值。

【问题讨论】:

  • 可能是ColorTheme 会有所帮助。我不知道你是否可以有一个模式的主题,但你可以用 icycles 快速切换主题。
  • 这基本上是一个软件推荐。尝试在 emacs.stackexchange.com 上询问
  • 谢谢,我没有意识到有一个 emacs.stackexchange.com
  • 我想知道当这个非常相似的问题没问题时为什么会被标记下来stackoverflow.com/questions/3758139
  • 基本上,监控这个线程的人是铁杆程序员,他们期待一个经典的编程问题——例如,他们尝试过的原始海报中的示例代码,以及他们对什么的解释期望发生(但没有发生)。在过去,一般问题只被提交给超级用户(大多数时候 OP 最终自己回答这些问题),但现在测试版 Emacs 交换已被证明对这两种问题都非常有用——即,困难的编程问题,加上其他问题。

标签: emacs


【解决方案1】:

我终于这样解决了:

首先设置固定间距和可变间距字体以供一般使用:

(custom-set-faces
 '(fixed-pitch ((t (:family "Input Mono Narrow"))))
 '(variable-pitch ((t (:family "Arial")))))

然后在你的模式的钩子里:

(add-hook 'org-mode-hook nil :inherit 'variable-pitch)

【讨论】:

  • add-hook 的调用看起来非常糟糕。你认为它在做什么?
  • add-hook 的文档字符串——即M-x describe-function RET add-hook RET 告诉我们它有 4 个参数——钩子名称;函数名;是否将函数附加到钩子列表的末尾;以及是否使挂钩分配缓冲区本地化。您的钩子语句说没有附加到钩子的函数,然后您将附加参数和缓冲区本地参数分配给钩子中不存在的函数。通常,第三个和第四个参数是nilt。第二个参数是函数的名称,或 lambda(不鼓励使用)。
  • 是的,我想我把这一切都搞砸了。我不确定我在网上哪里找到的。这看起来更有希望:stackoverflow.com/a/534961/434405
【解决方案2】:

这是我所拥有的系统的改编版。我已经默认使用固定间距,但是这些调用将允许您使用模式挂钩定义用于模式的字体。

我也调用了“toggle-pitch”方法来在需要时在固定和可变间距字体之间进行切换。

(set-face-font 'default "Source Code Pro Semibold-9")
(set-face-font 'variable-pitch "Segoe UI Semibold-9")
(copy-face 'default 'fixed-pitch)

;;============================================================
;; toggle between variable pitch and fixed pitch font for 
;; the current buffer
(defun fixed-pitch-mode ()
  (buffer-face-mode -1))

(defun variable-pitch-mode ()
  (buffer-face-mode t))

(defun toggle-pitch (&optional arg)
  "Switch between the `fixed-pitch' face and the `variable-pitch' face"
  (interactive)
  (buffer-face-toggle 'variable-pitch))

;; enable buffer-face mode to provide buffer-local fonts
(buffer-face-mode)

;; Set the fonts to format correctly
;(add-hook 'text-mode-hook 'fixed-pitch-mode)
;(add-hook 'dired-mode-hook 'fixed-pitch-mode)
;(add-hook 'calendar-mode-hook 'fixed-pitch-mode)
;(add-hook 'org-agenda-mode-hook 'fixed-pitch-mode)
;(add-hook 'shell-mode-hook 'fixed-pitch-mode)
;(add-hook 'eshell-mode-hook 'fixed-pitch-mode)
;(add-hook 'bs-mode-hook 'fixed-pitch-mode)
;(add-hook 'w3m-mode-hook 'variable-pitch-mode)
;(add-hook 'org-mode-hook 'variable-pitch-mode)
(add-hook 'eww-mode-hook 'variable-pitch-mode)

【讨论】:

    【解决方案3】:

    设置面的一个非常有用的方法是使用 M-x list-faces-display 函数。这个函数会弹出一个缓冲区,左边是人脸名称,右边是一个例子。然后,此缓冲区可让您自定义任何面并查看面定义。一个可能的“陷阱”是它只会显示在您运行该函数时它知道的面孔。这意味着,例如,如果您没有加载 org-mode,您可能看不到任何 org-mode 面部定义。

    定义面时有用的选项之一是继承选项,它告诉面继承另一个面的设置。某些继承的值可以在“主”面定义中被覆盖(例如面颜色)。

    因此,在您的情况下,我将为默认的固定和可变宽度字体设置适当的值,然后将其他面(即 org-mode 面)设置为从这些定义继承。

    这样做可以消除做任何附加钩子游戏的需要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2013-01-16
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多