Here a simple patch to summarize what's wrong: diff --git a/lisp/files.el b/lisp/files.el index 5b989902bc3..576eb22c49f 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -8363,6 +8363,7 @@ If CHAR is in [Xugo], the value is taken from FROM (or 0 if omitted)." (cond ((eq char ?r) #o0444) ((eq char ?w) #o0222) ((eq char ?x) #o0111) + ((eq char ?-) #o0000) ((eq char ?s) #o6000) ((eq char ?t) #o1000) ;; Rights relative to the previous file modes. @@ -8393,7 +8394,7 @@ as in \"og+rX-w\"." (let ((num-right 0) char-right) (while (memq (setq char-right (pop list-rights)) - '(?r ?w ?x ?X ?s ?t ?u ?g ?o)) + '(?r ?w ?x ?X ?s ?t ?u ?g ?o ?-)) (setq num-right (logior num-right (file-modes-char-to-right char-right num-rights)))) -- Thierry