From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: Re: [babel] After Tangle Change File Permission Date: Wed, 09 Feb 2011 18:10:24 -0700 Message-ID: <87wrl8oeja.fsf@gmail.com> References: <4D525B84.9060206@manor-farm.org> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=50304 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PnLTq-0000Xg-1G for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 20:37:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PnLTm-0008Hv-Cb for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 20:37:55 -0500 Received: from mail-yx0-f169.google.com ([209.85.213.169]:49264) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PnLTm-0008Ho-7U for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 20:37:54 -0500 Received: by yxl31 with SMTP id 31so404165yxl.0 for ; Wed, 09 Feb 2011 17:37:53 -0800 (PST) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Dan Davison Cc: Org Mode Mailing List Dan Davison writes: > Ian Barton writes: > >> I am starting to use babel to maintain my collection of shell >> scripts. I want to automate the process as much as possible, so I >> would like to be able to set the execute bit on my tangled .sh scripts >> after the tangle process. >> >> I see that there is an after-tangle hook. Can anyone give me some >> hints as to how I might use this to execute a chmod *.sh on the >> directory containing my tangles shell scripts. > > Hi Ian, > > It looks like Eric has already implemented this particular case in a > different way: if the :shebang header arg is set, then the file will be > made executable. E.g. :shebang #!/bin/bash. > True this is probably the easiest way. > > However, to use the hook function, does something like this not work? > > #+begin_src emacs-lisp > (defun dan/make-tangled-shell-files-executable () (shell-command "chmod +x *.sh")) > (add-hook 'org-babel-post-tangle-hook 'dan/make-tangled-shell-files-executable) > #+end_src > The org-babel-post-tangle-hook is evaluated in the tangled file, so the following should work as well... #+begin_src emacs-lisp (defun eric/make-tangled-files-executable () (set-file-modes (buffer-file-name) #o755)) (add-hook 'org-babel-post-tangle-hook 'eric/make-tangled-files-executable) #+end_src > > I admit I was getting some inconsistent results just then that I didn't > understand. It should be possible to use > > #+begin_src emacs-lisp > (add-hook 'org-babel-post-tangle-hook > 'dan/make-tangled-shell-files-executable nil 'local) > #+end_src > > so that the hook is set locally for the buffer in question. > > The code is > > #+begin_src emacs-lisp > (when org-babel-post-tangle-hook > (mapc > (lambda (file) > (org-babel-with-temp-filebuffer file > (run-hooks 'org-babel-post-tangle-hook))) > path-collector)) > #+end_src > > , where `path-collector' is a list of tangled files. I believe that this > implies that, each time the hook is run, default-directory will be equal > to the directory containing the file in question, true > so the shell-command should run in that directory. Otoh, the above > shows that the hook is run for each tangled file, so chmod +x *.sh > would be executed more times than necessary. > yes, I think the solution above should be a little bit more efficient. Cheers -- Eric > > Dan > >> >> Ian. >> >> _______________________________________________ >> Emacs-orgmode mailing list >> Please use `Reply All' to send replies to the list. >> Emacs-orgmode@gnu.org >> http://lists.gnu.org/mailman/listinfo/emacs-orgmode > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode