emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Dmitri Makarov
Subject: Re: [O] htmlize doesn't work in --batch mode
Date: Wed, 19 Sep 2012 20:40:56 +0200

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 "#FFFFFF")
  ;; 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;htmlize&quot;))"/>
      <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 <address@hidden> wrote:

> Hi Dmitri,
> 
> Dmitri Makarov <address@hidden> 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]