多缓冲区可以有自己的etags标记堆栈吗?

时间:2012-03-14 01:23:02

标签: linux emacs etag

似乎etags使用全局标记堆栈。

当我打开两个使用相同TAGS的缓冲区时,我在一个缓冲区(A)中执行find-tags个操作,然后在另一个缓冲区(B)中执行find-tags操作。我切换回上一个缓冲区(A)并执行pop-tag-mark操作。它将跳回到缓冲区B的前一个标记!

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

首先,这完全是设计上的。如果您在文件中跳转,imenu更合适。

现在让我们尝试修改设计:

(defun my-pop-tag-mark (arg)
  "call `pop-tag-mark' without argument.

Pop to the next mark in the current buffer wit C-u prefix."
  (interactive "P")
  (when (consp arg)
    (let ((buf (current-buffer))
          index)
      (loop for marker in (ring-elements find-tag-marker-ring)
            for i from 0 below (ring-length find-tag-marker-ring)
            do (when (eq (setq temp (marker-buffer marker))
                         (current-buffer))
                 (setq index i)
                 (return)))
      (if index
          (ring-insert find-tag-marker-ring (ring-remove find-tag-marker-ring index))
        (error "no marker found in current buffer."))))
  (pop-tag-mark))