VCSステータスをdiredで視覚化するにはどうすればよいですか?


9

特に気になりますがgit、ここはいいところだと思いますvc。Atomのgitとそのファイルエクスプローラーの統合をエミュレートしたいと思います。

アトム-git-統合

どうすればこのようなものを手に入れることができdiredますか?適切なツリー構造をシミュレートする他のツールがあることは理解していi/RETますが、通常のワークフローは問題なく機能するはずです。


明確にするために(私はAtomに慣れていないため):緑は追跡されていない/新しいファイルです。ダークグレーはのファイル.gitignore、ライトグレーは最新、オレンジは変更されていますか?
Jonathan Leech-Pepin

@ JonathanLeech-Pepinそれが描かれているものですが、顔は次のように簡単ですM-x customize:)
Sean Allred

@ JonathanLeech-Pepin私は自分でAtomを使用していないので、それが可能かどうかはわかりませんが、作業ツリーで物が削除されたことを知っていれば、本当に便利です。
Sean Allred、2015

1
これは結局dired-vc、ファイルの面を調整するパッケージになる必要があると思います。グーグルは何も思いついていないようです。-> dired-after-readin-hookエントリーポイントのように見えます(各リストは読み取り後に絞り込まれます)。
Jonathan Leech-Pepin

1
簡単な方法はを使用することM-x vc-dirです。それはdiredとまったく同じではありませんが、とにかくかなりいいです。dired on VCが本当に必要な場合は、elispを作成してそれを実行するのが唯一のオプションだと思います。VCはすでに必要な情報を提供できるので、それほど難しくはないかもしれません。
トムトロメイ、2015

回答:


8

GNU ELPAからdiff-hlをインストールして、initファイルに以下を追加できます。

(add-hook 'dired-mode-hook 'diff-hl-dired-mode)

しかし、それは線に色を付けません。代わりに、フリンジ(または、diff-hl-margin-modeオンの場合はマージン)にステータスが表示されます。このように見えます:

ここに画像の説明を入力してください


わあ!また、ごめんなさい!私はほとんど偶然ここに戻ってチェックしました:)私はこれを今日試して、私のニーズに合うように変更できるかどうかを確認します。何かうまくいく場合は、必要なパッチを編集して完成させてもよろしいですか?
Sean Allred、2015年

@SeanAllredもちろん、追加されたコードがパブリック機能を使用し、関数を再定義しない限り。どうしても必要な場合は、機能のリクエストを提出してください。
ドミトリー

当然:) emacs lispでは「パブリック機能」を判別するのは難しいことに注意しますが、:)
Sean Allred

1
@SeanAllredさて、この場合の変数とフックは、私は推測します。:)
ドミトリー

私が書いたとおりに私が尋ねた質問に答えるので、これを受け入れますが、将来の読者は、neotreeのこの新しいサポートに提供した追加の回答に注意する必要があります。
Sean Allred、2015

2

これは、機能セットを提供するelispの「不完全な」セットです。完全なリストの実装はdired-vc、読者のための演習(および/または開発するための完全なパッケージ(時間許可))として残されます。

不足している情報で以下を完了する手順:

  1. によって返されるすべてのシンボルのリストを取得する vc-state
  2. defface欠落しているシンボルごとに面()を定義する
  3. condこれらのシンボルをすべて含むようにブロックを調整します
(defun dired-fontify-vc ()
  (while (not (eobp))
    (let* ((inhibit-read-only t)
           (file (ignore-errors (file-name-nondirectory
                                 (dired-get-filename))))
           (state (ignore-errors (vc-state file))))
      (when (and file
                 state)
        ; (message "%s>%s" file state)
        (let ((beg (dired-move-to-filename))
              (end (dired-move-to-end-of-filename)))
          (cond
           ((eq state 'edited)
            (add-text-properties beg end '(font-lock-face edited-face)))
           ((eq state 'up-to-date)
            (add-text-properties beg end '(font-lock-face update-face)))))
        ))
    (dired-next-line 1)))

(add-hook 'dired-after-readin-hook 'dired-fontify-vc)

(defface edited-face
  '((t :foreground "orange"))
  "Foreground color for edited files")
(defface update-face
  '((t :foreground "white"))
  "Foreground color for up-to-date files.")

2つのこと:1)これは何をするかdiff-hl-direddir-status-filesバックエンドコマンドを使用する)に比べてはるかに遅いソリューションです。2)これupdate-faceはデフォルトのテーマでは判読できません。
ドミトリー

2

実際にはdiredベースではありませんが、提供されているAtomスクリーンショットに近いです。以下のようPR#93neotreeリストの一部としてVCSのステータスを表示することができます。

スクリーンショット

上記のスクリーンショットに影響を与える構成は次のとおりです。

(setq neo-vc-integration '(char face))

存在charのコントロール?Eあなたが見ています。の存在がface強調表示を制御します。


見栄えはいいですが、設定に関する情報はありません…
Zelphir Kaltstahl

遅ればせながら演説
Sean Allred
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.