2009-09-16 8 views
17

Je voudrais exécuter unzip (ou même zip) dans dired ou un tampon dired-like. Y a-t-il quelque chose comme ça? Je voudrais quelque chose de similaire à celui du gestionnaire de fichiers Nautilus: c'est-à-dire, sélectionner des fichiers puis appuyer sur une touche pour obtenir ces fichiers dans un nouveau fichier d'archive.Comment je décompresser/décompresser dans Emacs

Merci

Répondre

26

Vous avez des options ...

Pour décompresser un fichier .zip, il vous suffit d'ajouter à la variable 'dired-compress-file-suffixes

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

Maintenant, la clé Z en dired reconnaîtra le fichier .zip extension et décompresser une archive .zip. Déjà pris en charge sont gunzip, bunzip2, uncompress et dictunzip.

Si vous voulez marquer les fichiers et les ajouter à une archive .zip, vous pouvez utiliser les éléments suivants pour faire z lié à zip l'ensemble des fichiers marqués:

(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

n'a pas « Z » faire sortir -de-la-boîte? (ou marquez-le avec 'm' puis appuyez sur 'Z'). Je me souviens que cela a fonctionné pour moi il y a un certain temps. Je l'ai vu ici: http://xahlee.org/emacs/file_management.html – hatmatrix

+1

'Z' va compresser les fichiers, chacun d'eux individuellement. Il ne les ajoute pas à une archive/zip. –

+0

Il semble concat-liste de chaînes n'existe pas: concat: la définition de la fonction de Symbol est vide: concat-string-list –

16

Pour compresser des fichiers, ouvrez le répertoire dans dired. Marquez les fichiers que vous souhaitez compresser avec m. Tapez ensuite

! zip foo.zip * <RET> 

Pour extraire une archive complète de dired vous pouvez marquer un fichier et lancez & unzip, comme vous le feriez dans une coquille.

Le mode zip-archive vous permettra de parcourir les fichiers zip de manière dired. Il devrait venir avec les versions récentes de GNU emacs et sera utilisé par défaut lorsque vous visiterez un fichier avec l'extension .zip. À partir de ce mode, vous pouvez extraire des fichiers individuels dans un tampon, et les sauvegarder avec C-x C-s.

Questions connexes