如下图所示,表示当前 symbol 位置的计数不正确,而且总是比实际 symbol 数量多1。
OS: Ubuntu
Emacs version: master 分支 revision 68e2a9cd92996dd55ff9599dc1bf99c70070cddb
如下图所示,表示当前 symbol 位置的计数不正确,而且总是比实际 symbol 数量多1。
OS: Ubuntu
Emacs version: master 分支 revision 68e2a9cd92996dd55ff9599dc1bf99c70070cddb
我也遇到这个 bug 了,你不说我都忘了这个事儿了 ,让我瞅瞅是哪里不对。
另外我觉得楼主描述的很清楚了,楼上没必要贴那个。
我自己单步发现的是symbol-overlay-maybe-count
里的 before
和 after
值返回的不对。在emacs28上却是对的,不过单步时错过一次,但是它又自己变成对的了。
目测是 noverlay 导致的新 bug,因为我在 29 可以复现,28 是好的
我也觉得是这个问题,不过对 overlay 的 api 不熟悉,不知道以前版本那些 api 的正确行为是啥
overlay-lists
的行为有变化,没返回 pair。
临时用 overlays-in
糊了一个,你试试看
(defun symbol-overlay-get-list! (dir &optional symbol exclude)
"Get all highlighted overlays in the buffer.
If SYMBOL is non-nil, get the overlays that belong to it.
DIR is an integer.
If EXCLUDE is non-nil, get all overlays excluding those belong to SYMBOL."
(let ((lists (if (> dir 0)
(if (looking-at-p "\\_>")
(overlays-in (- (point) 1) (point-max))
(overlays-in (point) (point-max)))
(if (< dir 0)
(butlast (overlays-in (point-min) (+ 1 (point))))
(overlays-in (point-min) (point-max))))))
(seq-filter
(lambda (ov)
(let ((value (overlay-get ov 'symbol)))
(and value
(or (not symbol)
(if (string= value symbol) (not exclude)
(and exclude (not (string= value ""))))))))
lists)))
(advice-add 'symbol-overlay-get-list :override #'symbol-overlay-get-list!)
建议报 bug
Symbol Overlay 似乎好久没更新了……
可以用,多谢。