unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#47119: 28.0.50; [patch][Dired] new user option for compressing dir suffix
@ 2021-03-13  3:55 Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-03-13  7:37 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-03-13  3:55 UTC (permalink / raw)
  To: 47119

[-- Attachment #1: Type: text/plain, Size: 123 bytes --]

Hi,

A new user option `dired-compress-files-default-suffix' for
controlling the default format for compressing directory.

[-- Attachment #2: 0001-dired-new-user-option-dired-compress-files-default-suffix.patch --]
[-- Type: application/octet-stream, Size: 5808 bytes --]

From 873f76039510a1aef24567d9d6c8a1ecb0816a92 Mon Sep 17 00:00:00 2001
From: Lin Sun <lin.sun@zoom.us>
Date: Sat, 13 Mar 2021 11:47:23 +0800
Subject: [PATCH] [*dired] new user option
 'dired-compress-files-default-suffix'

*dired-aux.el: user option 'dired-compress-files-default-suffix' for
default suffix for compressing directory.
---
 doc/emacs/dired.texi |  4 +++-
 etc/NEWS             |  6 ++++++
 lisp/dired-aux.el    | 48 ++++++++++++++++++++++++++++++------------------
 3 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index f57606d..16a9ef8 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -868,7 +868,9 @@ Operating on Files
 @command{gzip}.  To allow decompression of compressed directories,
 typing @kbd{Z} on a @file{.tar.gz} or @file{.tgz} archive file unpacks
 all the files in the archive into a directory whose name is the
-archive name with the extension removed.
+archive name with the extension removed.  By setting the variable
+@code{dired-compress-files-default-suffix} can switch to other format,
+refer the @code{dired-compress-files-alist} for complete suffix list.
 
 @findex dired-do-compress-to
 @kindex c @r{(Dired)}
diff --git a/etc/NEWS b/etc/NEWS
index fa8784d..e20beee 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -635,6 +635,12 @@ line, and allows truncating them (to preserve space on the mode line)
 or showing them literally, either instead of, or in addition to,
 displaying "by name" or "by date" sort order.
 
++++
+*** New user option 'dired-compress-files-default-suffix'.
+This user option controls default suffix for compressing directory.  If it's
+nil, the ".tar.gz" will be used. Refer the 'dired-compress-files-alist' for
+supported suffix list.
+
 ---
 *** Broken and circular links are shown with the 'dired-broken-symlink' face.
 
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index d5f4910..b2a5034 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1132,6 +1132,7 @@ dired-compress-file-suffixes
     ;; Solaris 10 version of tar (obsolete in 2024?).
     ;; Same thing on AIX 7.1 (obsolete 2023?) and 7.2 (obsolete 2022?).
     ("\\.tar\\.gz\\'" "" "gzip -dc %i | tar -xf -")
+    ("\\.tar\\.xz\\'" "" "xz -dc %i | tar -xf -")
     ("\\.tgz\\'" "" "gzip -dc %i | tar -xf -")
     ("\\.gz\\'" "" "gunzip")
     ("\\.lz\\'" "" "lzip -d")
@@ -1149,10 +1150,7 @@ dired-compress-file-suffixes
     ("\\.zst\\'" "" "unzstd --rm")
     ("\\.7z\\'" "" "7z x -aoa -o%o %i")
     ;; This item controls naming for compression.
-    ("\\.tar\\'" ".tgz" nil)
-    ;; This item controls the compression of directories.  Its REGEXP
-    ;; element should never match any valid file name.
-    ("\000" ".tar.gz" "tar -cf - %i | gzip -c9 > %o"))
+    ("\\.tar\\'" ".tgz" nil))
   "Control changes in file name suffixes for compression and uncompression.
 Each element specifies one transformation rule, and has the form:
   (REGEXP NEW-SUFFIX PROGRAM)
@@ -1168,6 +1166,12 @@ dired-compress-file-suffixes
 Otherwise, the rule is a compression rule, and compression is done with gzip.
 ARGS are command switches passed to PROGRAM.")
 
+(defcustom dired-compress-files-default-suffix nil
+  "Default suffix for compressing directory.
+If nil, the \".tar.gz\" will be used."
+  :group 'dired
+  :version "28.1")
+
 (defvar dired-compress-files-alist
   '(("\\.tar\\.gz\\'" . "tar -cf - %i | gzip -c9 > %o")
     ("\\.tar\\.bz2\\'" . "tar -cf - %i | bzip2 -c9 > %o")
@@ -1275,20 +1279,28 @@ dired-compress-file
            ;; Try gzip; if we don't have that, use compress.
            (condition-case nil
                (if (file-directory-p file)
-                   (progn
-                     (setq suffix (cdr (assoc "\000" dired-compress-file-suffixes)))
-                     (when suffix
-                       (let ((out-name (concat file (car suffix)))
-                             (default-directory (file-name-directory file)))
-                         (dired-shell-command
-                          (replace-regexp-in-string
-                           "%o" (shell-quote-argument out-name)
-                           (replace-regexp-in-string
-                            "%i" (shell-quote-argument (file-name-nondirectory file))
-                            (cadr suffix)
-                            nil t)
-                           nil t))
-                         out-name)))
+                   (let* ((suffix
+                           (or dired-compress-files-default-suffix ".tar.gz"))
+                          (rule (cl-find-if
+                                 (lambda (x) (string-match-p (car x) suffix))
+                                 dired-compress-files-alist)))
+                     (if rule
+                         (let ((out-name (concat file suffix))
+                               (default-directory (file-name-directory file)))
+                           (dired-shell-command
+                            (replace-regexp-in-string
+                             "%o" (shell-quote-argument out-name)
+                             (replace-regexp-in-string
+                              "%i" (shell-quote-argument (file-name-nondirectory file))
+                              (cdr rule)
+                              nil t)
+                             nil t))
+                           out-name)
+                       (user-error
+                        "No compression rule found for \
+`dired-compress-files-default-suffix' %s, see `dired-compress-files-alist' for\
+ the supported suffixes list."
+                        dired-compress-files-default-suffix)))
                  (let ((out-name (concat file ".gz")))
                    (and (or (not (file-exists-p out-name))
                             (y-or-n-p
-- 
2.7.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2021-05-25  4:56 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-13  3:55 bug#47119: 28.0.50; [patch][Dired] new user option for compressing dir suffix Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-13  7:37 ` Eli Zaretskii
2021-03-13  7:50   ` Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-18 15:41 ` bug#47119: " Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-20 10:37   ` Eli Zaretskii
2021-03-22 12:28     ` LinSun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-22 17:43       ` Eli Zaretskii
2021-03-23  3:00         ` LinSun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-18 15:41 ` bug#47119: " Lin Sun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-04-02  0:57   ` Sun Lin via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-17 16:04     ` Lars Ingebrigtsen
2021-05-18  1:21       ` Sun Lin via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-18 14:55       ` Glenn Morris
2021-05-18 15:49         ` Lars Ingebrigtsen
2021-05-19  0:12           ` Sun Lin via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-19 15:47         ` Glenn Morris
2021-05-20 10:20           ` LinSun via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-25  4:56           ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).