4

trunkファイルがいずれかで終わる Subversion リポジトリに基づくディレクトリにある場合、orをモードラインに表示するにはbranches/Xどうすればよいですか。trunkXSVN-trunkSVN-XGit-master

4

2 に答える 2

5

SVN ステータスの決定

これを行う組み込みの方法は知りませんが、この目的のために独自のコードを書くことができます。

に基づいてvc-svn-repository-namevc-backendSVN のカスタム モード テキストを返し、他のすべての VC システムのデフォルトにフォールバックする関数を作成できます。

(defun lunaryorn-vc-mode-line ()
  (let ((backend (vc-backend (buffer-file-name))))
    (if (eq backend 'SVN)
        (let ((url (vc-svn-repository-hostname (buffer-file-name))))
          (cond
           ((string-match-p "/trunk/" url) "SVN-trunk")
           ((string-match "/branches/\\([^/]+\\)/" url)
            (concat "SVN-" (match-string 1 url)))
           (t vc-mode)))
      ;; Use default mode text for other backends
      vc-mode)))

現在のファイルが SVN の下にある場合、規則に従ってリポジトリ URL をチェックし、対応するモード テキストをコンパイルします。の名前に惑わされないでくださいvc-svn-repository-hostname。この関数は実際には、指定されたファイルの完全なリポジトリ URL を返します。

他のすべてのバックエンドの場合、または URL がどのパターンとも一致しない場合は、のようにデフォルトの VC ステータス テキストにフォールバックしますvc-mode

モードラインへの追加

次に、対応するモード ライン コンストラクトを に追加することで、この関数をモード ラインで使用できますmode-line-format

(setq-default mode-line-format
              '(…
                (vc-mode (" " (:eval (lunaryorn-vc-mode-line))))
                …))

mode-line-formatはバッファローカルであるため、グローバル値を変更するために使用しsetq-defaultます。新しいモード ライン コンストラクトvc-modeは、ファイルがアクティブかどうか、つまりファイルがバージョン管理下にあるかどうかをチェックし、この場合は関数を評価して、カスタム ステータス テキストを取得します。モード ライン構造の詳細については、モード ライン データを参照してください。

省略記号は、モード行のその他の内容を表し、好みに合わせてカスタマイズすることもできます。ただし、 のデフォルト値を単純にコピーして、新しい構造mode-line-formatに置き換えることをお勧めします。(vc-mode vc-mode)これにより、古い VC 情報がカスタム ステータス テキストに置き換えられ、他のすべては以前のままになります。

于 2014-08-14T21:14:21.850 に答える