1

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

编写一个确定文件是否在数据目录中的 defun 相对简单,因此我实际上想从哪个存储库中签出。但是我想不出一种在任何 p4 命令之前调用我的函数的方法,而无需显式地重新绑定键来执行它,即使这也是一种大技巧。每次我尝试签出或还原文件并根据需要设置 p4port 时,我都希望它运行。

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

4

1 回答 1

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-modep4

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

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

有关更多详细信息,请参阅 Emacs 手册的Advising functions部分

于 2012-06-30T19:26:49.623 回答