Mercurial > emacs
changeset 86928:29dfee94a77f
(archive-find-type): Add recognition of rar-exe format.
(archive-rar-summarize): Allow the file name to be passed as argument.
Remove unused vars `header' and `footer'.
(archive-rar-exe-summarize, archive-rar-exe-extract): New functions.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 02 Dec 2007 02:05:48 +0000 |
parents | d4651506a112 |
children | edfd75871d15 |
files | lisp/ChangeLog lisp/arc-mode.el |
diffstat | 2 files changed, 57 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sat Dec 01 22:04:57 2007 +0000 +++ b/lisp/ChangeLog Sun Dec 02 02:05:48 2007 +0000 @@ -1,3 +1,10 @@ +2007-12-02 Stefan Monnier <monnier@iro.umontreal.ca> + + * arc-mode.el (archive-find-type): Add recognition of rar-exe format. + (archive-rar-summarize): Allow the file name to be passed as argument. + Remove unused vars `header' and `footer'. + (archive-rar-exe-summarize, archive-rar-exe-extract): New functions. + 2007-12-01 Dan Nicolaescu <dann@ics.uci.edu> * log-edit.el (log-edit-show-diff): New function. @@ -38,8 +45,8 @@ * textmodes/org-export-latex.el (org-export-latex-cleaned-string): Move args on defun line. - * textmodes/org.el (org-calendar-holiday): Use - calendar-check-holidays instead of the obsolete + * textmodes/org.el (org-calendar-holiday): + Use calendar-check-holidays instead of the obsolete check-calendar-holidays. (add-to-diary-list, table--at-cell-p, Info-find-node, bbdb) (bbdb-company, bbdb-current-record, bbdb-name) @@ -69,8 +76,8 @@ * longlines.el (longlines-show-hard-newlines): Remove handling of buffer-undo-list and buffer-modified status. - (longlines-show-region, longlines-unshow-hard-newlines): Handle - buffer-undo-list, buffer-modified status, inhibit-read-only, and + (longlines-show-region, longlines-unshow-hard-newlines): + Handle buffer-undo-list, buffer-modified status, inhibit-read-only, and inhibit-modification-hooks here to avoid that a buffer appears modified when toggling visibility of hard newlines. @@ -160,8 +167,8 @@ * net/newsticker.el (w3m-toggle-inline-image, htmlr-reset) (htmlr-step): Declare as functions. - * net/eudcb-bbdb.el (eudc-bbdb-extract-addresses): Use - bbdb-address-zip rather than bbdb-address-zip-string. + * net/eudcb-bbdb.el (eudc-bbdb-extract-addresses): + Use bbdb-address-zip rather than bbdb-address-zip-string. 2007-11-28 Richard Stallman <rms@gnu.org> @@ -190,8 +197,7 @@ * nxml/nxml-maint.el (nxml-create-unicode-char-name-sets): * nxml/nxml-mode.el (nxml-get-char-name, nxml-insert-named-char): - * nxml/xsd-regexp.el (xsdre-gen-categories): Use mapc rather than - mapcar. + * nxml/xsd-regexp.el (xsdre-gen-categories): Change mapcar -> mapc. * nxml/nxml-outln.el (nxml-token-start-tag-p) (nxml-token-end-tag-p): Move definitions before use.
--- a/lisp/arc-mode.el Sat Dec 01 22:04:57 2007 +0000 +++ b/lisp/arc-mode.el Sun Dec 02 02:05:48 2007 +0000 @@ -705,6 +705,9 @@ ;; Note this regexp is also in archive-exe-p. ((looking-at "MZ\\(.\\|\n\\)\\{34\\}LH[aA]'s SFX ") 'lzh-exe) ((looking-at "Rar!") 'rar) + ((and (looking-at "MZ") + (re-search-forward "Rar!" (+ (point) 100000) t)) + 'rar-exe) (t (error "Buffer format not recognized"))))) ;; ------------------------------------------------------------------------- @@ -1844,10 +1847,10 @@ ;; ------------------------------------------------------------------------- ;;; Section: Rar Archives -(defun archive-rar-summarize () - (let* ((file buffer-file-name) - (copy (file-local-copy file)) - header footer +(defun archive-rar-summarize (&optional file) + ;; File is used internally for `archive-rar-exe-summarize'. + (unless file (setq file buffer-file-name)) + (let* ((copy (file-local-copy file)) (maxname 10) (maxsize 5) (files ())) @@ -1856,9 +1859,6 @@ (if copy (delete-file copy)) (goto-char (point-min)) (re-search-forward "^-+\n") - (setq header - (buffer-substring (save-excursion (re-search-backward "^[^ ]")) - (point))) (while (looking-at (concat " \\(.*\\)\n" ;Name. ;; Size ; Packed. " +\\([0-9]+\\) +[0-9]+" @@ -1878,8 +1878,7 @@ size (match-string 3) ;; Date, Time. (match-string 4) (match-string 5)) - files))) - (setq footer (buffer-substring (point) (point-max)))) + files)))) (setq files (nreverse files)) (goto-char (point-min)) (let* ((format (format " %%s %%s %%%ds %%5s %%s" maxsize)) @@ -1921,9 +1920,44 @@ (delete-directory (expand-file-name name dest))) (delete-directory dest))))) +;;; Section: Rar self-extracting .exe archives. + +(defun archive-rar-exe-summarize () + (let ((tmpfile (make-temp-file "rarexe"))) + (unwind-protect + (progn + (goto-char (point-min)) + (re-search-forward "Rar!") + (write-region (match-beginning 0) (point-max) tmpfile) + (archive-rar-summarize tmpfile)) + (delete-file tmpfile)))) + +(defun archive-rar-exe-extract (archive name) + (let* ((tmpfile (make-temp-file "rarexe")) + (buf (find-buffer-visiting archive)) + (tmpbuf (unless buf (generate-new-buffer " *rar-exe*")))) + (unwind-protect + (progn + (with-current-buffer (or buf tmpbuf) + (save-excursion + (save-restriction + (if buf + ;; point-max unwidened is assumed to be the end of the + ;; summary text and the beginning of the actual file data. + (progn (goto-char (point-max)) (widen)) + (insert-file-contents-literally archive) + (goto-char (point-min))) + (re-search-forward "Rar!") + (write-region (match-beginning 0) (point-max) tmpfile)))) + (archive-rar-extract tmpfile name)) + (if tmpbuf (kill-buffer tmpbuf)) + (delete-file tmpfile)))) + + ;; ------------------------------------------------------------------------- ;; This line was a mistake; it is kept now for compatibility. ;; rms 15 Oct 98 + (provide 'archive-mode) (provide 'arc-mode)