Como posso visualizar o status do VCS em dired?

9

Estou particularmente preocupado git, mas acho que este é um bom lugar para usar vc. Eu quero emular a integração git do Atom com seu explorador de arquivos:

integração atom-git

Como posso obter algo assim dired? Entendo que existem outras ferramentas para simular uma estrutura de árvore adequada, mas o i/RETfluxo de trabalho normal deve funcionar bem.

Sean Allred
fonte
Apenas para esclarecer (já que não estou familiarizado com o Atom): o Green não será rastreado / novos arquivos. O cinza escuro está com os arquivos .gitignore, o cinza claro está atualizado e o laranja é modificado?
Jonathan Leech-Pepin
@ JonathanLeech-Pepin Isso é o que é retratado, mas rostos são bastante fáceis de M-x customize:)
Sean Allred
@ JonathanLeech-Pepin Eu não uso o Atom, então não sei se ele faz isso, mas seria realmente bom se o dired soubesse quando as coisas foram excluídas na árvore de trabalho.
Sean Allred 23/02
11
Eu acho que isso precisará acabar sendo um dired-vcpacote que ajusta as faces dos arquivos. O Google parece não apresentar nada. -> dired-after-readin-hookparece um ponto de entrada para ele (cada listagem é reduzida após a leitura).
Jonathan Leech-Pepin
11
Uma maneira simples é usar M-x vc-dir. Não é exatamente o mesmo que dired, mas é muito bom de qualquer maneira. Se você realmente deseja que o VC seja direcionado, acho que a única opção é escrever o elisp para fazer isso. Talvez não seja muito difícil, já que o VC já pode fornecer as informações necessárias.
Tom Tromey

Respostas:

8

Você pode instalar o diff-hl do GNU ELPA e adicionar o seguinte ao seu arquivo init:

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

Mas não colorem as linhas. Em vez disso, mostra status na margem (ou na margem, se diff-hl-margin-modeestiver ativada). Se parece com isso:

insira a descrição da imagem aqui

Dmitry
fonte
Woah! Além disso, desculpe! Voltei aqui quase por acidente :) Vou testar hoje e ver se ele pode ser modificado para atender às minhas necessidades. No caso de eu conseguir que algo funcione, você se importaria se eu editasse os patches necessários em sua resposta para que ela pudesse ser concluída?
Sean Allred
@SeanAllred Claro, desde que o código adicionado use a funcionalidade pública e não redefina nenhuma das funções. Caso você ache absolutamente necessário, envie melhor uma solicitação de recurso.
Dmitry
Naturalmente :) Embora eu vai notar que 'funcionalidade público' é difícil determinar em Emacs Lisp :)
Sean Allred
11
@ SeanAllred Bem, vars e gancho, neste caso, eu acho. :)
Dmitry
Estou aceitando isso porque ele responde à pergunta que fiz como escrita, mas os futuros leitores devem observar a resposta adicional que forneci para o novo suporte da neotree a isso.
Sean Allred
2

Este é um conjunto de elisp 'incompleto' que fornecerá o conjunto de recursos. A implementação de uma lista completa é deixada como um exercício (e / ou como um pacote completo a ser desenvolvido dired-vc(se houver tempo)) para o leitor.

Etapas para concluir o abaixo com informações ausentes:

  1. Obtenha uma lista de todos os símbolos retornados por vc-state
  2. Definir faces ( defface) para cada símbolo ausente
  3. Ajuste o condbloco para incluir todos esses 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
fonte
Duas coisas: 1) Essa é uma solução muito mais lenta, em comparação com o que diff-hl-diredfaz (ele usa o dir-status-filescomando de back - end); 2) isso update-faceé ilegível no tema padrão.
Dmitry
2

Não é realmente diredbaseado, mas é mais próximo da captura de tela Atom fornecida. A partir do PR # 93 , neotreepode exibir o status do VCS como parte da listagem:

captura de tela

Aqui está a configuração que afetaria a captura de tela acima:

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

A presença de charcontroles ?e Eque você vê. A presença de facecontrola o realce.

Sean Allred
fonte
Isso parece bom, mas sem qualquer informação sobre a sua configuração ...
Zelphir Kaltstahl
Atrasado tardiamente
Sean Allred