Re: [O] htmlize doesn't work in --batch mode

2012-09-19 Thread Bastien
Hi Dmitri,

Dmitri Makarov dmak...@gmail.com writes:

 If anyone interested, it's easy to explicitly load the required ELPA
 packages in batch mode.  For example, the following command loads htmlize
 for publishing org files in batch mode

 emacs --batch -l ~/.emacs.d/init.el --eval (progn (add-to-list 'load-path
 \~/.emacs.d/elpa/htmlize-20120616.1716\) (require 'htmlize)) -f
 org-publish-all

 It should be easy to include such a command in a makefile or build.xml and
 automatically locate the latest installation of necessary packages rather
 than explicitly specifying the path.

I let Achim be the final judge on this -- my intuitions in this areas
are just too fragile.  But my gut feeling is that this would be too
complicated, and the solution above is simple enough.

 Still I wonder why ELPA packages are not loaded by default in --batch
 mode even though (package-initialize) is being evaluated.

Please ask this on the emacs-devel mailing list, I'm sure this will help
many other users.  Several users (including me) have been puzzled by the
way ELPA packages are loaded/initialized in Emacs.

Best,

-- 
 Bastien



Re: [O] htmlize doesn't work in --batch mode

2012-09-19 Thread Achim Gratz
Bastien writes:
 Dmitri Makarov dmak...@gmail.com writes:
 It should be easy to include such a command in a makefile or build.xml and
 automatically locate the latest installation of necessary packages rather
 than explicitly specifying the path.

That's what BTEST_POST is there for in the build system, you can set it
up to either load a package directly or add to the load-path first and
then require the package.  Just have a look to see how it is done.

 I let Achim be the final judge on this -- my intuitions in this areas
 are just too fragile.  But my gut feeling is that this would be too
 complicated, and the solution above is simple enough.

It is generally a bad idea to guess how the user configured his/her
system and a lot of init files are simply incompatible with batch mode.

However, the OP didn't have a problem with the build system if I read
him correctly.  My advice there is to make a minimal separate init file
just for the batch export process and load that.


Regards,
Achim.
-- 
+[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]+

SD adaptation for Waldorf microQ V2.22R2:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada




Re: [O] htmlize doesn't work in --batch mode

2012-09-19 Thread Dmitri Makarov
Hi Bastien

I actually wrote an ant script that controls the off-line publishing.
It's fairly simple, assuming ELPA packages installed in ~/.emacs.d/elpa

Another important thing to note is that font-lock-mode is not enabled by default
in --batch mode.  So I ended up writing an extra .el file that is loaded
specifically for off-line publishing.

I'll paste here the relevant fragments to share in case somebody wants to do
something similar

Here are fragments of org.el loaded by emacs --batch command:

(defun common-hook-actions ()
  Peform actions common for all programming language modes
  (font-lock-mode 1)
  ;; a series of set-face-attribute commands to define the
  ;; fontification for SRC blocks
  (set-face-attribute 'font-lock-builtin-face nil
  :slant 'normal
  :weight 'normal
  :underline nil
  :foreground #FF)
  ;; more of the same
)

(add-hook 'c-mode-hook
  (lambda ()
(common-hook-actions)))

;; more mode-hooks can be added

(setq org-publish-timestamp-directory ../.org-timestamps/)
;; at this point I have (setq org-publish-project-alist
;; for the projects we need to publish

And this is a fragment of my build.xml:

  target name=find-htmlize
  description=Find the latest installation of emacs htmlize package
property environment=env/
exec executable=find
  outputproperty=find-output
  resultproperty=find-result
  arg value=${env.HOME}/.emacs.d/elpa/
  arg value=-type/
  arg value=d/
  arg value=-name/
  arg value=htmlize*/
  redirector
outputfilterchain
  tailfilter lines=1/
/outputfilterchain
  /redirector
/exec
condition property=htmlize
   value=${find-output}
   else=htmlize
  available file=${find-output} type=dir/
/condition
  /target

  target name=publish
  depends=find-htmlize
  description=Generate HTML and save into web directory on the local 
disk
condition property=emacs
   value=/usr/local/bin/emacs
   else=emacs
  available file=/usr/local/bin/emacs/
/condition
exec executable=${emacs} dir=org failonerror=true
  arg value=--batch/
  arg value=-l/
  arg value=org.el/
  arg value=--eval/
  arg value=(progn (add-to-list 'load-path quot;${htmlize}quot;) 
(load-library quot;htmlizequot;))/
  arg value=-f/
  arg value=org-publish-all/
/exec
  /target

All of the above creates completely autonomous publishing project. We actually
use it collaboratively, so other people can checkout the repository, edit org
files, build html (or pdf) from the org project and publish updated content on
the web-server without having to modify their ~/.emacs (or ~/.emacs.d/init.el)
files.  Everything is done with two simple shell commands invoking ant.

I hope somebody will find this useful.

Regards,

Dmitri

On Sep 19, 2012, at 7:03 PM, Bastien b...@altern.org wrote:

 Hi Dmitri,
 
 Dmitri Makarov dmak...@gmail.com writes:
 
 If anyone interested, it's easy to explicitly load the required ELPA
 packages in batch mode.  For example, the following command loads htmlize
 for publishing org files in batch mode
 
 emacs --batch -l ~/.emacs.d/init.el --eval (progn (add-to-list 'load-path
 \~/.emacs.d/elpa/htmlize-20120616.1716\) (require 'htmlize)) -f
 org-publish-all
 
 It should be easy to include such a command in a makefile or build.xml and
 automatically locate the latest installation of necessary packages rather
 than explicitly specifying the path.
 
 I let Achim be the final judge on this -- my intuitions in this areas
 are just too fragile.  But my gut feeling is that this would be too
 complicated, and the solution above is simple enough.
 
 Still I wonder why ELPA packages are not loaded by default in --batch
 mode even though (package-initialize) is being evaluated.
 
 Please ask this on the emacs-devel mailing list, I'm sure this will help
 many other users.  Several users (including me) have been puzzled by the
 way ELPA packages are loaded/initialized in Emacs.
 
 Best,
 
 -- 
 Bastien