Могут ли мультибуферы иметь свой собственный стек меток etags? - PullRequest
1 голос
/ 14 марта 2012

Кажется, что etags использует глобальный стек меток.

Когда я открываю два буфера, которые используют один и тот же TAGS, я выполняю find-tags операции в одном буфере (A), затем выполняю find-tags операцию в другом буфере (B). Я переключаюсь обратно в предыдущий буфер (A) и выполняю операцию pop-tag-mark. Он вернется к отметке, которая является предыдущей отметкой буфера B!

Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 14 марта 2012

Прежде всего, это полностью задумано. Если вы прыгаете в файл, 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))
...