1

ですから、仕事では、2つの異なるリポジトリから仕事をしなければなりません。ファイルは基本的に同じ場所にマップされますが、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マニュアルの「アドバイス機能」セクションを参照してください。

于 2012-06-30T19:26:49.623 に答える