Làm thế nào tôi có thể hình dung trạng thái VCS trong dired?


9

Tôi đặc biệt quan tâm git, nhưng tôi tưởng tượng đây là một nơi tốt để sử dụng vc. Tôi muốn mô phỏng tích hợp git của Atom với trình thám hiểm tệp của nó:

tích hợp nguyên tử-git

Làm thế nào tôi có thể nhận được một cái gì đó như thế này trong dired? Tôi hiểu có những công cụ khác để mô phỏng cấu trúc cây thích hợp, nhưng i/RETquy trình làm việc bình thường sẽ hoạt động tốt.


Chỉ cần làm rõ (vì tôi không quen thuộc với Atom): Màu xanh lá cây sẽ không bị theo dõi / tệp mới. Màu xám đậm là tập tin .gitignore, màu xám nhạt được cập nhật và màu cam có bị sửa đổi không?
Jonathan Leech-Pepin

@ JonathanL336-Pepin Đó là những gì trong hình, nhưng khuôn mặt đủ dễ để M-x customize:)
Sean Allred

@ JonathanL336-Pepin Tôi không sử dụng Atom cho bản thân mình vì vậy tôi không biết liệu có làm điều này không, nhưng nó sẽ thực sự gọn gàng nếu được biết khi nào mọi thứ đã bị xóa trong cây làm việc.
Sean Allred

1
Tôi đoán điều này sẽ cần phải trở thành một dired-vcgói điều chỉnh các mặt của các tệp. Google dường như không đưa ra bất cứ điều gì. -> dired-after-readin-hooktrông giống như một điểm vào cho nó (mỗi danh sách được thu hẹp sau khi đọc).
Jonathan Leech-Pepin

1
Một cách đơn giản là sử dụng M-x vc-dir. Nó không hoàn toàn giống như được chuyển hướng nhưng dù sao nó cũng khá đẹp. Nếu bạn thực sự muốn VC trên dired, tôi nghĩ lựa chọn duy nhất là viết elisp để làm điều đó. Có lẽ không khó lắm vì VC đã có thể cung cấp thông tin bạn cần.
Tom Tromey 24/2/2015

Câu trả lời:


8

Bạn có thể cài đặt diff-hl từ GNU ELPA và thêm phần sau vào tệp init của bạn:

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

Nhưng nó không tô màu các dòng. Thay vào đó, nó hiển thị trạng thái ở rìa (hoặc lề, nếu diff-hl-margin-modeđược bật). Trông như thế này:

nhập mô tả hình ảnh ở đây


Ái chà! Ngoài ra, xin lỗi! Tôi đã kiểm tra lại ở đây gần như một cách tình cờ :) Tôi sẽ thử ngay hôm nay và xem liệu nó có thể được sửa đổi cho phù hợp với nhu cầu của tôi không. Trong trường hợp tôi có thể làm cho một cái gì đó hoạt động, bạn có phiền nếu tôi chỉnh sửa các bản vá cần thiết vào câu trả lời của bạn để nó có thể hoàn thành?
Sean Allred

@SeanAllred Chắc chắn, miễn là mã được thêm sử dụng chức năng công khai và không xác định lại bất kỳ chức năng nào. Trong trường hợp bạn thấy bạn thực sự cần điều đó, tốt hơn hãy gửi một yêu cầu tính năng.
Dmitry

Đương nhiên :) Mặc dù tôi sẽ lưu ý rằng 'chức năng công cộng' rất khó xác định trong lacs lisp :)
Sean Allred

1
@Sean ALLred Vâng, vars và hook trong trường hợp này, tôi đoán vậy. :)
Dmitry

Tôi chấp nhận điều này bởi vì nó trả lời câu hỏi tôi đã hỏi bằng văn bản, nhưng độc giả tương lai nên lưu ý câu trả lời bổ sung mà tôi đã cung cấp cho hỗ trợ mới của neotree về vấn đề này.
Sean Allred

2

Đây là một bộ elisp 'chưa hoàn chỉnh' sẽ cung cấp bộ tính năng. Việc thực hiện một danh sách đầy đủ được để lại dưới dạng một bài tập (và / hoặc như một gói đầy đủ để phát triển dired-vc(cho phép thời gian)) cho người đọc.

Các bước để hoàn thành dưới đây với thông tin còn thiếu:

  1. Có được một danh sách tất cả các biểu tượng được trả về bởi vc-state
  2. Xác định khuôn mặt ( defface) cho mỗi biểu tượng bị thiếu
  3. Điều chỉnh condkhối để bao gồm tất cả các biểu tượng
(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.")

Hai điều: 1) Đây là một giải pháp chậm hơn nhiều, so với những gì diff-hl-diredkhông (nó sử dụng dir-status-fileslệnh phụ trợ), 2) điều này update-facekhông thể đọc được trong chủ đề mặc định.
Dmitry

2

Không thực sự direddựa trên cơ sở, nhưng nó gần hơn với ảnh chụp màn hình Atom được cung cấp. Kể từ PR # 93 , neotreecó thể hiển thị trạng thái VCS như một phần của danh sách:

ảnh chụp màn hình

Đây là cấu hình sẽ ảnh hưởng đến ảnh chụp màn hình ở trên:

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

Sự hiện diện của charkiểm soát ?Emà bạn nhìn thấy. Sự hiện diện của faceđiều khiển làm nổi bật.


Điều đó có vẻ tốt, nhưng không có bất kỳ thông tin nào về cấu hình của bạn
Zelphir Kaltstahl 18/03/2017

Được cho là địa chỉ
Sean Allred
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.