Function: eshell/umask

eshell/umask is a byte-compiled function defined in em-basic.el.gz.

Signature

(eshell/umask &rest ARGS)

Documentation

Shell-like implementation of umask.

Source Code

;; Defined in /usr/src/emacs/lisp/eshell/em-basic.el.gz
(defun eshell/umask (&rest args)
  "Shell-like implementation of `umask'."
  (eshell-eval-using-options
   "umask" args
   '((?S "symbolic" nil symbolic-p "display umask symbolically")
     (?h "help" nil nil  "display this usage message")
     :usage "[-S] [mode]")
   (if (or (not args) symbolic-p)
       (let ((modstr
	      (concat "000"
		      (format "%o"
			      (logand (lognot (default-file-modes))
				      511)))))
	 (setq modstr (substring modstr (- (length modstr) 3)))
	 (when symbolic-p
	   (let ((mode (default-file-modes)))
	     (setq modstr
		   (format
		    "u=%s,g=%s,o=%s"
		    (concat (and (= (logand mode 64) 64) "r")
			    (and (= (logand mode 128) 128) "w")
			    (and (= (logand mode 256) 256) "x"))
		    (concat (and (= (logand mode 8) 8) "r")
			    (and (= (logand mode 16) 16) "w")
			    (and (= (logand mode 32) 32) "x"))
		    (concat (and (= (logand mode 1) 1) "r")
			    (and (= (logand mode 2) 2) "w")
			    (and (= (logand mode 4) 4) "x"))))))
	 (eshell-printn modstr))
     (setcar args (eshell-convert (car args)))
     (if (numberp (car args))
	 (set-default-file-modes
	  (- 511 (car (read-from-string
		       (concat "?\\" (number-to-string (car args)))))))
       (error "Setting umask symbolically is not yet implemented"))
     (eshell-print
      "Warning: umask changed for all new files created by Emacs.\n"))
   nil))