page-break-lines的线只显示了一半有遇到过得吗

起因是因为用了dashboard那个线只显示了一半,用了最小的配置只装了dashboard那个线还是只显示一半,看了下dashboard是用的page-break-lines,然后就单独测试了page-break-lines。。。插入线就显示一半啊。。我在虚拟机里的linux测试了下是正常的,看来是我系统的问题。。有遇到的吗git

字体的问题,默认应该是一个 unicode 字符(字符编码: 9472

换成 ascii 支持的字符就好了

我是换成了等号 (setq page-break-lines-char ?=)

换了好多字体。。刚才我全重装又莫名其妙好了。。这个方案留着拉。在出错文件就试试

嗯,这个方法不挑字体,任何字体都是ok的

但是 unicode 字体,有些字体里面没有,或者有但是宽度不对就很尴尬了

还是之前用 spacemacs 的时候找到的解决办法

那时候发现换个字体, spacemacsdashboard 里面显示的线就乱了,就很烦

这个问题我也遇到了,是page-break-lines的一个bug,已提交purcell,可惜因为这只是在中文等环境下才能重现的bug而没有得到重视。我找到了一个几乎完美的解决方式你可以试试。 (setq page-break-lines-char ?—),这个EM dash和原始的box dash很像,但是是单字符宽度的。试成功了可以一起呼吁一下,我在purcell的项目里开了issue。

基本能猜到怎回事,无非就是 locale 在非 C / en_US.UTF-8 等情況下 char-width 对 emdash 的求值不一样罢了,一个简单的方法就是找到 ((cwidth (char-width page-break-lines-char)) 改成 ((cwidth 1)

eval: (char-width page-break-lines-char)

result:

|---------+-----------+------------+----------+-----------|
| ---     | graphical | display    | terminal | display   |
|---------+-----------+------------+----------+-----------|
| windows |         2 | half line  |        2 | half line |
| linux   |         2 | half line  |        2 | half line |
| MacOS   |         1 | whole line |        2 | half line |

简单看,确实是char-width的问题。不过你的方法在一些字体下还是不能占满全行。原因是 (frame-char-width)取得的是frame默认字体的标准宽度(查emacs源码得知是通过在默认字体下算标准ascii码表中可见字符的平均宽度,即20~126),原始的dash是box-drawing在一些字体下有可能达不到标准宽度,导致占不满一行。而我选的em dash是按照默认字体的M的宽度设定的,可以达到标准宽度,要想完美解决这个问题可能还需要找到page-break-lines-char这个字符在默认字体下的宽度才行。 当然,这样搞可能有点过于复杂了。 ps. dash在编码中有好几个,比如en dash是按照N的宽度设定的,就比EM dash略窄,几种dash。中文的破折号用的是两个EM dash。