Wie kann ich den VCS-Status in dired visualisieren?

9

Ich bin besonders besorgt git, aber ich stelle mir vor , dass dies ein guter Ort ist, um ihn zu nutzen vc. Ich möchte die Git-Integration von Atom mit dem Datei-Explorer emulieren:

Atom-Git-Integration

Wie kann ich so etwas bekommen dired? Ich verstehe, dass es andere Tools zum Simulieren einer richtigen Baumstruktur gibt, aber der normale i/RETWorkflow sollte einwandfrei funktionieren.

Sean Allred
quelle
Nur zur Klarstellung (da ich mit Atom nicht vertraut bin): Grün wäre nicht verfolgt / neue Dateien. Dunkelgrau sind Dateien in .gitignore, Hellgrau ist aktuell und Orange ist geändert?
Jonathan Leech-Pepin
@ JonathanLeech-Pepin Das ist, was abgebildet ist, aber Gesichter sind einfach genug, um M-x customize:)
Sean Allred
@ JonathanLeech-Pepin Ich benutze Atom selbst nicht, also weiß ich nicht, ob es das auch tut, aber es wäre wirklich ordentlich, wenn dired wüsste, wann Dinge im Arbeitsbaum gelöscht wurden.
Sean Allred
1
Ich vermute, dass dies ein dired-vcPaket sein muss, das die Gesichter der Dateien anpasst. Google scheint sich nichts auszudenken. -> dired-after-readin-hooksieht aus wie ein Einstiegspunkt dafür (jede Auflistung wird nach dem Lesen eingegrenzt).
Jonathan Leech-Pepin
1
Ein einfacher Weg ist zu verwenden M-x vc-dir. Es ist nicht ganz dasselbe wie dired, aber es ist trotzdem ziemlich nett. Wenn Sie wirklich wollen, dass VC dired ist, ist die einzige Möglichkeit, elisp zu schreiben, um dies zu tun. Vielleicht nicht besonders schwer, da VC bereits die Informationen bereitstellen kann, die Sie benötigen.
Tom Tromey

Antworten:

8

Sie können diff-hl von GNU ELPA installieren und Ihrer Init-Datei Folgendes hinzufügen:

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

Aber es färbt die Linien nicht. Stattdessen werden Status am Rand (oder am Rand, falls aktiviert) angezeigt diff-hl-margin-mode. Sieht aus wie das:

Geben Sie hier die Bildbeschreibung ein

Dmitry
quelle
Woah! Tut mir auch leid! Ich bin fast zufällig hierher zurückgekommen :) Ich werde es heute versuchen und sehen, ob es an meine Bedürfnisse angepasst werden kann. Würde es Ihnen etwas ausmachen, wenn ich die erforderlichen Patches in Ihrer Antwort bearbeiten würde, damit sie vollständig sein kann, falls ich etwas zum Laufen bringen kann?
Sean Allred
@ SeanAllred Sicher, solange der hinzugefügte Code die öffentliche Funktionalität verwendet und keine der Funktionen neu definiert. Wenn Sie dies unbedingt benötigen, sollten Sie eine Funktionsanforderung einreichen.
Dmitry
Natürlich :) Obwohl ich feststellen werde, dass 'öffentliche Funktionalität' in Emacs Lisp schwer zu bestimmen ist :)
Sean Allred
1
@ SeanAllred Nun, Vars und Hook in diesem Fall, denke ich. :)
Dmitry
Ich akzeptiere dies, weil es die Frage beantwortet, die ich geschrieben habe, aber zukünftige Leser sollten die zusätzliche Antwort beachten, die ich für die neue Unterstützung von neotree gegeben habe.
Sean Allred
2

Dies ist ein 'unvollständiger' Satz von Elisp, der den Funktionsumfang bereitstellt. Das Implementieren einer vollständigen Liste bleibt als Übung (und / oder als vollständiges Paket, das entwickelt werden muss dired-vc(wenn es die Zeit erlaubt)) für den Leser.

Schritte, um das Folgende mit fehlenden Informationen zu vervollständigen:

  1. Erhalten Sie eine Liste aller von zurückgegebenen Symbole vc-state
  2. Definieren Sie Gesichter ( defface) für jedes fehlende Symbol
  3. Passen Sie den condBlock so an, dass alle diese Symbole enthalten sind
(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.")
Jonathan Leech-Pepin
quelle
Zwei Dinge: 1) Dies ist eine viel langsamere Lösung im Vergleich zu dem, was diff-hl-diredfunktioniert (es verwendet den dir-status-filesBackend-Befehl). 2) Dies update-faceist im Standarddesign nicht lesbar.
Dmitry
2

Nicht wirklich diredbasiert, aber näher am bereitgestellten Atom-Screenshot. Ab PR # 93 , neotreekann als Teil der Listenanzeige VCS - Status:

Bildschirmfoto

Hier ist die Konfiguration, die den obigen Screenshot beeinflussen würde:

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

Das Vorhandensein von charsteuert das ?und das E, was Sie sehen. Das Vorhandensein von facesteuert die Hervorhebung.

Sean Allred
quelle
Das sieht gut aus, aber ohne Informationen über Ihre Konfiguration ...
Zelphir Kaltstahl
Verspätet angesprochen
Sean Allred