0

BitKeeper を使用する必要があり、編集可能にする前に「bk edit」を実行する必要があります。レポ全体が大きすぎるため、レポ全体を編集可能にすることは問題外です。リポジトリにあるファイルに対してemacsが自動的に「bk edit」を実行する方法を求めています。

4

2 に答える 2

1

ユースケースを提示してください。私はそれを行うためのより良い方法があるはずだと確信しています。そうでない場合は、回答を更新します。

すべてのファイルでフックを実行するのは非常に面倒だと思います。を使用して、任意のファイルに対してコマンドを実行できますC-x d !

このコードで:

(require 'dired-x)
(global-set-key (kbd "C-x d") 'dired-jump)

C-x dで現在のディレクトリを開くだけでなくdired、現在のファイルの行にジャンプします。これにより!、ファイルに対してコマンドが実行されます。TABこのコマンドは、現在のソリューションよりも優れているオートコンプリートが可能です。

UPD1

bk editリポジトリ内のファイルに対してのみ実行したいことがわかりました。方法は次のとおりです。

(defvar bitkeeper-dirs '("/tmp/"))
(defun bitkeeper-p (file)
  (reduce (lambda (a b) (or a (string-match (expand-file-name b) file)))
          bitkeeper-dirs
          :initial-value nil))

(add-hook 'find-file-hook
          (lambda ()
            (let ((file (buffer-file-name)))
              (when (bitkeeper-p file)
                (read-only-mode -1)
                (shell-command (format "cat %s > /tmp/stuff" file))))))
  1. Bitkeeper リポジトリのリストを に配置する必要がありますbitkeeper-dirs。現在の述語は、開かれているファイルがこのディレクトリのいずれかにあるかどうかをテストするだけです。
  2. 必要に応じて、より良い述語を書くことができます。Bitkeeper の仕組みがわからないので、できません。それが git の場合は、おそらく呼び出しgit status て、それが何を返すかを確認します。
  3. に置き換える必要が"cat %s > /tmp/stuff"あり"bk edit %s"ます。現在の文字列は、テスト目的のためだけにあります。

UPD2

に答えて

ファイルが bk リポジトリにあるかどうかをテストする最良の方法は、「bk ルート ファイル」を実行することです。ステータス 0 は、ファイルがリポジトリにあることを意味します。ステータス 1 は、そうでないことを意味します。

これが新しい述語です。Bitkeeper がないため、テストできません。

(defun bitkeeper-p (file)
  (string= "0" (shell-command-to-string
                (format "bk root %s") file)))
于 2013-09-05T06:59:56.913 に答える