中英文折行终极解决方案

找到一个新方法,现在即使是不等宽字体,在超长行(1w+字符)也不是很卡。普通的行完全没有延迟。(mbp 13’’ mid 15)。我认为现在日常可用。下一步希望大家多测试一下提交bug给我。

1 个赞

看起来这个是硬折行,有没有 svisual-line-mode 之类的。。。

不是硬折行,对buffer没有修改。折行效果是用overlay实现的。

那名字起的可能有误解,然后最好软硬都支持。。。

硬fill本来就有,只不过不支持variable font。但是硬fill variable font的文本没什么意义:你换个字体就不一样了。

doom-emacs 可以这样配置:

;; packages.el
(package! sfill
  :recipe (:host github :repo "casouri/lunarymacs" :files ("site-lisp/sfill.el")))
;; config.el
(use-package! sfill
  :hook
  ('text-mode . #'sfill-mode))

use-package + straight 配置大概是这样:

(use-package sfill
  :straight (sfill
             :type git
             :host github
             :repo "casouri/lunarymacs"
             :files ("site-lisp/sfill.el"))
  :hook
  ('text-mode . #'sfill-mode))
2 个赞

我感觉sfill这个名字可能容易产生误会,考虑改名称flywrap。你们怎么看?

org-mode 里面的链接好像有点问题。就是一行过长了之后,后面的链接好像会跨行, 例如下面的例子。。。

这个是测试,如果一行的长度超过设定的 fill-column 的值, [[https://emacs-china.org][Emacs China]]

改成了flywrap:

flywrap-mode现在重绑C-a/e到自己的命令,这样可以跳到显示的行首行尾,而不是跳到实际上的行首行尾。

现在改善了一点,至少不会有开头跨行的问题。但是如果链接本身跨行了(比如EmacsChina不在一行),下划线还是会延长到行尾。我再想想怎么整。

另外Org mode里标题下面一行不知道为啥没有wrap,手动修改激活才能激活,可能是Org mode里折叠的方式和jit-lock还有flywrap之间的配合的问题。

在某个org文件里enable之后,把那个buffer关掉后,不知道为什么在别的buffer里会报错:

Debugger entered--Lisp error: (error "Specified window is not displaying the current buffer")
  font-at(8114)
  flywrap-forward-column-visual(96)
  flywrap-go-to-break-point(8114 8204)
  flywrap-line(8173 nil)
  flywrap-region(8173 8673)
  flywrap-jit-lock-fn(8173 8673)
  #f(compiled-function (fun) #<bytecode 0x6a135939>)(flywrap-jit-lock-fn)
  run-hook-wrapped(#f(compiled-function (fun) #<bytecode 0x6a135939>) flywrap-jit-lock-fn)
  jit-lock--run-functions(8173 8673)
  jit-lock-fontify-now(8173 8673)
  jit-lock-stealth-fontify(t)
  apply(jit-lock-stealth-fontify t)
  timer-event-handler([t 0 0 205771 nil jit-lock-stealth-fontify (t) idle 0])

似乎和这个新上的包类似?

他这个还是靠word-wrap

emmm这个很奇怪,emacs -q也是吗

有没有办法调整默认行宽呢