emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* htmlize doesn't work in --batch mode
@ 2012-09-11 13:16 Dmitri Makarov
  0 siblings, 0 replies; 5+ messages in thread
From: Dmitri Makarov @ 2012-09-11 13:16 UTC (permalink / raw)
  To: emacs-orgmode

Hi all,

I'm having a problem with offline exports.
If I run emacs in --batch mode like this

emacs -batch -l ~/.emacs.d/init.el -eval '(org-publish-all)'

it doesn't seem to load the packages installed by the ELPA package manager.
In particular it doesn't load htmlize package and also loads the bundled org
version 7.8.11 whereas I have newer version 7.9.1 installed in packages.

Also, it seems for the new version of org to take over the bundled org
package when I run emacs in normal window mode I have to invoke
(require 'org-install) from after-init-hook like this

(add-hook 'after-init-hook
          (lambda ()
            (load-file "~/.emacs.d/org.el")))

org.el among other things includes (require 'org-install)

If I place (require 'org-install) directly in my init.el,
emacs loads the org package bundled with the emacs installation,
not the one installed by the package manager, probably because
package-initialize is evaluated after init.el has been loaded.

Is this normal?  Did anyone have the same problem?
My emacs version is GNU Emacs 24.2.1.

I hope my questions make sense, as I don't really have much experience with emacs package management, and it seems difficult to describe the problem clearly.
I apologize for this is not being an org-mode question, but since many org users
use htmlize, I figure some of them probably want to export their org files
in batch mode, and perhaps they've faced the same issues with packages
in batch mode that I'm having.

Regards,

Dmitri

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: htmlize doesn't work in --batch mode
  2012-09-19 17:03 ` Bastien
  2012-09-19 18:29   ` Achim Gratz
@ 2012-09-19 18:40   ` Dmitri Makarov
  1 sibling, 0 replies; 5+ messages in thread
From: Dmitri Makarov @ 2012-09-19 18:40 UTC (permalink / raw)
  To: emacs-orgmode

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 <bzg@altern.org> wrote:

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: htmlize doesn't work in --batch mode
  2012-09-19 17:03 ` Bastien
@ 2012-09-19 18:29   ` Achim Gratz
  2012-09-19 18:40   ` Dmitri Makarov
  1 sibling, 0 replies; 5+ messages in thread
From: Achim Gratz @ 2012-09-19 18:29 UTC (permalink / raw)
  To: emacs-orgmode

Bastien writes:
> Dmitri Makarov <dmakarv@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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: htmlize doesn't work in --batch mode
  2012-09-14  9:38 Dmitri Makarov
@ 2012-09-19 17:03 ` Bastien
  2012-09-19 18:29   ` Achim Gratz
  2012-09-19 18:40   ` Dmitri Makarov
  0 siblings, 2 replies; 5+ messages in thread
From: Bastien @ 2012-09-19 17:03 UTC (permalink / raw)
  To: Dmitri Makarov; +Cc: emacs-orgmode

Hi Dmitri,

Dmitri Makarov <dmakarv@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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* htmlize doesn't work in --batch mode
@ 2012-09-14  9:38 Dmitri Makarov
  2012-09-19 17:03 ` Bastien
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitri Makarov @ 2012-09-14  9:38 UTC (permalink / raw)
  To: emacs-orgmode

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.

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

Regards,

Dmitri

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-09-19 18:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-11 13:16 htmlize doesn't work in --batch mode Dmitri Makarov
2012-09-14  9:38 Dmitri Makarov
2012-09-19 17:03 ` Bastien
2012-09-19 18:29   ` Achim Gratz
2012-09-19 18:40   ` Dmitri Makarov

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).