emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: Dan Davison <davison@stats.ox.ac.uk>
Cc: emacs-orgmode <emacs-orgmode@gnu.org>,
	Rainer M Krug <r.m.krug@gmail.com>
Subject: Re: [babel] Need different beginning for tangled script
Date: Wed, 03 Feb 2010 10:19:40 -0700	[thread overview]
Message-ID: <878wbab5im.fsf@gmail.com> (raw)
In-Reply-To: 87hbpygwaw.fsf@stats.ox.ac.uk

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 <davison@stats.ox.ac.uk> writes:

> Rainer M Krug <r.m.krug@gmail.com> 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 <davison@stats.ox.ac.uk>
> 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	other threads:[~2010-02-03 17:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-03 14:14 [babel] Need different beginning for tangled script Rainer M Krug
2010-02-03 15:42 ` Dan Davison
2010-02-03 17:19   ` Eric Schulte [this message]
2010-02-03 17:36   ` Dan Davison

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878wbab5im.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=r.m.krug@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).