Proszę o wyjaśnienie. Czy ciągi na liście a) nazwy plików, które chcesz utworzyć, lub b) zawartość pliku (rzecz, dla której masz bezwzględną ścieżkę)?
Dan
@Dan Lista nazw plików ze ścieżkami bezwzględnymi. Tylko nazwy plików.
Tu Do
1
Jeśli dobrze cię rozumiem, możesz po prostu użyć (find-file your-directory-path)odpowiedniego diredbufora (np. (find-file "/tmp/")Otworzy twój tmpkatalog w diredbuforze).
Dan
1
Zredagowałem twoje pytanie na podstawie tego, co powiedziałeś w tych komentarzach. Zapraszam do wycofania, jeśli popełniłem błąd.
Malabarba
3
Jeśli chcesz zapytać o obiekty plików w elisp, jest to zupełnie inne pytanie, z bardzo krótką odpowiedzią: nie ma żadnych. :-)
Malabarba
Odpowiedzi:
20
C-h f diredmówi ci odpowiedź. Po prostu przekaż diredjako DIRNAMEargument listę, która ma jako samochód wybraną nazwę bufora Dired (dowolny ciąg), a jako cdr listę nazw plików, które chcesz umieścić w buforze. Zasadniczo chcesz używać bezwzględnych nazw plików. Na przykład:
(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
W zależności od platformy nazwy wszelkich nieistniejących plików i katalogów, które wprowadzisz, mogą zostać zignorowane (niewymienione na liście) lub spowodować błąd. To pierwsze dzieje się, jeśli używasz ls-lisp.el(np. MS Windows). Możesz wymusić użycie ls-lispna dowolnej platformie, jeśli chcesz (ale ls-lispma mniej lsopcji), wykonując następujące czynności:
Jeśli używasz biblioteki Dired + ( dired+.el), możesz interaktywnie wybierać pliki i katalogi do wyświetlenia: po prostu podaj dirednie dodatni argument przedrostka (tj. <= 0). Następnie wielokrotnie pojawia się monit o podanie katalogów i nazw plików, które chcesz umieścić na liście. Możesz użyć symboli wieloznacznych nazwy pliku (tj. *Do globowania), aby dołączyć pasujące pliki i katalogi. Użyj, C-gaby zakończyć wprowadzanie.
Innymi słowy, zamiast wyświetlać pojedynczy katalog, bufor Dired może wyświetlać dowolną liczbę katalogów i nazw plików, które mogą nawet należeć do różnych drzew katalogów.
(Argument nieujemnego prefiksu arg (tj.> = 0) monituje o lsprzełączniki list. Tak więc arg prefiks zero wyświetla monit o podanie zarówno przełączników, jak i plików / katalogów: najpierw lsprzełączniki, a następnie pliki / katalogi.)
Cóż, chcę to zrobić w Elisp, nie używając polecenia. Chcę tylko prostego fragmentu kodu, który zamienia nazwę pliku (z pełną ścieżką) we wpis w buforze Dired, podobnie jak (insert ...)w przypadku wstawiania tekstu do bufora.
Tu Do
1
@tudo: diredto funkcja elisp. Po prostu oceń to: (dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))i dostajesz bufor buforowy zawierający te pliki, jak napisał @Drew.
rekado
@rekado .Dziękujemy. Teraz ponownie czytam odpowiedź poprawnie, tak jak powiedziałeś. Chcę tylko zobaczyć fragment kodu Elisp, taki jak twój, i pomyślałem, że Drew dał mi odpowiedź użytkownika, gdy ją zobaczyłem.
Tu Do
@Drew Dodaj przykład rekado. Dzięki za odpowiedź.
Tu Do
Początkowo nie sądziłem, że będzie to takie proste, gdy zobaczę zestawy plików . Pomyślałem, że musimy sprawić, by Dired rozpoznał odpowiednie obiekty plików, aby działało poprawnie.
Tu Do
2
Oto polecenie, aby to zrobić, gdy lista plików znajduje się w buforze, z jednym plikiem w wierszu.
(find-file your-directory-path)
odpowiedniegodired
bufora (np.(find-file "/tmp/")
Otworzy twójtmp
katalog wdired
buforze).Odpowiedzi:
C-h f dired
mówi ci odpowiedź. Po prostu przekażdired
jakoDIRNAME
argument listę, która ma jako samochód wybraną nazwę bufora Dired (dowolny ciąg), a jako cdr listę nazw plików, które chcesz umieścić w buforze. Zasadniczo chcesz używać bezwzględnych nazw plików. Na przykład:W zależności od platformy nazwy wszelkich nieistniejących plików i katalogów, które wprowadzisz, mogą zostać zignorowane (niewymienione na liście) lub spowodować błąd. To pierwsze dzieje się, jeśli używasz
ls-lisp.el
(np. MS Windows). Możesz wymusić użyciels-lisp
na dowolnej platformie, jeśli chcesz (alels-lisp
ma mniejls
opcji), wykonując następujące czynności:Jeśli używasz biblioteki Dired + (
dired+.el
), możesz interaktywnie wybierać pliki i katalogi do wyświetlenia: po prostu podajdired
nie dodatni argument przedrostka (tj. <= 0). Następnie wielokrotnie pojawia się monit o podanie katalogów i nazw plików, które chcesz umieścić na liście. Możesz użyć symboli wieloznacznych nazwy pliku (tj.*
Do globowania), aby dołączyć pasujące pliki i katalogi. Użyj,C-g
aby zakończyć wprowadzanie.Innymi słowy, zamiast wyświetlać pojedynczy katalog, bufor Dired może wyświetlać dowolną liczbę katalogów i nazw plików, które mogą nawet należeć do różnych drzew katalogów.
(Argument nieujemnego prefiksu arg (tj.> = 0) monituje o
ls
przełączniki list. Tak więc arg prefiks zero wyświetla monit o podanie zarówno przełączników, jak i plików / katalogów: najpierwls
przełączniki, a następnie pliki / katalogi.)źródło
(insert ...)
w przypadku wstawiania tekstu do bufora.dired
to funkcja elisp. Po prostu oceń to:(dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))
i dostajesz bufor buforowy zawierający te pliki, jak napisał @Drew.Oto polecenie, aby to zrobić, gdy lista plików znajduje się w buforze, z jednym plikiem w wierszu.
źródło