Emacs缓冲区本地字体

7
对于所有我的任务,我在Emacs中使用URW Chancery L字体。但对于一些任务,例如org-mode表格、shell或sunrise-commander,我想设置等宽字体。所以,我的问题是,我该如何做呢?我找到的全部内容都是“set-default-font”,这不是我想要的。
3个回答

10

在Emacs中,用于指定文本外观(如字体、颜色等)的对象称为面(face),它们大多是全局的,尽管也可以按帧设置。因此,您可以通过创建一个单独的帧并更改该帧中使用的“默认”面来实现上述操作。

此外,Emacs现在还可以通过face-remapping针对特定缓冲区改变面的外观,例如:

(face-remap-add-relative 'default '(:family "Monospace"))

应该将当前缓冲区设置为等宽字体。 因此,将上述内容添加到org-mode-hook中可能会解决您的问题。


同样的效果--只影响西里尔字母。有没有办法在SO中插入截图? - KAction

1

此代码片段仅在 C 模式下设置 "Arial" 字体系列:

(defun set-my-font ()
  (overlay-put (make-overlay (point-min) (point-max) nil nil t)
               'face '(:family "Monospace")))

(add-hook 'org-mode-hook 'set-my-font)

用所需的模式替换org-mode-hook,它应该也可以工作。

此解决方案通过在整个缓冲区上设置叠加层的字体系列属性来影响缓冲区局部字体的创建。叠加层的face属性仅指定字体系列(Monospace),Emacs重新显示足够智能,以将其与其他文本属性合并,例如由font-lock指定的颜色。


我在你的示例中将“family”替换为Monospace,但奇怪的是,它只对西里尔字母有帮助。在org模式中,表格仍然不是垂直的。 - KAction
你能教我如何获取org mode表格吗?我不是org-mode的用户,而且我尝试的一些琐碎的事情似乎都很好用。 - user4815162342
org-mode 的 printf 标头中,使用 | 分隔,例如 foo|bar|baz|'。然后按 Enter 键,在插入 |` 并按 Tab 键。这样你就可以得到对齐的单元格。但是,视觉上只适用于等宽字体。 - KAction
对我来说它似乎仍然有效。重复步骤:1. emacs -q; 2. M-x customize-face RET default RET,将字体族设置为Arial或其他比例字体; 3. 运行(修订后的)答案中的代码; 4. 切换到新缓冲区并运行M-x org-mode RET; 5. 输入foo|bar|baz RET RET RET。完成这些步骤后,我看到缓冲区的内容以等宽字体显示,单元格正确对齐。 Emacs版本是24.2.1,org-mode版本是7.8.11。 - user4815162342

0

你尝试过自定义org-table吗?

你可以通过org-menu > Customize > Customize > org-table进行修改

或者使用命令行

M-x set-face-font RET org-table RET -PfEd-DejaVu Sans Mono-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1

使用tab键进行自动补全并查看其他可用字体

最后,你也可以直接修改你的init.el文件,添加类似以下内容:

(custom-set-faces
 '(org-table ((t (:foreground "LightSkyBlue" :family "DejaVu Sans Mono")))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接