如何在orgmode下增加line-spacing但不让underline和字体分离?

我是想在org mode下增加一下行间距,这样看着舒适一些。用的代码是

(add-hook 'org-mode-hook
(lambda()
(setq-local line-spacing 0.45))

但实际效果是这样:

代码行距的确增加了,非常愉快。但是那个链接的下划线也变远了,这就很不爽了。

对比vscode,

改了一下行间距,下划线依然紧贴字体。

不知各位可否指教一二?

你应该是还有其他额外的设置。

如果仅仅设置 line-spacing,文字跟光标应该是顶端对齐,下划线也不会远离。

emacs -Q --eval '(progn
                   (switch-to-buffer "*.org")
                   (org-mode)
                   (setq-local line-spacing 0.45)
                   (insert "[[link]]"))'

image

1赞

你这个应该是 spacemacs 的锅了:

image

提问还是应该寿命系统、版本、环境等信息。

好不容易登录上账号,之前想回复一直登不上。。

我其实用的doom emacs。我估计是doom的锅。我把我自己的personal customization全删了,就加这一个设置,也出问题。已经给doom提交issue了。

我按你上一楼提供的方法做了实验,结果和你一模一样。很有用,多谢提醒。我把这个实验结果一并发到issue里去了。

回头看看Henrik Lissner怎么说吧。我看了看doom关于org那块的配置,反正我是没看出有什么问题。不知道是不是他的其他位置搞的鬼。

Spacemacs/Doom 应该对字体/样式做了类似的优化,所有存在同样的问题。

在 Spacemacs 中可以通过以下方式设置合适的行间距:

(with-current-buffer "*.org"
  (kill-local-variable 'line-spacing) ;; Clear interference
  (setq-local default-text-properties '(line-spacing 0.25 line-height 1.45)))

image

有意思。我回头试试doom行不行。多谢。

Error (org-mode-hook): Error running hook (kill-local-variable 'line-spacing) because: (invalid-function (kill-local-variable 'line-spacing)) 这是我在doom里实验的结果。 我的代码是

(if (display-graphic-p)
    (add-hook! 'org-mode-hook
               '((kill-local-variable 'line-spacing)
                 (setq-local default-text-properties '(line-spacing 0.45)))))

不知道 add-hook! 是什么,正常的 add-hook 是这样:

(add-hook 'org-mode-hook
          (lambda ()
            (kill-local-variable 'line-spacing) ;; 如果之前设置的 local 变量没有
                                                ;; 删除,可能会导致后面的设置无效。
            (setq-local default-text-properties
                        '(line-spacing 0.25     ;; 必须两项组合,
                          line-height 1.45      ;; 才能起到效果。
                          ))))

kill-local-variable 是 C 函数,不会不存在。

突然好奇,他们是做了什么x

可能是调了字体垂直居中吧,比如 mode-line 各种符号大小不一,如果不居中就会很难看。

这样…

原来还可以调垂直方向的啊(

只是猜测,究竟发生了什么不知道。Spacemas/Doom 我都不用,它们往 core 里塞太多东西了。即使 init.el 什么都不加,光运行 core 就是能得到一份完备的配置。要是 core 里面有问题,像我这样只会「二分法」除错的人只能吐血了。

我直接把你的add-hook的代码复制进去了,结果居然没用。如图:

你可能 hook 里面还有后续动作。建议用最小配置测试。

我这里直接在 doom/init.el 末尾加 hook 就可以:

你这个下划线和字体没分离么?我怎么看着分开了呢,跟那个白板emacs的不一样

那是因为还有 0.25 的间距,改成 0 就没有了。

我重新debug了一下,把你的复制进我的配置,有用了。

感谢指点。

之前没成功可能是因为我抄漏了什么东西,或者doom自己定义的add-hook!我用错了。

以及,确实line-spacing和line-height一起用才行,单独line-height是不存在的,单独line-spacing是我那个结果。line-spacing哪怕是0也得写上去。

建议把你在 doom 提的 issue 链接附上。

https://github.com/hlissner/doom-emacs/issues/5169

其实还是有些问题。比如你看最后一行,和倒数第二行就紧贴着,其他的就没有这个情况。

再看上面白字那里,出现line-wrap的地方,行间距是不同的。

不知道emacs控制这里的原理是什么。line-spacing和line-height这两个变量分别在控制什么?

我现在是line-spacing 0.2, line-height 1.45。