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

在emacs中,在每个p4命令之前运行一个命令,emacs,hook,elisp,perforce,Emacs,Hook,Elisp,Perforce,所以在工作中,我必须从两个不同的存储库工作。这些文件映射到基本相同的位置,但其中有一个路径包含“数据” 编写一个defun来确定文件是否在数据目录中,从而确定我实际要从哪个存储库签出,这相对来说比较简单。但是,如果不显式地重新绑定键,我就无法找到在任何p4命令之前调用函数的方法,甚至这也是一个很大的难题。我真的希望每次尝试签出或还原文件时都能运行它,并将p4port设置为我想要的 p4系统中的所有钩子似乎都在我不希望它们被调用时被调用。我尝试在p4模式钩子上调用我的defun,但该钩子仅在设置模

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

编写一个defun来确定文件是否在数据目录中,从而确定我实际要从哪个存储库签出,这相对来说比较简单。但是,如果不显式地重新绑定键,我就无法找到在任何p4命令之前调用函数的方法,甚至这也是一个很大的难题。我真的希望每次尝试签出或还原文件时都能运行它,并将p4port设置为我想要的


p4系统中的所有钩子似乎都在我不希望它们被调用时被调用。我尝试在p4模式钩子上调用我的defun,但该钩子仅在设置模式时运行,并且在我让我的defun执行任何操作之前,不在存储库中的文件将被拒绝/

您可以使用几种方法。首先,您可以考虑将期望的函数添加到<代码>预命令钩子>代码>中,用谓词来检查当前缓冲区是否在<代码> P4模式< /代码>中运行,即:

(add-hook
 'pre-command-hook
 (lambda ()
   (when (eq major-mode 'p4-mode)
     ;;; specify whatever functions you desire
     )))
这将在
p4模式
缓冲区中的任何命令之前,不分青红皂白地执行上述
lambda
正文中包含的函数。如果这太过分了,并且您需要对何时执行所述功能有更多的选择,您可能应该单独建议在运行之前应首先执行功能的每个
p4
命令,例如:

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

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

有关更多详细信息,请参阅。

Brilliant;这正是我想要的。这两种方法中的任何一种都可能有效。我现在要试一下。