¿Cómo puedo visualizar el estado de VCS en dired?

9

Me preocupa especialmente git, pero imagino que este es un buen lugar para usar vc. Quiero emular la integración git de Atom con su explorador de archivos:

integración atómica-git

¿Cómo puedo obtener algo como esto dired? Entiendo que hay otras herramientas para simular una estructura de árbol adecuada, pero el i/RETflujo de trabajo normal debería funcionar bien.

Sean Allred
fuente
Solo para aclarar (ya que no estoy familiarizado con Atom): Green sería un archivo sin seguimiento / nuevo. ¿Están los archivos en gris oscuro .gitignore, el gris claro está actualizado y el naranja está modificado?
Jonathan Leech-Pepin
@ JonathanLeech-Pepin Eso es lo que se representa, pero se enfrenta son bastante fáciles de M-x customize:)
Sean Allred
@ JonathanLeech-Pepin No uso Atom yo mismo, así que no sé si incluso lo hace, pero sería genial si supiera si las cosas se han eliminado en el árbol de trabajo.
Sean Allred
1
Supongo que esto tendrá que terminar siendo un dired-vcpaquete que ajuste las caras de los archivos. Google no parece tener nada. -> dired-after-readin-hookparece un punto de entrada para él (cada listado se reduce después de leerlo).
Jonathan Leech-Pepin
1
Una forma simple es usar M-x vc-dir. No es lo mismo que dired, pero de todos modos es bastante agradable. Si realmente quieres VC en Dired, creo que la única opción es escribir elisp para hacerlo. Tal vez no sea muy difícil ya que VC ya puede proporcionar la información que necesita.
Tom Tromey

Respuestas:

8

Puede instalar diff-hl desde GNU ELPA y agregar lo siguiente a su archivo init:

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

Pero no colorea las líneas. En cambio, muestra estados en la franja (o el margen, si diff-hl-margin-modeestá activado). Se ve como esto:

ingrese la descripción de la imagen aquí

Dmitry
fuente
Woah! Además, lo siento! Regresé aquí casi por accidente :) Hoy intentaré esto y veré si se puede modificar para satisfacer mis necesidades. En el caso de que pueda hacer que algo funcione, ¿le importaría si editara los parches necesarios en su respuesta para que pueda completarse?
Sean Allred
@SeanAllred Sure, siempre que el código agregado utilice la funcionalidad pública y no redefina ninguna de las funciones. En caso de que lo necesite absolutamente, mejor presente una solicitud de función.
Dmitry
Naturalmente :) Aunque señalaré que la "funcionalidad pública" es difícil de determinar en emacs lisp :)
Sean Allred
1
@SeanAllred Bueno, supongo que vars y gancho en este caso. :)
Dmitry
Estoy aceptando esto porque responde a la pregunta que hice tal como está escrita, pero los futuros lectores deben tener en cuenta la respuesta adicional que proporcioné para el nuevo apoyo de Neotree a esto.
Sean Allred
2

Este es un conjunto 'incompleto' de elisp que proporcionará el conjunto de características. La implementación de una lista completa se deja como un ejercicio (y / o como un paquete completo para desarrollar dired-vc(si el tiempo lo permite)) para el lector.

Pasos para completar lo siguiente con información faltante:

  1. Obtenga una lista de todos los símbolos devueltos por vc-state
  2. Definir caras ( defface) para cada símbolo faltante
  3. Ajusta el condbloque para incluir todos esos símbolos
(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
fuente
Dos cosas: 1) Esta es una solución mucho más lenta, en comparación con lo que diff-hl-diredhace (usa el dir-status-filescomando back-end), 2) esto update-facees ilegible en el tema predeterminado.
Dmitry
2

En realidad dired, no está basado, pero está más cerca de la captura de pantalla de Atom proporcionada. A partir del PR # 93 , neotreepuede mostrar el estado de VCS como parte de la lista:

captura de pantalla

Aquí está la configuración que afectaría la captura de pantalla anterior:

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

La presencia de charcontrola el ?y Eque ves. La presencia de facecontrola el resaltado.

Sean Allred
fuente
Eso se ve bien, pero sin ninguna información sobre su configuración ...
Zelphir Kaltstahl
Dirigido con retraso
Sean Allred