对于所有我的任务,我在Emacs中使用URW Chancery L字体。但对于一些任务,例如org-mode表格、shell或sunrise-commander,我想设置等宽字体。所以,我的问题是,我该如何做呢?我找到的全部内容都是“set-default-font”,这不是我想要的。
在Emacs中,用于指定文本外观(如字体、颜色等)的对象称为面(face),它们大多是全局的,尽管也可以按帧设置。因此,您可以通过创建一个单独的帧并更改该帧中使用的“默认”面来实现上述操作。
此外,Emacs现在还可以通过face-remapping针对特定缓冲区改变面的外观,例如:
(face-remap-add-relative 'default '(:family "Monospace"))
应该将当前缓冲区设置为等宽字体。 因此,将上述内容添加到org-mode-hook
中可能会解决您的问题。
此代码片段仅在 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
指定的颜色。
Monospace
,但奇怪的是,它只对西里尔字母有帮助。在org模式中,表格仍然不是垂直的。 - KActionorg-mode
的 printf 标头中,使用 |
分隔,例如 foo|bar|baz|'。然后按 Enter 键,在插入
|` 并按 Tab 键。这样你就可以得到对齐的单元格。但是,视觉上只适用于等宽字体。 - KActionemacs -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你尝试过自定义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")))))