2012-06-29 1 views
1

Так что на работе я должен работать из двух разных репозиториев. Файлы расположены по существу в одном и том же месте, но один путь имеет в нем «данные».В emacs, запустив команду перед каждой командой p4

Относительно тривиально писать defun, который определяет, находится ли файл в каталоге данных или нет, и какой репозиторий я действительно хочу проверить. Но я не могу понять способ вызова моей функции перед любыми командами p4 без явной перезаписи ключей, чтобы сделать это, и даже это своего рода большой взлом. Мне бы очень хотелось, чтобы он запускался каждый раз, когда я пытаюсь проверить или вернуть файл и установить p4port так, как я этого хочу.

Все крючки в системе p4, кажется, называются, когда я не хочу, чтобы они были. Я попробовал называть мой defun на p4-mode-hook, но этот крючок запускается только тогда, когда установлен режим, а файлы, которые не находятся в репозитории, отклоняются до того, как я когда-нибудь получу свой defun, чтобы что-либо сделать. :/

ответ

3

Существует несколько подходов, которые вы могли бы использовать. Во-первых, вы могли бы рассмотреть возможность добавления желаемых функций pre-command-hook, с предикатом, чтобы проверить, является ли текущий буфер работает в p4-mode, то есть:

(add-hook 
'pre-command-hook 
(lambda() 
    (when (eq major-mode 'p4-mode) 
    ;;; specify whatever functions you desire 
    ))) 

Это будет без разбора выполнять функции, которые включают в себя в теле выше lambda до любая команда в буфере p4-mode. Если это излишнее, и вы должны быть более избирательными о том, когда для выполнения сказал функции, вы должны, вероятно, индивидуально консультировать каждого из p4 команд, которые должны сначала выполнять свои функции перед запуском, например:

(defadvice 
    name-of-p4-function 
    (before name-of-p4-function-advice activate) 
    ;;; functions to be executed 
) 

(ad-activate 'name-of-p4-function) 

Смотрите Advising functions section of the Emacs manual для дополнительного Детали.

+0

Brilliant; это именно то, что я искал. Любой из этих методов, вероятно, будет работать. Я собираюсь попробовать их сейчас. – RealityMonster

Смежные вопросы