emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] [babel] Need different beginning for tangled script


From: Dan Davison
Subject: Re: [Orgmode] [babel] Need different beginning for tangled script
Date: Wed, 03 Feb 2010 12:36:28 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Dan Davison <address@hidden> writes:

> Rainer M Krug <address@hidden> writes:
>
>> Hi
>>
>> I want to use org-mode to create a submit script for a cluster, and would 
>> need
>> the first lines to be as follow:
>>
>> #!/bin/bash
>> #$ -cwd -j y
>> #$ -t 1-5
>> #$ -l mem_free=4G
>>
>> at the moment I get:
>>
>> #!/usr/bin/env sh
>> # generated by org-babel-tangle
>> # 
>> [[file:~/Documents/Projects/BiocontrolAndAlienDynamics/HakeaLandscape/trunc/R
>> /spreadSim.org::*submit%20scripts][block-19]]
>> #$ -cwd -j y
>> #$ -t 1-5
>> #$ -l mem_free=4G
>>
>> 1) Is the first line customizable, or do I have to change org-babel-sh.el to
>> use #!/bin/bash instead?

Hi Rainer,

I see that my patch in fact answered your question (2) and your other
question from your other email. But as for question (1), yes, see

C-h v org-babel-tangle-langs

The value of this variable for me is

(("makefile")
 ("C" "c")
 ("sql" "sql")
 ("perl" "pl" "#!/usr/bin/env perl")
 ("sass" "sass")
 ("dot" "dot")
 ("asymptote" "asymptote")
 ("latex" "tex")
 ("ditaa" "ditaa")
 ("ruby" "rb" "#!/usr/bin/env ruby")
 ("python" "py" "#!/usr/bin/env python")
 ("R" "R" "#!/usr/bin/env Rscript")
 ("sh" "sh" "#!/usr/bin/env sh")
 ("emacs-lisp" "el"))


One solution would be to change it so that the entry for sh is

 ("sh" "sh" "#!/bin/bash")


[Having taken some time off, my elisp is now failing me. What's the
right way to do this? If the cars of this list were symbols then we
could use assq-delete-all but as they're strings we can't. This seems
cumbersome

(setq org-babel-tangle-langs
      (cons '("sh" "sh" "#!/bin/bash")
            (delete (assoc "sh" org-babel-tangle-langs) 
org-babel-tangle-langs)))

]

Dan



>> 2) Can I ommit the second and third line (the comments added by tangle)?
>
> Hi Rainer,
>
> Yes, I've also wanted control over these things from time to
> time. Here's a patch. It introduces two new variables; you would turn
> off both behaviours as follows:
>
> (setq org-babel-tangle-include-shebang nil)
> (setq org-babel-tangle-include-org-coordinates nil)
>
> If Eric approves, he'll apply the patch to the main org-mode git repo. I
> suspect you're using git already, but if not then you probably do want
> to use it for org-mode.
>
> Dan
>
>>From ebc119693ca9daf104f935e794b5e2122127fa05 Mon Sep 17 00:00:00 2001
> From: Dan Davison <address@hidden>
> Date: Wed, 3 Feb 2010 10:41:10 -0500
> Subject: [PATCH] babel: provide control over additional content in tangled 
> files
>
> New variables:
> * org-babel-tangle-include-shebang
>   Whether to include shebang
> * org-babel-tangle-include-org-coordinates
>   Whether to include links to org file etc.
> ---
>  contrib/babel/lisp/org-babel-tangle.el |   32 
> ++++++++++++++++++++++++++------
>  1 files changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/contrib/babel/lisp/org-babel-tangle.el 
> b/contrib/babel/lisp/org-babel-tangle.el
> index 66e2c26..c019c43 100644
> --- a/contrib/babel/lisp/org-babel-tangle.el
> +++ b/contrib/babel/lisp/org-babel-tangle.el
> @@ -40,6 +40,22 @@ to use when writing out the language to file, and an 
> optional
>  fourth element is a flag which when true indicates that the
>  language does not support comments.")
>  
> +(defvar org-babel-tangle-include-shebang t
> +  "If non-nil the first line of tangled output will be a
> +'shebang'-style line, for example,
> +
> +#!/bin/sh
> +
> +On UNIX/linux-like operating systems these lines serve to specify
> +an interpreter for the code contained in the file.")
> +
> +(defvar org-babel-tangle-include-org-coordinates t
> +  "If non-nil (and if a comment syntax is defined), each block in
> +the tangled output will be (a) preceded by a commented org-style
> +link back to the source block in the source org file, and (b)
> +followed by a commented statement indicating which block has just
> +ended.")
> +
>  (defun org-babel-load-file (file)
>    "Load the contents of the Emacs Lisp source code blocks in the
>  org-mode formatted FILE.  This function will first export the
> @@ -117,12 +133,12 @@ exported source code blocks by language."
>                    ;; drop source-block to file
>                    (with-temp-buffer
>                      (funcall lang-f)
> -                    (when (and she-bang (not (member file-name she-banged)))
> +                    (when (and org-babel-tangle-include-shebang she-bang 
> (not (member file-name she-banged)))
>                        (insert (concat she-bang "\n"))
>                        (setq she-banged (cons file-name she-banged)))
> -                    (when commentable
> +                    (when (and commentable 
> org-babel-tangle-include-org-coordinates)
>                        (comment-region
> -                       (point) (progn (insert "generated by 
> org-babel-tangle") (point)))
> +                       (point) (progn (insert "Generated by 
> org-babel-tangle") (point)))
>                        (move-end-of-line nil))
>                      (org-babel-spec-to-string spec)
>                      (append-to-file nil nil file-name))
> @@ -188,8 +204,8 @@ form
>  
>    (link source-name params body)"
>    (flet ((insert-comment (text)
> +                      (insert "\n")
>                           (when commentable
> -                           (insert "\n")
>                             (comment-region (point) (progn (insert text) 
> (point)))
>                             (move-end-of-line nil)
>                             (insert "\n"))))
> @@ -197,9 +213,13 @@ form
>            (source-name (second spec))
>            (body (fourth spec))
>            (commentable (not (fifth spec))))
> -      (insert-comment (format "[[%s][%s]]" (org-link-escape link) 
> source-name))
> +      (if org-babel-tangle-include-org-coordinates
> +       (insert-comment (format "[[%s][%s]]" (org-link-escape link) 
> source-name))
> +     (insert "\n"))
>        (insert (format "%s" (org-babel-chomp body)))
> -      (insert-comment (format "%s ends here" source-name)))))
> +      (if org-babel-tangle-include-org-coordinates
> +       (insert-comment (format "%s ends here" source-name))
> +     (insert "\n")))))
>  
>  (provide 'org-babel-tangle)
>  ;;; org-babel-tangle.el ends here




reply via email to

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