Lập trình chèn các tệp vào bộ đệm Dired


10

Tôi có một danh sách các tên tệp (có đường dẫn đầy đủ) và tôi muốn tạo bộ đệm Dired liệt kê bộ tệp này. Làm thế nào tôi sẽ đi về làm điều đó?

Làm cách nào để tạo bộ đệm Dired từ danh sách tên tệp?

Không sử dụng phụ thuộc bên ngoài.


Vui lòng làm rõ. Các chuỗi trong danh sách của bạn a) tên của các tệp bạn muốn tạo hay b) nội dung của tệp (thứ mà bạn có đường dẫn tuyệt đối)?
Dan

@Dan Một danh sách tên tệp có đường dẫn tuyệt đối. Chỉ là tên tập tin.
Từ Đô

1
Nếu tôi hiểu bạn một cách chính xác, bạn chỉ có thể sử dụng (find-file your-directory-path)để có được diredbộ đệm liên quan (ví dụ: (find-file "/tmp/")sẽ mở tmpthư mục của bạn trong diredbộ đệm).
Dân

1
Tôi đã chỉnh sửa câu hỏi của bạn dựa trên những gì bạn nói trong những bình luận này. Hãy thoải mái quay lại nếu tôi hiểu sai.
Malabarba

3
Nếu bạn muốn hỏi về các đối tượng tập tin trong elisp đó là một câu hỏi hoàn toàn khác, với một câu trả lời rất ngắn: không có câu hỏi nào. :-)
Malabarba

Câu trả lời:


20

C-h f diredcho bạn biết câu trả lời Chỉ cần chuyển đến dired, như là DIRNAMEđối số, một danh sách có tên của bộ đệm Dired mà bạn muốn (bất kỳ chuỗi nào) và dưới dạng cdr danh sách các tên tệp bạn muốn liệt kê trong bộ đệm. Nói chung, bạn muốn sử dụng tên tập tin tuyệt đối. Ví dụ:

(dired (list "My Dired Buffer Name*"     ; The Dired buffer name
             "/usr/foo/file1.el"         ; First file
             "/usr/bar/toto/some-file.c" ; Second file
             "/whatever/directory/"      ; Third is a directory
             "/a/file/somewhere.zzz"))   ; Fourth

Tùy thuộc vào nền tảng của bạn, tên của bất kỳ tệp và thư mục không tồn tại nào bạn nhập có thể bị bỏ qua (không được liệt kê) hoặc có thể gây ra lỗi. Điều này xảy ra nếu bạn sử dụng ls-lisp.el(ví dụ MS Windows). Bạn có thể buộc sử dụng ls-lisptrên bất kỳ nền tảng nào, nếu bạn muốn (nhưng ls-lispcó ít lstùy chọn hơn ), bằng cách thực hiện việc này:

(setq ls-lisp-use-insert-directory-program nil)
(require 'ls-lisp)

Nếu bạn sử dụng thư viện Dired + ( dired+.el) thì bạn có thể tương tác chọn các tệp và thư mục để liệt kê: chỉ cần đưa ra diredmột đối số tiền tố không tích cực (nghĩa là <= 0). Sau đó, bạn sẽ được nhắc nhiều lần cho các thư mục và tên tệp bạn muốn liệt kê. Bạn có thể sử dụng các ký tự đại diện tên tệp (nghĩa là *để toàn cầu hóa), để bao gồm các tệp và thư mục phù hợp. Sử dụng C-gđể kết thúc nhập.

Nói cách khác, thay vì liệt kê một thư mục, bộ đệm Dired có thể liệt kê bất kỳ số lượng thư mục và tên tệp nào, thậm chí có thể thuộc về các cây thư mục khác nhau.

(A không âm tiền tố arg (ví dụ,> = 0) nhắc nhở bạn cho lscông tắc niêm yết Vì vậy, một số không tiền tố arg nhắc nhở bạn cho cả công tắc và các tập tin / dirs vào danh sách:. Đầu tiên ls. Switch và sau đó các tập tin / dirs)


Tôi muốn làm điều đó trong Elisp, không sử dụng lệnh. Tôi chỉ muốn một đoạn mã đơn giản biến tên tệp (có đường dẫn đầy đủ) thành một mục trong bộ đệm Dired, tương tự như cách tôi sử dụng (insert ...)để chèn văn bản vào bộ đệm.
Từ Đô

1
@tudo: diredlà một chức năng elisp. Chỉ cần đánh giá điều này: (dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))và bạn nhận được một bộ đệm được điều hướng có chứa các tệp này như @Drew đã viết.
rekado

@rekado. Xin cảm ơn. Bây giờ tôi đọc lại câu trả lời chính xác giống như những gì bạn nói. Tôi chỉ muốn xem một đoạn mã Elisp giống như đoạn mã của bạn và tôi nghĩ rằng Drew đã cho tôi một câu trả lời lệnh người dùng khi tôi nhìn thoáng qua nó.
Từ Đô

@Drew Vui lòng thêm ví dụ của rekado. Cảm ơn câu trả lời của bạn.
Từ Đô

Ban đầu tôi không nghĩ rằng nó sẽ được đơn giản này, khi tôi nhìn thấy filesets . Tôi nghĩ rằng chúng ta phải làm cho Dired nhận ra các đối tượng tệp thích hợp để nó hoạt động đúng.
Từ Đô

2

Đây là một lệnh để làm điều này khi danh sách các tệp nằm trong bộ đệm, với một tệp trên mỗi dòng.

(defun dired-virtual-vanilla ()
  (interactive)
  (dired (cons "*Dired*" (split-string (buffer-string) "\n" t))))
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.