[Top][All Lists]

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

Re: chmod after file write

From: Ted Zlatanov
Subject: Re: chmod after file write
Date: Mon, 21 Oct 2002 22:03:42 -0400
User-agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i386-redhat-linux-gnu)

On Thu, 10 Oct 2002, address@hidden wrote:
> Very often I need to do a chmod for specific files after saving
> them, for instance I would like a rule that all files matching
> .**html
> should have permissions "a+r" set after writing.  I don't want to
> set the umask open for all new files on this host, so I can't do it
> through the shell variables.  Is there a hook I can use in tramp,
> and a command I can run in that hook to do what I want?
> dired-do-command works, but I can't find a way to invoke it
> automatically; it currently takes its arguments from the dired
> buffer which is not what I want.  I want this to be automatically
> done for all files I save with tramp.

I had a request for the Lisp code - here it is, if anyone else is
interested.  I hope it's useful to others.



;; automatically set permissions from the file tzz-permissions-file

;; Example:

;; all file saves of buffers whose name matches "cgi.*html" or
;; "cgi.*pm" are mode 644 (rw-r--r--), all "cgi.*pl" are 755
;; (rwxr-xr-x)

;; contents of tzz-permissions-file:

;; 644 cgi.*html
;; 644 cgi.*pm
;; 755 cgi.*pl

(setq tzz-permissions-file "~/.permissions")
(setq tzz-write-file-verbose t)

(defun tzz-read-permissions()
  "Read the permissions file"
  (let ((permissions-file-name tzz-permissions-file)
    (if (file-readable-p permissions-file-name)
        (with-temp-buffer (insert-file-contents-literally permissions-file-name)
                          (while (re-search-forward
                                  "\\([0-7]\\{3,4\\}\\)[ \t]+\\(.*\\)\n" nil t)
                            (setq alist (cons (cons (match-string 2)
                                                    (match-string 1))

(setq tzz-permissions-alist (tzz-read-permissions))

(defun tzz-write-file-hook ()
  "Do personal setting of file permissions"
  (dolist (cell tzz-permissions-alist nil)
    (let ((permission (string-to-number (cdr cell) 8))
          (regex (car cell)))
      (when (string-match regex buffer-file-name)
        (when tzz-write-file-verbose
          (message "setting permissions of %s to %o" buffer-file-name 
        (set-file-modes buffer-file-name permission)))))

(add-hook 'after-save-hook 'tzz-write-file-hook)

reply via email to

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