emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Andrew Young <youngar17@gmail.com>
To: Matthew Oesting <oestingm@me.com>
Cc: "emacs-orgmode@gnu.org" <emacs-orgmode@gnu.org>
Subject: Re: Emacs shell-script to tangle org-babel at the command line.
Date: Mon, 13 Aug 2012 15:12:34 -0400	[thread overview]
Message-ID: <CAMvvmF9TSS4eHUJuOQxkxPs_v2xzEJ2dedVXAp=pcvh7oyDE4A@mail.gmail.com> (raw)
In-Reply-To: <060745A0-24ED-40CC-B501-B35969434F5F@me.com>

Hi Matthew,

On Mon, Aug 13, 2012 at 2:15 PM, Matthew Oesting <oestingm@me.com> wrote:
> I recently wrote what I thought to be a very simply she'll script to tangle a file; simply call the script on a file, e.g. 'tangle corgi.org' and a file, 'corgi.rb' (assuming one uses Ruby) appears in the local directory.
>
> Tangling the file from within Emacs works normally.  Tangling from this script does not work; the only interesting response is "tangled 0 code blocks from corgi.org".  The same file tangles two blocks from within Emacs.
>
> It seems that the org-babel-tangle function is using some piece of information present in the normal Emacs loading sequence which is not found during the script load.  I could provide a large number of files, but I imagine that the problem will be obvious to someone here.
>
> What is wrong with this code?
>
> #!/usr/bin/emacs --script
>
> ;; The subdirectory ~/.emacs.d is to be added to the top-level elisp
> ;; file search.
> (progn (cd "~/.emacs.d") (normal-top-level-add-subdirs-to-load-path))
>
> ;; Org-Mode, Org-Babel, and the tangle library are required, if we are
> ;; to proceed further.
> (require 'org-install)
> (require 'org)
> (require 'ob-tangle)
>
> ;; Load the main configuration and setup file.
> (require 'ob-ruby)
> (require 'ob-python)
> (require 'ob-emacs-lisp)
> (require 'ob-lisp)
>
> ;; Tangle all files given.
> (dolist (file command-line-args-left)
>  (princ file)
>  (org-babel-tangle-file file))
>
>

The previous code works for me if the file I'm trying to tangle is in
"~/.emacs.d".

I think what may be happening is you are specifying your input files
as relative paths, and when you cd into .emacs.d, you are no longer
loading from the correct directory.

Are you getting output such as
#+begin_example
  Wrote /home/user/.emacs.d/input-file.org
  tangled 0 code blocks from input-file.org
#+end_example

Try replacing:

#+begin_src emacs-lisp
  (progn (cd "~/.emacs.d")
    (normal-top-level-add-subdirs-to-load-path))
#+end_src

with something that doesn't change the current directory of the buffer
permanently. Replace the progn line with following to allow the
assigned value of default-directory to go out of scope:

#+begin_src emacs-lisp
  (let ((default-directory ~/.emacs.d))
    (normal-top-level-add-subdirs-to-load-path))
#+end_src

Andrew

  reply	other threads:[~2012-08-13 19:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-13 18:15 Emacs shell-script to tangle org-babel at the command line Matthew Oesting
2012-08-13 19:12 ` Andrew Young [this message]
2012-08-13 22:01   ` Matthew Oesting

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='CAMvvmF9TSS4eHUJuOQxkxPs_v2xzEJ2dedVXAp=pcvh7oyDE4A@mail.gmail.com' \
    --to=youngar17@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=oestingm@me.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).