Просьба уточнить. Являются ли строки в вашем списке а) именами файлов, которые вы хотите создать, или б) содержимым файла (то, для чего у вас есть абсолютный путь)?
Дан
@Dan Список имен файлов с абсолютными путями. Просто имена файлов.
Ту До
1
Если я вас правильно понимаю, вы можете просто использовать (find-file your-directory-path)для получения соответствующего diredбуфера (например, (find-file "/tmp/")откроет ваш tmpкаталог в diredбуфере).
Дан
1
Я отредактировал ваш вопрос на основе того, что вы сказали в этих комментариях. Не стесняйтесь откатиться, если я ошибся.
Малабарба
3
Если вы хотите спросить о файловых объектах в elisp, это совершенно другой вопрос с очень коротким ответом: их нет. :-)
Малабарба
Ответы:
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вариантов), выполнив это:
Если вы используете библиотеку Dired + ( dired+.el), то вы можете в интерактивном режиме выбирать файлы и каталоги для перечисления: просто укажите diredаргумент неположительного префикса (т. Е. <= 0). Затем вас несколько раз попросят указать каталоги и имена файлов, которые вы хотите перечислить. Вы можете использовать подстановочные знаки имени файла (т. *Е. Для подстановки), чтобы включить соответствующие файлы и каталоги. Используйте C-gдля завершения ввода.
Другими словами, вместо перечисления одного каталога буфер Dired может перечислять любое количество каталогов и имен файлов, которые могут даже принадлежать различным деревьям каталогов.
(Неотрицательный префикс arg (т. Е.> = 0) запрашивает у вас lsсписок переключателей. Таким образом, нулевой префикс arg запрашивает у вас и переключатели, и файлы / dirs для отображения в списке: сначала lsпереключатели, а затем файлы / dirs.)
Ну, я хочу сделать это в Elisp, не используя команду. Я просто хочу простой фрагмент кода, который превращает имя файла (с полным путем) в запись в буфере Dired, подобно тому, как я использую (insert ...)для вставки текста в буфер.
Ту До
1
@tudo: diredфункция elisp. Просто оцените это: (dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))и вы получите постоянный буфер, содержащий эти файлы, как писал @Drew.
rekado
@rekado. Спасибо. Теперь я перечитал ответ правильно, это похоже на то, что вы сказали. Я просто хочу увидеть фрагмент кода Elisp, похожий на ваш, и я подумал, что Дрю дал мне ответ на команду пользователя, когда я его увидел.
Ту До
@Drew Пожалуйста, добавьте пример rekado. Спасибо за Ваш ответ.
Ту До
Изначально я не думал, что это будет так просто, когда я вижу наборы файлов . Я думал, что мы должны заставить Dired распознавать надлежащие файловые объекты, чтобы он работал правильно.
Ту До
2
Вот команда, чтобы сделать это, когда список файлов находится в буфере, с одним файлом в строке.
(find-file your-directory-path)
для получения соответствующегоdired
буфера (например,(find-file "/tmp/")
откроет вашtmp
каталог вdired
буфере).Ответы:
C-h f dired
говорит вам ответ. Просто передайте вdired
качествеDIRNAME
аргумента список, имеющий в качестве своей машины желаемое имя буфера Dired (любая строка) и в качестве cdr список имен файлов, которые вы хотите перечислить в буфере. Как правило, вы хотите использовать абсолютные имена файлов. Например:В зависимости от вашей платформы имена любых несуществующих файлов и каталогов, которые вы вводите, могут быть проигнорированы (не перечислены) или могут вызвать ошибку. Первое происходит, если вы используете
ls-lisp.el
(например, MS Windows). Вы можете форсировать использованиеls-lisp
на любой платформе, если хотите (но уls-lisp
нее меньшеls
вариантов), выполнив это:Если вы используете библиотеку Dired + (
dired+.el
), то вы можете в интерактивном режиме выбирать файлы и каталоги для перечисления: просто укажитеdired
аргумент неположительного префикса (т. Е. <= 0). Затем вас несколько раз попросят указать каталоги и имена файлов, которые вы хотите перечислить. Вы можете использовать подстановочные знаки имени файла (т.*
Е. Для подстановки), чтобы включить соответствующие файлы и каталоги. ИспользуйтеC-g
для завершения ввода.Другими словами, вместо перечисления одного каталога буфер Dired может перечислять любое количество каталогов и имен файлов, которые могут даже принадлежать различным деревьям каталогов.
(Неотрицательный префикс arg (т. Е.> = 0) запрашивает у вас
ls
список переключателей. Таким образом, нулевой префикс arg запрашивает у вас и переключатели, и файлы / dirs для отображения в списке: сначалаls
переключатели, а затем файлы / dirs.)источник
(insert ...)
для вставки текста в буфер.dired
функция elisp. Просто оцените это:(dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))
и вы получите постоянный буфер, содержащий эти файлы, как писал @Drew.Вот команда, чтобы сделать это, когда список файлов находится в буфере, с одним файлом в строке.
источник