From 0ba90b3ba37e03d5aaa7df150003b8a4a5d4cf17 Mon Sep 17 00:00:00 2001 From: 10sr Date: Sun, 11 Dec 2011 15:28:51 +0900 Subject: [PATCH] small changes and bug fix of packing functions. --- .emacs.el | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/.emacs.el b/.emacs.el index 96ee88b..7894a36 100644 --- a/.emacs.el +++ b/.emacs.el @@ -1119,7 +1119,9 @@ if arg is omitted use value of `buffer-list'." (require 'dired-aux) ;; needed to use dired-dwim-target-directory (defun my-dired-do-pack-or-unpack () - "" + "pack or unpack files. +if targetting one file and that is archive file defined in `pack-program-alist', unpack that. +otherwise, pack marked files. prompt user to decide filename for archive." (interactive) (let* ((infiles (dired-get-marked-files t)) (onefile (and (eq 1 ; filename if only one file targeted, otherwise nil. @@ -1146,14 +1148,6 @@ if arg is omitted use value of `buffer-list'." ;; (dired-unmark-all-marks) ) -(defun my-pack-file-name-association (filename) - "" - (let ((case-fold-search nil)) - (assoc-default filename - my-pack-program-alist - 'string-match-p - nil))) - (defun my-file-name-extension-with-tar (filename) "if FILENAME has extension with tar, like \"tar.gz\", return that. otherwise, return extension normally." @@ -1173,28 +1167,44 @@ otherwise, return FILENAME with `my-pack-default-extension'" (or (executable-find "7z") (executable-find "7za") (executable-find "7zr")) - "path to 7z program.") + "7z program.") (defvar my-pack-default-extension "7z" - "default suffix for packing. filename with this suffix must matches `pack-program-alist'") + "default suffix for packing. filename with this suffix must matches one of `pack-program-alist'") + +(defun my-pack-file-name-association (filename) + "if the pattern matching FILENAME is found at car of the list in `pack-program-alist', return cdr of that list. +otherwise, return nil." + (let ((case-fold-search nil)) + (assoc-default filename + my-pack-program-alist + 'string-match-p + nil))) (defvar my-pack-program-alist - `(("\\.7z\\'" ,(concat my-7z-program-name " a"), (concat my-7z-program-name " x")) + `( + ("\\.7z\\'" ,(concat my-7z-program-name " a") ,(concat my-7z-program-name " x")) + ("\\.zip\\'" "zip -r" "unzip") ("\\.tar\\'" "tar cf" "tar xf") ("\\.tgz\\'" "tar czf" "tar xzf") - ("\\.zip\\'" "zip -r" "unzip"))) + ("\\.tar\\.gz\\'" "tar czf" "tar xzf") + ) + "Alist of filename patterns, command for pack and unpack. +Each element looks like (REGEXP PACKING-COMMAND UNPACKING-COMMAND). +PACKING-COMMAND and UNPACKING-COMMAND can be nil if the command is not available. +alist is searched from the beginning so pattern for \".tar.gz\" should be ahead of pattern for \".gz\"") ;; (string-match-p "\\.gz\\'" "aaa.gz") ; \' matches string end, $ also matches the point before newline. (defun my-unpack (archive) "unpack ARCHIVE. command for unpacking is defined in `pack-program-alist'" (interactive "fArchive to extract: ") (let* ((earchive (expand-file-name archive)) - (lst (my-pack-file-name-association earchive)) + (cmd (nth 1 + (my-pack-file-name-association earchive))) ) - (if lst - (shell-command (concat (nth 1 - lst) + (if cmd + (shell-command (concat cmd " " (shell-quote-argument earchive))) (message "this is not archive file defined in `pack-program-alist'!")))) @@ -1204,10 +1214,10 @@ otherwise, return FILENAME with `my-pack-default-extension'" if ARCHIVE have extension defined in `pack-program-alist', use that command. otherwise, use `pack-default-extension' for pack." (let* ((archive-ext (my-pack-file-extension (expand-file-name archive))) - (lst (my-pack-file-name-association archive-ext)) + (cmd (car (my-pack-file-name-association archive-ext))) ) - (if lst - (shell-command (concat (nth 0 lst) + (if cmd + (shell-command (concat cmd " " (shell-quote-argument archive-ext) " "