我正在尝试在Emacs缓冲区中设置文本的行高,以便字母上方和下方有空格。我试图破译the documentation,但这没有任何意义。没有line-height
变量,(setq-default line-height 32)
什么也没做。文件声称
如果属性值是表单列表(高度总计),则会添加 显示行下方的额外空间。首先Emacs使用高度作为 高度规格来控制线上方的额外空间;然后它增加了足够的 线下方的空间使总线高度达到总数。
"财产价值"?哪一个?我试过(setq-default line-height '(32 64))
,什么也没做。
还有一个line-spacing
变量,我可以像(setq-default line-spacing 0.25)
一样设置,除了它不会在文本之前产生空间,只能在它之后产生这种变量。与show-paren-mode
等模式配对时,这看起来很丑陋。" dip"下:
(setq-default line-spacing '(32 64))
什么也没做。
对于我喜欢垂直居中的字体,其次我想知道line-height
上的文档正在讨论什么。任何帮助将不胜感激。
我发现我可以使用以下代码获得我想要的效果:
(add-text-properties (point-min) (point-max)
'(line-spacing 0.25 line-height 1.25))
但是,在某些模式下,属性会在我开始输入的区域消失。如何使默认的顶部和底部间距? (胡克斯不会工作。)
答案 0 :(得分:4)
正如文档所说,line-height
是一个文本(或覆盖)属性。它不是变量。
尝试(setq-default line-spacing 20)
。
line-spacing
是帧参数或缓冲区局部变量。其值可以是整数个像素或浮点数,指定相对于帧的默认行高的间距。该文档没有提供给它一个列表值,例如(32 64)
。
如果您在终端模式下使用Emacs,那么这些都不适用。正如医生所说:
On text terminals, the line spacing cannot be altered.
答案 1 :(得分:2)
TLDR :将其添加到初始化文件中的某个位置:
;; Set the padding between lines
(defvar line-padding 3)
(defun add-line-padding ()
"Add extra padding between lines"
; remove padding overlays if they already exist
(let ((overlays (overlays-at (point-min))))
(while overlays
(let ((overlay (car overlays)))
(if (overlay-get overlay 'is-padding-overlay)
(delete-overlay overlay)))
(setq overlays (cdr overlays))))
; add a new padding overlay
(let ((padding-overlay (make-overlay (point-min) (point-max))))
(overlay-put padding-overlay 'is-padding-overlay t)
(overlay-put padding-overlay 'line-spacing (* .1 line-padding))
(overlay-put padding-overlay 'line-height (+ 1 (* .1 line-padding))))
(setq mark-active nil))
(add-hook 'buffer-list-update-hook 'add-line-padding)
根据自己的喜好增加或减少line-padding
值。
这个答案几乎只是对上述问题,答案和评论中的信息进行了总结,因此我建议先阅读这些内容。
我使用覆盖而不是文本属性,因为当向缓冲区添加新文本时(特别是通过复制/粘贴),它的表现会更好。
buffer-list-update-hook
用于标识何时创建了新缓冲区,因此需要应用覆盖。
出于性能方面的考虑,为了不连续添加覆盖,如果现有的填充覆盖存在铅,则将其删除。
答案 2 :(得分:0)
尝试“帮助=>更多手册=> Emacs Lisp参考”并从那里输入i text properties RET
。这有望澄清情况。至于你的具体要求,我认为没有一种简单的方法可以立即得到你想要的东西。您可能希望M-x report-emacs-bug
关于paren-highlighting的显示外观。