Emacs,移动指向第一个可见角色

时间:2013-01-09 20:47:27

标签: emacs move

有没有办法将点移动到缓冲区中的第一个当前可见字符?我想找到这一点,因为对于一个函数来说,从“第一个可见字符”而不是“缓冲区开始”看起来真的会更快。

编辑:实际上,获得该位置的价值也不错,而不是实际移动那里的点。 PageUp和PageDown似乎有一些奇怪的行为,包含大量文本。

4 个答案:

答案 0 :(得分:2)

如果您想要当前窗口滚动到的点:

(window-start)

如果您想跳过文字属性隐藏的文字,请使用invisible-p跳过它们:

(let ((pos (window-start)))
  (while (and (invisible-p pos) (< pos (point-max)))
    (setq pos (1+ pos)))
  pos)

答案 1 :(得分:1)

nschum给出了通过以下方式获取位置值的答案:(window-start)

要将点移动到此值,请使用:

根据nschum的回答:

(defun goto-window-start ()
 (interactive)
 (let ((pos (window-start)))
  (while (and (invisible-p pos) (< pos (point-max) )
   (setq pos (1+ pos)))
 (goto-char pos))
)

答案 2 :(得分:0)

更新:处理空缓冲区。

(defun goto-first-visible ()
  (interactive)
  (goto-char (point-min))
  (save-match-data 
    (let ((pos (search-forward-regexp (rx graphic) nil t))) 
      (when pos 
        (goto-char (- pos 1))))))

答案 3 :(得分:0)

这是一个高效版本,可以更好地处理大块不可见文本。这里的黑客是使用不可见文本由文本属性控制的事实,而emacs具有用于确定文本属性更改位置的内置工具:

    (defun goto-first-visible ()
      (interactive)
      (goto-char (point-min))
      (while (and (not (eobp)) (invisible-p (point)))
        (goto-char (next-char-property-change (point)))))