2009-09-16 27 views
17

Me gustaría ejecutar descomprimir (o incluso comprimir) dentro de una dirección o un búfer de tipo directo. ¿Hay algo como esto? Me gustaría algo similar como en el administrador de archivos Nautilus: es decir, seleccionar archivos y luego presionar una tecla para obtener estos archivos en un nuevo archivo.Cómo descomprimir/descomprimir dentro de Emacs

Gracias

Respuesta

26

opciones Usted que tengo ...

para descomprimir un archivo .zip, sólo tiene que añadir a la variable 'dired-compress-file-suffixes

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

Ahora la clave Z en dired reconocerá el .zip extensión y descomprimir un archivo .zip. Ya compatibles son gunzip, bunzip2, uncompress y dictunzip.

Si desea marcar los archivos y agregarlos a un archivo .zip que puede utilizar el siguiente para hacer z obligado a comprimir el conjunto de archivos marcados:

(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

no 'Z' hacerlo a cabo -¿De la caja? (o márcalo con 'm' y luego presiona 'Z'). Recuerdo que funcionó para mí hace un tiempo. Lo vi aquí: http://xahlee.org/emacs/file_management.html – hatmatrix

+1

'Z' comprimirá los archivos, cada uno de ellos individualmente. No los agrega a un archivo/zip. –

+0

Parece concat cuerdas lista no existe: concat: definición de la función del símbolo es nula: concat cuerdas lista –

16

Para comprimir archivos, abra el directorio en el Dired. Marque los archivos que desea comprimir con m. A continuación, escriba

! zip foo.zip * <RET> 

Para extraer un archivo completo de dired puede marcar un archivo y ejecutar & unzip, tal como lo haría en una cáscara.

El modo de archivo zip le permitirá navegar por archivos zip de forma directa. Debería venir con versiones recientes de emacs de GNU y se usará de manera predeterminada cuando visite un archivo con la extensión .zip. Desde este modo, puede extraer archivos individuales en un búfer y, a partir de allí, guardarlos con C-x C-s.

Cuestiones relacionadas