起因是因为用了dashboard那个线只显示了一半,用了最小的配置只装了dashboard那个线还是只显示一半,看了下dashboard是用的page-break-lines,然后就单独测试了page-break-lines。。。插入线就显示一半啊。。我在虚拟机里的linux测试了下是正常的,看来是我系统的问题。。有遇到的吗
字体的问题,默认应该是一个 unicode
字符(字符编码: 9472)
换成 ascii
支持的字符就好了
我是换成了等号 (setq page-break-lines-char ?=)
换了好多字体。。刚才我全重装又莫名其妙好了。。这个方案留着拉。在出错文件就试试
嗯,这个方法不挑字体,任何字体都是ok的
但是 unicode
字体,有些字体里面没有,或者有但是宽度不对就很尴尬了
还是之前用 spacemacs
的时候找到的解决办法
那时候发现换个字体, spacemacs
的 dashboard
里面显示的线就乱了,就很烦
这个问题我也遇到了,是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。