2009-09-16 16 views
17

Chciałbym uruchomić rozpakować (lub nawet zip) wewnątrz dired lub bufor podobny do dired. Czy jest coś takiego? Chciałbym czegoś podobnego, jak w menedżerze plików Nautilus: tj. Wybranie plików, a następnie naciśnięcie klawisza w celu przeniesienia tych plików do nowego pliku archiwum.Jak rozpakować/rozpakować w Emacs

Dziękuję

Odpowiedz

26

masz opcji ...

rozpakować plik .zip, wystarczy dodać do zmiennej 'dired-compress-file-suffixes

(eval-after-load "dired-aux" 
    '(add-to-list 'dired-compress-file-suffixes 
       '("\\.zip\\'" ".zip" "unzip"))) 

Teraz kluczem w dired Z rozpozna .zip rozszerz i rozpakuj archiwum .zip. Obsługiwane są teraz: gunzip, bunzip2, uncompress i dictunzip.

Jeśli chcesz zaznaczyć pliki i dodać je do archiwum .zip można użyć następujących aby z związany zip zbiór oznakowanych pliki:

(eval-after-load "dired" 
    '(define-key dired-mode-map "z" 'dired-zip-files)) 
(defun dired-zip-files (zip-file) 
    "Create an archive containing the marked files." 
    (interactive "sEnter name of zip file: ") 

    ;; create the zip file 
    (let ((zip-file (if (string-match ".zip$" zip-file) zip-file (concat zip-file ".zip")))) 
    (shell-command 
    (concat "zip " 
      zip-file 
      " " 
      (concat-string-list 
       (mapcar 
       '(lambda (filename) 
        (file-name-nondirectory filename)) 
       (dired-get-marked-files)))))) 

    (revert-buffer) 

    ;; remove the mark on all the files "*" to " " 
    ;; (dired-change-marks 42 ?\040) 
    ;; mark zip file 
    ;; (dired-mark-files-regexp (filename-to-regexp zip-file)) 
) 

(defun concat-string-list (list) 
    "Return a string which is a concatenation of all elements of the list separated by spaces" 
    (mapconcat '(lambda (obj) (format "%s" obj)) list " ")) 
+0

nie „Z” zrobić z -of-the-box? (lub zaznacz go za pomocą "m", a następnie naciśnij "Z"). Przypominam sobie, że trochę mi to pomogło. Widziałem to tutaj: http://xahlee.org/emacs/file_management.html – hatmatrix

+1

'Z' skompresuje pliki, każdy z osobna. Nie dodaje ich do archiwum/zip. –

+0

Wydaje concat-string-lista nie istnieje: Concat: Definicja Symbol Funkcja jest nieważna: concat-string-lista –

16

Aby pliki zip, otworzyć katalog w Dired. Zaznacz pliki, które chcesz spakować, podając m. Następnie wpisz

! zip foo.zip * <RET> 

Aby wydobyć całe archiwum z dired można zaznaczyć plik i uruchom & unzip, tak samo jak w powłoce.

Tryb zip-archive pozwoli Ci przeglądać pliki zip w sposób diredowy. Powinien być wyposażony w najnowsze wersje emacsa GNU i będzie używany domyślnie podczas odwiedzania pliku z rozszerzeniem .zip. Z tego trybu można wyodrębnić pojedyncze pliki do bufora, a następnie zapisać je za pomocą C-x C-s.