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: Eric Schulte
Subject: Re: [Orgmode] [babel] Need different beginning for tangled script
Date: Wed, 03 Feb 2010 10:19:40 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.90 (gnu/linux)

Hi Rainer and Dan,

I have comments below, I believe this behavior should be possible
through manipulation of some existing org-babel variables.

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?

The first line is customizable through adjusting the value of the
org-babel-tangle-langs variable as show below.

>>
>> 2) Can I ommit the second and third line (the comments added by tangle)?
>

The commenting behavior can also be changed using the
org-babel-tangle-langs variable.

The following non-trivial elisp snippet could be added to your emacs
init to make both of these changes.

--8<---------------cut here---------------start------------->8---

(setq org-babel-tangle-langs
      (cons
       '("sh" "sh" "#!/bin/bash" t)
       (remove-if (lambda (el) (string= (car el) "sh")) 
org-babel-tangle-langs)))

--8<---------------cut here---------------end--------------->8---

the third element of the '("sh" "sh" "#!/bin/bash" t) list will appear
at the top of your tangled files, and the t at the end of the list
should suppress all org-babel comments.

Perhaps we should change `org-babel-tangle-langs' to an a-list and
declare it behind a defvar to make these sorts of customizations easier
in the future.

Best -- Eric

>
> 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]