diff options
| author | Jim Porter | 2023-03-04 22:11:23 -0800 |
|---|---|---|
| committer | Jim Porter | 2024-01-27 22:21:23 -0800 |
| commit | a3cd284b90edcc7e06b21110cdbf55d11fb6fd0d (patch) | |
| tree | 3fc7c170c6fc0e025f97e0ef136e4aa1e9c68f63 /lisp/eshell/em-basic.el | |
| parent | 236317e5d2284399d6ca0413ea2a29b84270d545 (diff) | |
| download | emacs-a3cd284b90edcc7e06b21110cdbf55d11fb6fd0d.tar.gz emacs-a3cd284b90edcc7e06b21110cdbf55d11fb6fd0d.zip | |
Support setting umask symbolically in Eshell
* lisp/eshell/em-basic.el (eshell/umask): Handle setting umask
symbolically, and make setting umask take precedence over "-S".
* test/lisp/eshell/em-basic-tests.el
(em-basic-test/umask-print-numeric, em-basic-test/umask-read-symbolic,
em-basic-test/umask-set): Rename to...
(em-basic-test/umask/print-numeric)
(em-basic-test/umask/print-symbolic, em-basic-test/umask/set-numeric):
... these.
(em-basic-test/umask/set-symbolic, em-basic-test/umask/set-with-S):
New tests.
* etc/NEWS: Announce this change.
Diffstat (limited to 'lisp/eshell/em-basic.el')
| -rw-r--r-- | lisp/eshell/em-basic.el | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el index 8f68a750bd7..6ec53ef9412 100644 --- a/lisp/eshell/em-basic.el +++ b/lisp/eshell/em-basic.el | |||
| @@ -160,6 +160,18 @@ or `eshell-printn' for display." | |||
| 160 | :preserve-args | 160 | :preserve-args |
| 161 | :usage "[-S] [mode]") | 161 | :usage "[-S] [mode]") |
| 162 | (cond | 162 | (cond |
| 163 | (args | ||
| 164 | (let* ((mask (car args)) | ||
| 165 | (modes | ||
| 166 | (if (stringp mask) | ||
| 167 | (if (string-match (rx bos (+ (any "0-7")) eos) mask) | ||
| 168 | (- #o777 (string-to-number mask 8)) | ||
| 169 | (file-modes-symbolic-to-number | ||
| 170 | mask (default-file-modes))) | ||
| 171 | (- #o777 mask)))) | ||
| 172 | (set-default-file-modes modes) | ||
| 173 | (eshell-print | ||
| 174 | "Warning: umask changed for all new files created by Emacs.\n"))) | ||
| 163 | (symbolic-p | 175 | (symbolic-p |
| 164 | (let ((mode (default-file-modes))) | 176 | (let ((mode (default-file-modes))) |
| 165 | (eshell-printn | 177 | (eshell-printn |
| @@ -173,17 +185,9 @@ or `eshell-printn' for display." | |||
| 173 | (concat (and (= (logand mode 1) 1) "r") | 185 | (concat (and (= (logand mode 1) 1) "r") |
| 174 | (and (= (logand mode 2) 2) "w") | 186 | (and (= (logand mode 2) 2) "w") |
| 175 | (and (= (logand mode 4) 4) "x")))))) | 187 | (and (= (logand mode 4) 4) "x")))))) |
| 176 | ((not args) | ||
| 177 | (eshell-printn (format "%03o" (logand (lognot (default-file-modes)) | ||
| 178 | #o777)))) | ||
| 179 | (t | 188 | (t |
| 180 | (when (stringp (car args)) | 189 | (eshell-printn (format "%03o" (logand (lognot (default-file-modes)) |
| 181 | (if (string-match "^[0-7]+$" (car args)) | 190 | #o777))))) |
| 182 | (setcar args (string-to-number (car args) 8)) | ||
| 183 | (error "Setting umask symbolically is not yet implemented"))) | ||
| 184 | (set-default-file-modes (- #o777 (car args))) | ||
| 185 | (eshell-print | ||
| 186 | "Warning: umask changed for all new files created by Emacs.\n"))) | ||
| 187 | nil)) | 191 | nil)) |
| 188 | 192 | ||
| 189 | (put 'eshell/umask 'eshell-no-numeric-conversions t) | 193 | (put 'eshell/umask 'eshell-no-numeric-conversions t) |