Emacs——调试一个字符太宽的覆盖



我正在寻找一些帮助,请调试第二个例子-它应该只有一(1)个字符宽,但最终是两(2)个字符宽。


WORKING示例:下面的代码创建了一个只有一(1)个字符宽的覆盖,这是正确的:

(let ((my-column (current-column)))
  (overlay-put
    (make-overlay
      (save-excursion (beginning-of-line) (+ (point) my-column))
      (+ 1 (save-excursion (beginning-of-line) (+ (point) my-column)) ) )
    'face '(background-color . "pink")))

破碎示例:下面的代码创建了一个两(2)个字符宽的覆盖,这是不正确的:

(let ((my-column (current-column)))
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "n" nil t)
      (overlay-put
        (make-overlay
          (save-excursion (beginning-of-line) (+ (point) my-column))
          (+ 1 (save-excursion (beginning-of-line) (+ (point) my-column)) ) )
        'face '(background-color . "pink"))) ))

EDIT - FIXED EXAMPLE:根据@Lindydancer在下面的回答中的有益指导,这里是修改后的例子,现在可以工作了——也许它可以简化,但至少我现在理解了这个概念:

(let* (
    (my-column (current-column))
    my-line-beginning
    my-line-ending
    my-line-length)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "n" nil t)
      (setq my-line-beginning (point))
      (end-of-line)
      (setq my-line-ending (point))
      (setq my-line-length (- my-line-ending my-line-beginning))
      (when (< my-column my-line-length)
        (overlay-put
          (make-overlay
            (save-excursion (beginning-of-line) (+ (point) my-column))
            (+ 1 (save-excursion (beginning-of-line) (+ (point) my-column)) ) )
          'face '(background-color . "pink"))) )))

我认为问题是你添加了覆盖到所有的行。如果一行比my-column短,覆盖将溢出下面的行,给人的印象是一些覆盖是两个字符宽,而实际上是两个一个字符的重叠放在一起。

尝试限制代码只在至少my-overlay长的行上放置覆盖

最新更新