我正在使用Emacs 24.2并激活换行。
当我读取包含以下消息的各种模拟的日志文件时:“错误:......某些消息......”,我执行增量搜索:C-s错误RET,C-s,C-s ......
我觉得非常恼人的是,搜索的突出显示结果(单词Error)会显示在屏幕的底部,并且无法看到所有其他包裹的行:
我想添加修改,以确保整个文本行将显示在缓冲区中,如下所示:
我发现this question有关重新定位搜索结果的问题。似乎我可以对搜索功能使用相同的defadvice
语句,但是不需要重新对齐我需要的行,只需将屏幕向下滚动包装部分的数量。
怎么做?
答案 0 :(得分:1)
您可以在您引用的问题上使用该解决方案,但可以通过此高度未经测试的功能更改recenter-top-bottom
:
(defun scroll-if-truncated()
(scroll-up
(/ (- (save-excursion
(end-of-line) (point))
(save-excursion
(beginning-of-line) (point)))
(window-body-width))))
答案 1 :(得分:0)
根据@ juanleon的建议玩了一些代码后,我最终得到了这个:
;; Execute after each update in isearch-mode
(setq isearch-update-post-hook 'show-whole-line)
(defun show-whole-line ()
"Scroll such that the whole line (which contains the point) will be visible."
;; If it is the top part which is truncated
(if (not (pos-visible-in-window-p (line-beginning-position)))
(let
((amount
;; the required number of lines to scroll
(ceiling (/
(- (window-start)
(line-beginning-position))
(float (window-body-width))))))
;; don't scroll at all if the search result will be scrolled out
(if (< amount (/
(- (window-end)
(point) )
(float (window-body-width))))
(scroll-down amount)))
;; Else
(if (not (pos-visible-in-window-p (line-end-position)))
(let
((amount
(min
;; the required number of lines to scroll
(ceiling (/
(-
(line-end-position)
(window-end (selected-window) t))
(float (window-body-width))) )
;; however not to scroll out the first line
(/ (- (line-beginning-position) (window-start)) (window-body-width)))))
(scroll-up amount)))))
几个解释:
defadvice
设置isearch-forward
是不够的 - 当您向搜索字符串添加字符时,不会再次调用此函数。在快速回顾一下isearch.el.gz包之后,我决定向isearch-update
函数提出建议。这也消除了为isearch-repeat-forward
等添加单独建议的需要。后来我注意到isearch-update
中有一个预定义的挂钩,因此此处不需要defadvice
。show-whole-line
函数检查当前行的开头是否可见。如果没有,它会向下滚动以显示该行的开头,除非此滚动将导致隐藏搜索匹配本身。show-whole-line
会检查该行的结尾是否也可见。如果没有,它会向上滚动以显示该行的结尾,除非此滚动将导致隐藏行的开头。我希望能够看到该行的开头。这个函数和一个钩子工作得很好,但有一个烦人的事情:当你最初按C-s时(在你输入任何搜索字符串之前)调用该函数。这意味着如果该点位于窗口开始或结束的行上,则简单地调用C-s将导致以某种方式滚动。
虽然不重要,但我很乐意听取有关如何消除上述副作用的建议。
答案 2 :(得分:0)
您应该能够使用变量scroll-conservatively
和scroll-margin
获得所需的行为,特别是后者。