emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r99473: * eshell/em-ls.el (eshell-ls-


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r99473: * eshell/em-ls.el (eshell-ls-applicable): Frob file attributes correctly (Bug#5548).
Date: Mon, 08 Feb 2010 20:58:57 -0500
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 99473
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Mon 2010-02-08 20:58:57 -0500
message:
  * eshell/em-ls.el (eshell-ls-applicable): Frob file attributes correctly 
(Bug#5548).
modified:
  lisp/ChangeLog
  lisp/eshell/em-ls.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-02-08 23:27:29 +0000
+++ b/lisp/ChangeLog    2010-02-09 01:58:57 +0000
@@ -1,3 +1,8 @@
+2010-02-09  Chong Yidong  <address@hidden>
+
+       * eshell/em-ls.el (eshell-ls-applicable): Frob file attributes
+       correctly (Bug#5548).
+
 2010-02-08  Jose E. Marchesi  <address@hidden>
 
        * progmodes/ada-mode.el (ada-in-numeric-literal-p): New function.

=== modified file 'lisp/eshell/em-ls.el'
--- a/lisp/eshell/em-ls.el      2010-02-07 06:23:10 +0000
+++ b/lisp/eshell/em-ls.el      2010-02-09 01:58:57 +0000
@@ -225,18 +225,28 @@
       (eq (aref (nth 8 attrs) 0) type)))
 
 (defmacro eshell-ls-applicable (attrs index func file)
-  "Test whether, for ATTRS, the user UID can do what corresponds to INDEX.
-This is really just for efficiency, to avoid having to stat the file
-yet again."
-  `(if (numberp (nth 2 ,attrs))
-       (if (= (user-uid) (nth 2 ,attrs))
-          (not (eq (aref (nth 8 ,attrs) ,index) ?-))
-        (,(eval func) ,file))
-     (not (eq (aref (nth 8 ,attrs)
-                   (+ ,index (if (member (nth 2 ,attrs)
-                                         (eshell-current-ange-uids))
-                                 0 6)))
-             ?-))))
+  "Test whether, for ATTRS, the user can do what corresponds to INDEX.
+ATTRS is a string of file modes.  See `file-attributes'.
+If we cannot determine the answer using ATTRS (e.g., if we need
+to know what group the user is in), compute the return value by
+calling FUNC with FILE as an argument."
+  `(let ((owner (nth 2 ,attrs))
+        (modes (nth 8 ,attrs)))
+     (cond ((cond ((numberp owner)
+                  (= owner (user-uid)))
+                 ((stringp owner)
+                  (or (string-equal owner (user-login-name))
+                      (member owner (eshell-current-ange-uids)))))
+           ;; The user owns this file.
+           (not (eq (aref modes ,index) ?-)))
+          ((eq (aref modes (+ ,index 3))
+               (aref modes (+ ,index 6)))
+           ;; If the "group" and "other" fields give identical
+           ;; results, use that.
+           (not (eq (aref modes (+ ,index 3)) ?-)))
+          (t
+           ;; Otherwise call FUNC.
+           (,(eval func) ,file)))))
 
 (defcustom eshell-ls-highlight-alist nil
   "*This alist correlates test functions to color.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]