โปรแกรมแทรกไฟล์ลงในบัฟเฟอร์ Dired


10

ฉันมีรายการชื่อไฟล์ (พร้อมเส้นทางแบบเต็ม) และฉันต้องการสร้างบัฟเฟอร์ Dired ที่แสดงรายการชุดไฟล์นี้ ฉันจะทำยังไงต่อไป?

ฉันจะสร้างบัฟเฟอร์ Dired จากรายการชื่อไฟล์ได้อย่างไร

โดยไม่ต้องใช้การอ้างอิงภายนอก


กรุณาชี้แจง สตริงในรายการของคุณก) ชื่อของไฟล์ที่คุณต้องการสร้างหรือข) เนื้อหาของไฟล์ (สิ่งที่คุณมีพา ธ สัมบูรณ์) หรือไม่?
ด่าน

@Dan รายการชื่อไฟล์ที่มีพา ธ สัมบูรณ์ เพียงแค่ชื่อไฟล์
Tu Do

1
หากฉันเข้าใจคุณอย่างถูกต้องคุณสามารถใช้(find-file your-directory-path)เพื่อรับdiredบัฟเฟอร์ที่เกี่ยวข้อง(เช่น(find-file "/tmp/")จะเปิดtmpไดเรกทอรีของคุณในdiredบัฟเฟอร์)
ด่าน

1
ฉันได้แก้ไขคำถามของคุณตามสิ่งที่คุณพูดในความคิดเห็นเหล่านี้ คุณสามารถย้อนกลับได้ถ้าฉันทำผิด
Malabarba

3
หากคุณต้องการถามเกี่ยวกับวัตถุไฟล์ใน elisp นั่นเป็นคำถามที่แตกต่างอย่างสิ้นเชิงกับคำตอบสั้น ๆ : ไม่มีเลย :-)
Malabarba

คำตอบ:


20

C-h f diredบอกคำตอบ เพียงแค่ผ่านไปdiredเป็นDIRNAMEอาร์กิวเมนต์รายการที่มีเป็นรถของชื่อบัฟเฟอร์ Dired ที่คุณต้องการ (สตริง) และเป็น CDR รายชื่อไฟล์ที่คุณต้องการที่ระบุไว้ในบัฟเฟอร์ โดยทั่วไปคุณต้องการใช้ชื่อไฟล์ที่แน่นอน ตัวอย่างเช่น:

(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

ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณชื่อใดไม่มีอยู่ไฟล์และไดเรกทอรีที่คุณป้อนอาจจะไม่สนใจ (ไม่ปรากฏ) หรืออาจยกข้อผิดพลาด อดีตเกิดขึ้นถ้าคุณใช้ls-lisp.el(เช่น MS Windows) คุณสามารถบังคับให้ใช้ls-lispบนแพลตฟอร์มใดก็ได้หากคุณต้องการ (แต่ls-lispมีlsตัวเลือกน้อยลง) โดยทำสิ่งนี้:

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

ถ้าคุณใช้ไลบรารี่ Dired + ( dired+.el) คุณสามารถเลือกไฟล์และไดเร็กตอรี่ในรายการ: เพียงแค่diredใส่อาร์กิวเมนต์คำนำหน้าแบบไม่บวก (เช่น <= 0) จากนั้นระบบจะขอให้คุณใส่ไดเรกทอรีและชื่อไฟล์ซ้ำ ๆ คุณสามารถใช้สัญลักษณ์แทนชื่อไฟล์ (เช่น*สำหรับการวนรอบ) เพื่อรวมไฟล์และไดเรกทอรีที่ตรงกัน ใช้C-gสำหรับสิ้นสุดอินพุต

กล่าวอีกนัยหนึ่งแทนที่จะแสดงรายการไดเรกทอรีเดียวบัฟเฟอร์ Dired สามารถแสดงรายการไดเรกทอรีและชื่อไฟล์จำนวนเท่าใดก็ได้ซึ่งอาจเป็นของต้นไม้ไดเรกทอรีต่าง ๆ

(arg prefix ที่ไม่เป็นลบ (เช่น> = 0) จะพร้อมต์ให้คุณระบุlsรายการดังนั้น arg prefix เป็นศูนย์จะแจ้งให้คุณสำหรับสวิตช์และไฟล์ / dirs เพื่อแสดงรายการ: lsสวิตช์แรกและจากนั้นไฟล์ / dirs)


ดีฉันต้องการที่จะทำใน Elisp ไม่ได้ใช้คำสั่ง ฉันต้องการโค้ดขนาดสั้นธรรมดาที่เปลี่ยนชื่อไฟล์ (พร้อมพา ธ เต็ม) เป็นรายการในบัฟเฟอร์ Dired คล้ายกับวิธีที่ฉันใช้(insert ...)ในการแทรกข้อความลงในบัฟเฟอร์
Tu Do

1
@tudo: diredเป็นฟังก์ชัน elisp เพียงแค่ประเมินสิ่งนี้: (dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))และคุณจะได้รับบัฟเฟอร์ที่มีไฟล์เหล่านี้ตามที่ @Drew wrote
rekado

@rekado ขอบคุณ ตอนนี้ฉันอ่านคำตอบอย่างถูกต้องมันเหมือนที่คุณพูด ฉันแค่ต้องการเห็นข้อมูลโค้ด Elisp เหมือนของคุณและฉันคิดว่า Drew ให้คำตอบผู้ใช้แก่ฉันเมื่อฉันเห็นมัน
Tu Do

@Drew โปรดเพิ่มตัวอย่างของ rekado ขอบคุณสำหรับคำตอบ.
Tu Do

ตอนแรกผมไม่คิดว่ามันจะเป็นแบบนี้เมื่อฉันเห็นfilesets ฉันคิดว่าเราต้องทำให้ Dired รู้จักวัตถุไฟล์ที่เหมาะสมเพื่อให้มันทำงานได้อย่างถูกต้อง
Tu Do

2

ต่อไปนี้เป็นคำสั่งให้ทำเมื่อรายการไฟล์อยู่ในบัฟเฟอร์โดยมีหนึ่งไฟล์ต่อบรรทัด

(defun dired-virtual-vanilla ()
  (interactive)
  (dired (cons "*Dired*" (split-string (buffer-string) "\n" t))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.