symbol-overlay 计数不对?

如下图所示,表示当前 symbol 位置的计数不正确,而且总是比实际 symbol 数量多1。

image

OS: Ubuntu
Emacs version: master 分支 revision 68e2a9cd92996dd55ff9599dc1bf99c70070cddb

我也遇到这个 bug 了,你不说我都忘了这个事儿了 :rofl:,让我瞅瞅是哪里不对。

另外我觉得楼主描述的很清楚了,楼上没必要贴那个。

我自己单步发现的是symbol-overlay-maybe-count里的 beforeafter 值返回的不对。在emacs28上却是对的,不过单步时错过一次,但是它又自己变成对的了。

目测是 noverlay 导致的新 bug,因为我在 29 可以复现,28 是好的

3 个赞

我也觉得是这个问题,不过对 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!)
1 个赞

建议报 bug

Symbol Overlay 似乎好久没更新了……

可以用,多谢。