[O] running the new exporter asynchronously?

2012-11-28 Thread Alan Schmitt
Hello,

I'm compiling a fairly large set of slides, that also contain quite a
bit of code that is executed (it's a course on JavaScript which shows
some of the language peculiarities). Thus exporting these slides takes a
while. Unfortunately, when it's compiling, it's completely locking my
emacs. Would there be a way for the export process to be asynchronous
and not lock emacs?

Thanks,

Alan

PS: mandatory comics about compilation time http://xkcd.com/303/



Re: [O] running the new exporter asynchronously?

2012-11-28 Thread Nicolas Goaziou
Hello,

Alan Schmitt alan.schm...@polytechnique.org writes:

 Would there be a way for the export process to be asynchronous and not
 lock emacs?

Not yet. 

Actually that's, in my roadmap, the single last feature to implement
before moving the new export engine into core.


Regards,

-- 
Nicolas Goaziou



Re: [O] running the new exporter asynchronously?

2012-11-28 Thread Eric Schulte
Nicolas Goaziou n.goaz...@gmail.com writes:

 Hello,

 Alan Schmitt alan.schm...@polytechnique.org writes:

 Would there be a way for the export process to be asynchronous and not
 lock emacs?

 Not yet. 

 Actually that's, in my roadmap, the single last feature to implement
 before moving the new export engine into core.


 Regards,

In the interim it, one solution which I personally like for large
projects is to offload compilation into an external batch Emacs process.
I find this not only useful for compilation while working, but if you
place all relevant config into an init.el file loaded by the batch
Emacs, this also makes it possible to share and compile the project
separate of your personal Emacs config.

Attached is a bare-bones Makefile supporting this sort of work-flow.

Hope this helps,

EMACS=emacs
BATCH_EMACS=$(EMACS) --batch -Q -l init.el

%.html: %.org
$(BATCH_EMACS) $*.org -f org-export-as-html

%.tex: %.org
$(BATCH_EMACS) $*.org -f org-export-as-latex

%.txt: %.org init.el
$(BATCH_EMACS) $*.org -f org-export-as-utf8

%.pdf: %.tex
if pdflatex $*.tex /dev/null; then \
true; \
else \
stat=$$?; touch $*.pdf; exit $$stat; \
fi
bibtex $*
while grep Rerun to get $*.log; do \
if pdflatex $*.tex /dev/null; then \
true; \
else \
stat=$$?; touch $*.pdf; exit $$stat; \
fi; \
done

-- 
Eric Schulte
http://cs.unm.edu/~eschulte


Re: [O] running the new exporter asynchronously?

2012-11-28 Thread Alan Schmitt
Eric Schulte schulte.e...@gmail.com writes:

 In the interim it, one solution which I personally like for large
 projects is to offload compilation into an external batch Emacs process.
 I find this not only useful for compilation while working, but if you
 place all relevant config into an init.el file loaded by the batch
 Emacs, this also makes it possible to share and compile the project
 separate of your personal Emacs config.

 Attached is a bare-bones Makefile supporting this sort of work-flow.

This is really neat, thanks a lot! I'll definitely use this for my next
course.

Do you use a shell to run make or do you call it directly from emacs?

Alan



Re: [O] running the new exporter asynchronously?

2012-11-28 Thread Eric Schulte
Alan Schmitt alan.schm...@polytechnique.org writes:

 Eric Schulte schulte.e...@gmail.com writes:

 In the interim it, one solution which I personally like for large
 projects is to offload compilation into an external batch Emacs process.
 I find this not only useful for compilation while working, but if you
 place all relevant config into an init.el file loaded by the batch
 Emacs, this also makes it possible to share and compile the project
 separate of your personal Emacs config.

 Attached is a bare-bones Makefile supporting this sort of work-flow.

 This is really neat, thanks a lot! I'll definitely use this for my next
 course.


Good to hear.


 Do you use a shell to run make or do you call it directly from emacs?


I always have a shell open, so I generally prefer to run from there.
You could also just run M-x compile, which runs make asynchronously
and presents the output in a useful format.

Cheers,


 Alan

-- 
Eric Schulte
http://cs.unm.edu/~eschulte



Re: [O] running the new exporter asynchronously?

2012-11-28 Thread Myles English

Hi,

Eric Schulte writes:

 In the interim it, one solution which I personally like for large
 projects is to offload compilation into an external batch Emacs process.
 I find this not only useful for compilation while working, but if you
 place all relevant config into an init.el file loaded by the batch
 Emacs, this also makes it possible to share and compile the project
 separate of your personal Emacs config.

 Attached is a bare-bones Makefile supporting this sort of work-flow.

This is probably too complicated for your immediate requirements but it
is a good opportunity to share my solution using CMake.  It does add
more complexity though.  It is for pdf production and uses something
called UseLATEX.cmake.  The main advantages are that:

- it can also regenerate all my plots from standalone (e.g.) R scripts,
  so I don't have to do everything in org if I don't want to
- it does 'out of source' builds
- I don't know the make syntax
- it would probably work on different OS

Here is the non-barebones example:

#+BEGIN_SRC sh :tangle CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

project(thesis NONE)
  
include(/usr/share/cmake-2.8/Modules/UseLATEX.cmake)

# Set R executable
set(R_COMPILE /usr/bin/Rscript)
  # Set the location of data files
  ##set(DATA_DIR data)
  # Set the location of the directory for image files
set(IMAGE_DIR graphicsauto)

  # Get a list of R files
file(GLOB_RECURSE R_FILES R/*.R)

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/R DESTINATION 
${CMAKE_CURRENT_BINARY_DIR})
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR})

foreach(file ${R_FILES})
message(proceessing ${file})
get_filename_component(basename ${file} NAME_WE)

  # Command to run R
if(R_COMPILE)
message(Adding ... 
${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R)
  
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R
#  ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${DATA_DIR}
COMMAND
${R_COMPILE}
ARGS
${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R
${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
)
message(Running ${R_COMPILE} 
${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R 
${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps)
  
endif(R_COMPILE)
  
  # Make a list of all R files (for ADD_LATEX_DOCUMENT depend)
set(ALL_R_FILES ${ALL_R_FILES}
${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
)
endforeach(file)
  
  # --- export mainThesis.org ---
latex_get_output_path(OUTPUT_DIR)  
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mainThesis.org DESTINATION 
${OUTPUT_DIR}/ )
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/thesis.el DESTINATION 
${OUTPUT_DIR}/ )

add_custom_target( orgfile ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.org )

add_custom_target( elfile ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thesis.el )

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.tex
COMMAND emacs -Q --batch --eval \(progn
(add-to-list 'load-path
   (expand-file-name 
\\~/.emacs.d/plugins/org-mode/lisp/\\))
 (add-to-list 'load-path
(expand-file-name 
\\~/.emacs.d/plugins/org-mode/contrib/lisp/\\ t))
(require 'org)
 (require 'org-export)
(require 'org-exp)
 (require 'org-inlinetask)
(require 'ob-plantuml)
 (setq org-plantuml-jar-path 
\\/home/myles/Downloads/plantuml.jar\\)
 (org-babel-do-load-languages
  'org-babel-load-languages
'((emacs-lisp . t)
(sh . t)
(plantuml . t)))
 (setq org-confirm-babel-evaluate nil)
   (setq org-export-with-todo-keywords nil)
   (load-library \\/home/myles/lib/lisp/my-export.el\\)
   (add-to-list 'org-export-before-processing-hook 
'my-export-delete-headlines-tagged-noheading)
(load-file \\thesis.el\\)
(find-file \\${CMAKE_CURRENT_BINARY_DIR}/mainThesis.org\\)
(org-e-latex-export-to-latex))\
DEPENDS orgfile elfile
COMMENT Exporting orgmode file to LaTeX using emacs)

add_custom_target( mainfile ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.tex )

add_latex_document(master.tex
BIBFILES texlib/mybiblatex.bib