2009-09-16 2 views
17

Я хотел бы запустить unzip (или даже zip) в пронумерованном или затушеванном буфере. Есть ли что-нибудь подобное? Мне хотелось бы что-то подобное, как в файловом менеджере Nautilus: например, выбирая файлы, а затем нажав клавишу, чтобы получить эти файлы в новый файл архива.Как распаковать/разархивировать в Emacs

Спасибо

ответ

26

У вас есть варианты ...

распаковать ZIP-файл, вам просто нужно добавить к переменной 'dired-compress-file-suffixes

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

Теперь Z ключ в Dired распознает .zip расширять и распаковывать архив .zip. Уже поддерживаются gunzip, bunzip2, uncompress и dictunzip.

Если вы хотите пометить файлы и добавить их в .zip архива вы можете использовать следующую информацию, чтобы z связанные застегнуть множество отмеченных файлов:

(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

не «Z» сделать это -of коробки? (или отметьте его «m», а затем нажмите «Z»). Я помню, что это сработало для меня некоторое время назад. Я видел его здесь: http://xahlee.org/emacs/file_management.html – hatmatrix

+1

'Z' сжимает файлы, каждый из которых будет индивидуально. Он не добавляет их в архив/zip. –

+0

кажется CONCAT-строка-список не существует: Concat: определение функции Symbol является недействительным: CONCAT строка-лист –

16

Чтобы сжать файлы, откройте каталог, в Dired. Отметьте файлы, которые хотите закрепить на m. Затем введите

! zip foo.zip * <RET> 

Чтобы извлечь весь архив из Dired вы можете пометить файл и запустить & unzip, так же, как вы бы в оболочке.

zip-archive mode позволит вам просматривать zip-файлы по-разному. Он должен появиться с последними версиями GNU emacs и будет использоваться по умолчанию при посещении файла с расширением .zip. Из этого режима вы можете извлекать отдельные файлы в буфер, а оттуда сохранять их с помощью C-x C-s.

 Смежные вопросы

  • Нет связанных вопросов^_^