使用 with-current-buffer 不会移动光标的位置。

9
在Elisp中,这段看似简单的代码实际上并没有移动光标。
(with-current-buffer "foo"
  (goto-char (point-max)))

据我所知,with-current-buffer不应该在目标缓冲区中还原点。 如果不能这样做,那么我该如何操作缓冲区中的点?

1
这是可行的代码 - (mapc (lambda (win) (unless (eq (selected-window) win) (with-selected-window win (goto-char (point-min)) (forward-line (1- line))))) (get-buffer-window-list emms-lyrics-buffer nil t)) - navgeet
1
我建议使用dolist而不是mapc(速度略快,而且通常缩进更好)。 - Stefan
4个回答

9

我认为你把缓冲区的点和窗口的点混淆了。如果您想在显示“foo”的某个窗口中移动光标,则需要在进行goto-char时选择该窗口,否则您需要使用set-window-point

一般来说,一个缓冲区有N+1个点(其中一个是自己的点,另外N个是用于显示缓冲区的N个窗口的点)。


1
(with-selected-window (get-buffer-window (get-buffer-create "foo"))
        (goto-char (point-max))))

1

您可能需要使用switch-to-buffer,然后再切换回来。


0

尝试执行:

(set-buffer "foo")
(goto-char (point-max))

那也不起作用。顺便说一下,foo是一个新创建的缓冲区。 - navgeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接