]> git.eshelyaron.com Git - emacs.git/commitdiff
file-attribute-collect: New defun
authorTino Calancha <tino.calancha@gmail.com>
Wed, 17 Aug 2016 09:25:54 +0000 (18:25 +0900)
committerTino Calancha <tino.calancha@gmail.com>
Wed, 17 Aug 2016 09:25:54 +0000 (18:25 +0900)
* lisp/files.el (file-attribute-collect):
Return a sublist of the attributes returned by 'file-attributes'.
Suggested by Ted Zlatanov in:

http://lists.gnu.org/archive/html/emacs-devel/2016-07/msg01195.html
; * etc/NEWS: Mention this defun in NEWS.

etc/NEWS
lisp/files.el

index 8a13d525450a81e190f60063fb771f0d177fce19..0c561ccc5115513380399741d65828143d69da39 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -115,8 +115,8 @@ have been added.  They are: 'file-attribute-type',
 'file-attribute-group-id', 'file-attribute-access-time',
 'file-attribute-modification-time',
 'file-attribute-status-change-time', 'file-attribute-size',
-'file-attribute-modes', 'file-attribute-inode-number', and
-'file-attribute-device-number'.
+'file-attribute-modes', 'file-attribute-inode-number',
+'file-attribute-device-number' and 'file-attribute-collect'.
 
 +++
 ** The new function 'buffer-hash' computes a fast, non-consing hash of
index aad9f751cc4669d796f039116ef19727db1c7530..b93cc79648d8c561c08ff2421a129380849a8939 100644 (file)
@@ -7225,6 +7225,26 @@ of the form (HIGH MIDDLE . LOW): first the high bits, then the
 middle 24 bits, and finally the low 16 bits."
   (nth 11 attributes))
 
+(defun file-attribute-collect (attributes &rest attr-names)
+  "Return a sublist of ATTRIBUTES returned by `file-attributes'.
+ATTR-NAMES are symbols with the selected attribute names.
+
+Valid attribute names are: type, link-number, user-id, group-id,
+access-time, modification-time, status-change-time, size, modes,
+inode-number and device-number."
+  (let ((all '(type link-number user-id group-id access-time
+               modification-time status-change-time
+               size modes inode-number device-number))
+        result)
+    (while attr-names
+      (let ((attr (pop attr-names)))
+        (if (memq attr all)
+            (push (funcall
+                   (intern (format "file-attribute-%s" (symbol-name attr)))
+                   attributes)
+                  result)
+          (error "Wrong attribute name '%S'" attr))))
+    (nreverse result)))
 \f
 (define-key ctl-x-map "\C-f" 'find-file)
 (define-key ctl-x-map "\C-r" 'find-file-read-only)