Я работаю одновременно с исходниками из нескольких репозитариев.
Хочу сделать так, чтобы emacs переключался на другую таблицу тэгов (сtags) при переключении на файл из другого репозитория.
Написал переключалку, но вызывать её приходится ручками, так как не могу найти хук на переключение на другой буфер. Подскажите, как можно это реализовать.
Код переключалки (если есть нарекания по коду, высказывайте, в ELisp'е я совсем лопух):
(defvar tag-paths-alist () "*List containing pairs of path regexp and corresponding tag file." )
(setq tag-paths-alist '(("/somepath/trunk.x/" . "/somepath/trunk.x/bla/TAGS")
("/somepath/trunk.y/" . "/somepath/trunk.y/bla/TAGS")))
(defun switch-tag-file () "Find corresponding tags file for current buffer and enable it."
(interactive)
(if tag-paths-alist
(let ((alist-iter tag-paths-alist))
(while alist-iter
(let ((path-regexp (car (car alist-iter)))
(path-to-tags (cdr (car alist-iter))))
(if (string-match (regexp-quote path-regexp) default-directory)
(progn
(message "switch-tag-file: found \"%s\" for \"%s\"\n" path-to-tags default-directory)
(setq tags-file-name path-to-tags)))
(setq alist-iter (cdr alist-iter)))))))