所以在工作中,我必须从两个不同的存储库工作。文件映射到基本相同的位置,但一条路径中包含“数据”。
编写一个确定文件是否在数据目录中的defun是相对简单的,因此我实际想要从哪个存储库中检出。但我无法找到一种方法来在任何p4命令之前调用我的函数而不显式重新绑定键来执行它,甚至这是一个很大的黑客。每次我尝试检出或恢复文件并按照我的意愿设置p4port时,我真的很喜欢它。
当我不希望它们出现时,p4系统中的所有钩子似乎都被调用了。我尝试在p4-mode-hook上调用我的defun,但是只有在设置模式时才会运行该钩子,并且在我得到defun之前做任何事情之前,不在存储库中的文件被拒绝。 :/
答案 0 :(得分: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。