在emacs中,在每个p4命令之前运行命令

时间:2012-06-29 17:16:17

标签: emacs hook elisp perforce

所以在工作中,我必须从两个不同的存储库工作。文件映射到基本相同的位置,但一条路径中包含“数据”。

编写一个确定文件是否在数据目录中的defun是相对简单的,因此我实际想要从哪个存储库中检出。但我无法找到一种方法来在任何p4命令之前调用我的函数而不显式重新绑定键来执行它,甚至这是一个很大的黑客。每次我尝试检出或恢复文件并按照我的意愿设置p4port时,我真的很喜欢它。

当我不希望它们出现时,p4系统中的所有钩子似乎都被调用了。我尝试在p4-mode-hook上调用我的defun,但是只有在设置模式时才会运行该钩子,并且在我得到defun之前做任何事情之前,不在存储库中的文件被拒绝。 :/

1 个答案:

答案 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