file-attribute-collect: New defun

* 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.
This commit is contained in:
Tino Calancha 2016-08-17 18:25:54 +09:00
parent 80082d00d8
commit 8d4039bcd6
2 changed files with 22 additions and 2 deletions

View file

@ -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

View 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)))
(define-key ctl-x-map "\C-f" 'find-file)
(define-key ctl-x-map "\C-r" 'find-file-read-only)