* Code block syntax highlighting in async export
@ 2022-10-02 3:24 David Lukeš
2022-10-02 7:24 ` Ihor Radchenko
0 siblings, 1 reply; 13+ messages in thread
From: David Lukeš @ 2022-10-02 3:24 UTC (permalink / raw)
To: emacs-orgmode
Hi all,
I get different syntax highlighting in code blocks when using async
export: no colors, just bold, italics and underlines. Is this expected,
and if so, is there maybe an easy fix I just don’t know about?
I found a similar problem in [batch export], but the workaround seems
relatively complicated and brittle.
Alternatively, if this is an inherent limitation of async/batch export,
I’m thinking maybe [using an external colorizer like pygments] might be
the simpler option.
Thanks for any tips!
Best,
David
[batch export] <https://emacs.stackexchange.com/a/38515>
[using an external colorizer like pygments]
<https://linevi.ch/en/org-pygments.html>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-02 3:24 Code block syntax highlighting in async export David Lukeš
@ 2022-10-02 7:24 ` Ihor Radchenko
2022-10-02 12:13 ` Max Nikulin
0 siblings, 1 reply; 13+ messages in thread
From: Ihor Radchenko @ 2022-10-02 7:24 UTC (permalink / raw)
To: David Lukeš; +Cc: emacs-orgmode
David Lukeš <dafydd.lukes@gmail.com> writes:
> I get different syntax highlighting in code blocks when using async
> export: no colors, just bold, italics and underlines. Is this expected,
> and if so, is there maybe an easy fix I just don’t know about?
Could you please provide an example?
See https://orgmode.org/manual/Feedback.html
> I found a similar problem in [batch export], but the workaround seems
> relatively complicated and brittle.
That is likely a different problem. In batch mode, Emacs disabled
font-lock-mode unconditionally, which makes fontification in some major
modes broken.
--
Ihor Radchenko,
Org mode contributor,
Learn more about Org mode at https://orgmode.org/.
Support Org development at https://liberapay.com/org-mode,
or support my work at https://liberapay.com/yantar92
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-02 7:24 ` Ihor Radchenko
@ 2022-10-02 12:13 ` Max Nikulin
2022-10-03 12:08 ` David Lukeš
0 siblings, 1 reply; 13+ messages in thread
From: Max Nikulin @ 2022-10-02 12:13 UTC (permalink / raw)
To: David Lukeš; +Cc: emacs-orgmode
On 02/10/2022 14:24, Ihor Radchenko wrote:
> David Lukeš writes:
>
>> I get different syntax highlighting in code blocks when using async
>> export: no colors, just bold, italics and underlines. Is this expected,
>> and if so, is there maybe an easy fix I just don’t know about?
>
> Could you please provide an example?
> See https://orgmode.org/manual/Feedback.html
>
>> I found a similar problem in [batch export], but the workaround seems
>> relatively complicated and brittle.
>
> That is likely a different problem. In batch mode, Emacs disabled
> font-lock-mode unconditionally, which makes fontification in some major
> modes broken.
Certainly more details is necessary, even export format (backend) is not
specified.
A problem that has some similar symptoms:
M. Pger. Re: no syntax highlighting for code blocks with org-publish.
Mon, 18 Jul 2022 22:55:15 +0000.
https://list.orgmode.org/inTtQOKWAhnFydjBE9fQOOdo_oV6kIPG5_E0d8DsfFiYMIJ4RNLRk68Id6dyrzy1qIDK8YJu0Wty7objv22vR31PNrh-qB9vKxMgHPxNAu8=@protonmail.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-02 12:13 ` Max Nikulin
@ 2022-10-03 12:08 ` David Lukeš
2022-10-03 12:42 ` Timothy
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: David Lukeš @ 2022-10-03 12:08 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
> Could you please provide an example?
> Certainly more details is necessary, even export format (backend) is not
> specified.
Sorry for that! I somehow thought that the issue would sound familiar
to more seasoned Org users, and someone would come back with either
"yeah, you need to do X" or "yeah, that's a known limitation".
The export backend is HTML. In case anyone wants to try reproducing
this, I made a minimal working example here:
https://github.com/dlukes/org-html-a-sync-export-syntax-highlighting
> A problem that has some similar symptoms:
> M. Pger. Re: no syntax highlighting for code blocks with org-publish.
> Mon, 18 Jul 2022 22:55:15 +0000.
> https://list.orgmode.org/inTtQOKWAhnFydjBE9fQOOdo_oV6kIPG5_E0d8DsfFiYMIJ4RNLRk68Id6dyrzy1qIDK8YJu0Wty7objv22vR31PNrh-qB9vKxMgHPxNAu8=@protonmail.com
This looks indeed very similar, thank you! I'll investigate if I can
leverage any of the workarounds mentioned.
Best,
David
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 12:08 ` David Lukeš
@ 2022-10-03 12:42 ` Timothy
2022-10-03 13:22 ` David Lukeš
2022-10-03 15:57 ` Max Nikulin
2022-10-04 4:04 ` Ihor Radchenko
2 siblings, 1 reply; 13+ messages in thread
From: Timothy @ 2022-10-03 12:42 UTC (permalink / raw)
To: David Lukeš; +Cc: Max Nikulin, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1087 bytes --]
Hi David,
> Sorry for that! I somehow thought that the issue would sound familiar
> to more seasoned Org users, and someone would come back with either
> “yeah, you need to do X” or “yeah, that’s a known limitation”.
Each backend is its own beast, somewhat 🙂.
> The export backend is HTML. In case anyone wants to try reproducing
> this, I made a minimal working example here:
> <https://github.com/dlukes/org-html-a-sync-export-syntax-highlighting>
> This looks indeed very similar, thank you! I’ll investigate if I can
> leverage any of the workarounds mentioned.
There’s a decent chance that `engrave-faces' (a package of mine that can now be
used for code blocks in LaTeX) will work in batch mode. Integrating it with
`ox-html', `ox-ansii', and `ox-odt' are all (distantly) on my todo list.
All the best,
Timothy
--
Timothy (`tecosaur'/`TEC'), Org mode contributor.
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/tec>.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 12:42 ` Timothy
@ 2022-10-03 13:22 ` David Lukeš
2022-10-03 13:58 ` Ihor Radchenko
0 siblings, 1 reply; 13+ messages in thread
From: David Lukeš @ 2022-10-03 13:22 UTC (permalink / raw)
To: Timothy; +Cc: Max Nikulin, emacs-orgmode
> I'll investigate if I can leverage any of the workarounds mentioned.
So, for batch processing, avoiding --batch or --script and just using
--load with a script that either ends by killing Emacs, or killing it
via an additional --eval, works, i.e. syntax highlighting uses colors.
This was suggested in [1]. As [2] points out, adding -nw removes the
colors, and so does adding --daemon (suggested in [3]), so don't do
either.
Enabling font-lock-mode manually and defining all the fontification
(see [4]) sounds like it would also work, but honestly, that's too
involved, so I didn't try it.
Using an external colorizer (as shown in [5]), seems like a good
alternative, if non-Emacs dependencies are acceptable.
These two last options can also be made to work with async export (my
original question), where you don't have control over how the batch
instance of Emacs is invoked.
> There’s a decent chance that `engrave-faces' (a package of mine that can now be
> used for code blocks in LaTeX) will work in batch mode. Integrating it with
> `ox-html', `ox-ansii', and `ox-odt' are all (distantly) on my todo list.
Sounds great! If it will work in regular batch mode, then it should
work with async as well :)
Best,
David
[1] https://list.orgmode.org/orgmode/vZh_aXsUhlwNcRMF3miS6hNUo6xxUCFuzm4dwfCNQHcm4Ib53t8sJVVJ-PmYD4sRfoCvWRjtEG7L5rfN4pRe5nDxLFWxWEG8ZqcZ5YvJyDs=@protonmail.com/
[2] https://list.orgmode.org/orgmode/YmBR481ZMgZpA6svOfEMt3nYa8UPEKgvFUY5s8SpRWu2YdJz0pb0gPz8ajcTeKFbF7SD1fD9XibICa8Z-JdTiIqgjOlD1y4yg9uHCB176ZA=@protonmail.com/
[3] https://list.orgmode.org/orgmode/87a6923dbw.fsf@localhost/
[4] https://list.orgmode.org/AE5693F1-F63D-4383-8840-0FD2DBAAC5D6@gmail.com/
[5] https://linevi.ch/en/org-pygments.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 13:22 ` David Lukeš
@ 2022-10-03 13:58 ` Ihor Radchenko
2022-10-03 14:40 ` Timothy
0 siblings, 1 reply; 13+ messages in thread
From: Ihor Radchenko @ 2022-10-03 13:58 UTC (permalink / raw)
To: David Lukeš; +Cc: Timothy, Max Nikulin, emacs-orgmode
David Lukeš <dafydd.lukes@gmail.com> writes:
>> I'll investigate if I can leverage any of the workarounds mentioned.
>
> So, for batch processing, avoiding --batch or --script and just using
> --load with a script that either ends by killing Emacs, or killing it
> via an additional --eval, works, i.e. syntax highlighting uses colors.
> This was suggested in [1]. As [2] points out, adding -nw removes the
> colors, and so does adding --daemon (suggested in [3]), so don't do
> either.
>
> Enabling font-lock-mode manually and defining all the fontification
> (see [4]) sounds like it would also work, but honestly, that's too
> involved, so I didn't try it.
To clarify, the latest Org version should not care about font-lock being
enabled. `font-lock-ensure' usually works in batch mode as well even
though font-lock-mode is technically disabled.
Except when it does not. Some major modes do fontification awkwardly,
which can be considered a bug in those major modes.
You can refer to https://yhetil.org/emacs-bugs/874jzdhh5m.fsf@localhost/
> Using an external colorizer (as shown in [5]), seems like a good
> alternative, if non-Emacs dependencies are acceptable.
>
> These two last options can also be made to work with async export (my
> original question), where you don't have control over how the batch
> instance of Emacs is invoked.
>
>> There’s a decent chance that `engrave-faces' (a package of mine that can now be
>> used for code blocks in LaTeX) will work in batch mode. Integrating it with
>> `ox-html', `ox-ansii', and `ox-odt' are all (distantly) on my todo list.
>
> Sounds great! If it will work in regular batch mode, then it should
> work with async as well :)
I would not be so sure. If the issue is major-mode not doing
fontification in batch mode, engrave-faces cannot do much.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 13:58 ` Ihor Radchenko
@ 2022-10-03 14:40 ` Timothy
2022-10-04 4:10 ` Ihor Radchenko
0 siblings, 1 reply; 13+ messages in thread
From: Timothy @ 2022-10-03 14:40 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: David Lukeš, Timothy, Max Nikulin, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
Hi Ihor,
> I would not be so sure. If the issue is major-mode not doing
> fontification in batch mode, engrave-faces cannot do much.
Try it 😉
All the best,
Timothy
--
Timothy (‘tecosaur’/‘TEC’), Org mode contributor.
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/tec>.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 12:08 ` David Lukeš
2022-10-03 12:42 ` Timothy
@ 2022-10-03 15:57 ` Max Nikulin
2022-10-03 19:32 ` David Lukeš
2022-10-04 4:04 ` Ihor Radchenko
2 siblings, 1 reply; 13+ messages in thread
From: Max Nikulin @ 2022-10-03 15:57 UTC (permalink / raw)
To: David Lukeš; +Cc: emacs-orgmode
On 03/10/2022 19:08, David Lukeš wrote:
>> Could you please provide an example?
>
>> A problem that has some similar symptoms:
>> M. Pger. Re: no syntax highlighting for code blocks with org-publish.
>> Mon, 18 Jul 2022 22:55:15 +0000.
>> https://list.orgmode.org/inTtQOKWAhnFydjBE9fQOOdo_oV6kIPG5_E0d8DsfFiYMIJ4RNLRk68Id6dyrzy1qIDK8YJu0Wty7objv22vR31PNrh-qB9vKxMgHPxNAu8=@protonmail.com
>
> This looks indeed very similar, thank you! I'll investigate if I can
> leverage any of the workarounds mentioned.
I have realized that
https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-elisp.html
has colorized source blocks. The file is created using
https://git.sr.ht/~bzg/worg/blob/master/publish.sh and the script is
executed inside a container with no available DISPLAY.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 15:57 ` Max Nikulin
@ 2022-10-03 19:32 ` David Lukeš
0 siblings, 0 replies; 13+ messages in thread
From: David Lukeš @ 2022-10-03 19:32 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
> I have realized that
> https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-elisp.html
> has colorized source blocks. The file is created using
> https://git.sr.ht/~bzg/worg/blob/master/publish.sh and the script is
> executed inside a container with no available DISPLAY.
Well spotted! I think the trick there is setting
org-html-htmlize-output-type to 'css. See the variable's
documentation:
Choices are css to export the CSS selectors only,inline-css
to export the CSS attribute values inline in the HTML or nil to
export plain text. We use as default inline-css, in order to
make the resulting HTML self-containing.
However, this will fail when using Emacs in batch mode for export, because
then no rich font definitions are in place. It will also not be good if
people with different Emacs setup contribute HTML files to a website,
because the fonts will represent the individual setups. In these cases,
it is much better to let Org/Htmlize assign classes only, and to use
a style file to define the look of these classes.
To get a start for your css file, start Emacs session and make sure that
all the faces you are interested in are defined, for example by loading files
in all modes you want. Then, use the command
M-x org-html-htmlize-generate-css to extract class definitions.
So, still a workaround, technically, but a nice and clean one that
definitely deserves to be mentioned in this context!
Best,
David
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 12:08 ` David Lukeš
2022-10-03 12:42 ` Timothy
2022-10-03 15:57 ` Max Nikulin
@ 2022-10-04 4:04 ` Ihor Radchenko
2 siblings, 0 replies; 13+ messages in thread
From: Ihor Radchenko @ 2022-10-04 4:04 UTC (permalink / raw)
To: David Lukeš; +Cc: Max Nikulin, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 2733 bytes --]
David Lukeš <dafydd.lukes@gmail.com> writes:
>> Could you please provide an example?
>
>> Certainly more details is necessary, even export format (backend) is not
>> specified.
>
> Sorry for that! I somehow thought that the issue would sound familiar
> to more seasoned Org users, and someone would come back with either
> "yeah, you need to do X" or "yeah, that's a known limitation".
>
> The export backend is HTML. In case anyone wants to try reproducing
> this, I made a minimal working example here:
> https://github.com/dlukes/org-html-a-sync-export-syntax-highlighting
Thanks for the easy reproducer!
I played around with the export there, and I think I have found the
cause.
As expected, the problem originates from batch mode of Emacs
operation.
ox-html relies upon htmlize-region -> htmlize-buffer-1 ->
htmlize-make-face-map -> htmlize-face-to-fstruct ->
htmlize-face-to-fstruct-1.
In synchronous export `htmlize-face-to-fstruct-1' returns:
font-lock-comment-face -> #s(htmlize-fstruct "#b22222" nil nil nil nil nil nil nil "org-comment")
font-lock-comment-delimiter-face -> #s(htmlize-fstruct "#b22222" nil nil nil nil nil nil nil "org-comment-delimiter")
font-lock-doc-face -> #s(htmlize-fstruct "#8b2252" nil nil nil nil nil nil nil "org-doc")
font-lock-keyword-face -> #s(htmlize-fstruct "#a020f0" nil nil nil nil nil nil nil "org-keyword")
font-lock-function-name-face -> #s(htmlize-fstruct "#0000ff" nil nil nil nil nil nil nil "org-function-name")
In asynchronous export:
default -> #s(htmlize-fstruct "#000000" "#ffffff" 1 nil nil nil nil nil "org-default")
font-lock-comment-face -> #s(htmlize-fstruct nil nil nil t t nil nil nil "org-comment")
font-lock-comment-delimiter-face -> #s(htmlize-fstruct nil nil nil t t nil nil nil "org-comment-delimiter")
font-lock-doc-face -> #s(htmlize-fstruct nil nil nil nil t nil nil nil "org-doc")
font-lock-keyword-face -> #s(htmlize-fstruct nil nil nil t nil nil nil nil "org-keyword")
font-lock-function-name-face -> #s(htmlize-fstruct nil nil nil t nil nil nil nil "org-function-name")
-----------------------------
What can we do on the Org side to fix the issue?
One way could be avoiding batch execution altogether, like in the
attached patch. However, it will break our process sentinel watching for
the export results. Moreover, I am not sure how it will work when export
is done from terminal Emacs. Also, I know no way to _not_ create an
extra Emacs frame during such export - I imagine that a new frame (even
minimized) might be annoying for the users.
Maybe we should request Emacs to add --graphical-batch mode feature that
will preserve graphical features while not interfering with the WM?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-Do-not-disable-graphical-Emacs-capabilities-durin.patch --]
[-- Type: text/x-patch, Size: 1581 bytes --]
From 8bc0a66275ca6ffdf142e8e2c2b38d79923531d8 Mon Sep 17 00:00:00 2001
Message-Id: <8bc0a66275ca6ffdf142e8e2c2b38d79923531d8.1664855997.git.yantar92@gmail.com>
From: Ihor Radchenko <yantar92@gmail.com>
Date: Tue, 4 Oct 2022 11:58:45 +0800
Subject: [PATCH] ox: Do not disable graphical Emacs capabilities during async
export
* lisp/ox.el (org-export-async-start): Run Emacs in possibly iconized
window instead of batch mode. This way, font colors can be processed
by htmlize during async export.
---
lisp/ox.el | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/lisp/ox.el b/lisp/ox.el
index 42204ffde..a31459632 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -6432,7 +6432,9 @@ (defun org-export-async-start (fun body)
(funcall ',copy-fun)
(restore-buffer-modified-p nil)
;; Sexp to evaluate in the buffer.
- (print ,body)))
+ (print ,body)
+ ;; Kill Emacs at the end.
+ (kill-emacs 0)))
nil temp-file nil 'silent))
;; Start external process.
(let* ((process-connection-type nil)
@@ -6444,7 +6446,9 @@ (defun org-export-async-start (fun body)
(list "org-export-process"
proc-buffer
(expand-file-name invocation-name invocation-directory)
- "--batch")
+ ;; "--batch"
+ "--iconic"
+ )
(if org-export-async-init-file
(list "-Q" "-l" org-export-async-init-file)
(list "-l" user-init-file))
--
2.35.1
[-- Attachment #3: Type: text/plain, Size: 225 bytes --]
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-03 14:40 ` Timothy
@ 2022-10-04 4:10 ` Ihor Radchenko
2022-10-04 4:14 ` Timothy
0 siblings, 1 reply; 13+ messages in thread
From: Ihor Radchenko @ 2022-10-04 4:10 UTC (permalink / raw)
To: Timothy; +Cc: David Lukeš, Max Nikulin, emacs-orgmode
Timothy <orgmode@tec.tecosaur.net> writes:
> Hi Ihor,
>
>> I would not be so sure. If the issue is major-mode not doing
>> fontification in batch mode, engrave-faces cannot do much.
>
> Try it 😉
You are right. With default preset, engrave-faces does not need to query
Emacs about face colors and attributes and should not depend on the
`display-graphic-p'.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Code block syntax highlighting in async export
2022-10-04 4:10 ` Ihor Radchenko
@ 2022-10-04 4:14 ` Timothy
0 siblings, 0 replies; 13+ messages in thread
From: Timothy @ 2022-10-04 4:14 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Timothy, David Lukeš, Max Nikulin, emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 986 bytes --]
Hi Ihor,
>> Try it 😉
>
> You are right. With default preset, engrave-faces does not need to query
> Emacs about face colors and attributes and should not depend on the
> `display-graphic-p’.
Yep, it works because it’s basically implementing its own face-resolving layer.
This was originally done to allow exporting in a theme different to the one
currently being used as seamlessly as possible, it working with batch mode was a
bonus.
For the information of anyone else following the thread, you can easily add new
presets by creating an elisp setup file for batch mode and running `C-u M-x
engrave-faces-use-theme' in it — code defining a new preset will then be
generated and inserted at point.
All the best,
Timothy
--
Timothy (‘tecosaur’/‘TEC’), Org mode contributor.
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/tec>.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2022-10-04 4:20 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-02 3:24 Code block syntax highlighting in async export David Lukeš
2022-10-02 7:24 ` Ihor Radchenko
2022-10-02 12:13 ` Max Nikulin
2022-10-03 12:08 ` David Lukeš
2022-10-03 12:42 ` Timothy
2022-10-03 13:22 ` David Lukeš
2022-10-03 13:58 ` Ihor Radchenko
2022-10-03 14:40 ` Timothy
2022-10-04 4:10 ` Ihor Radchenko
2022-10-04 4:14 ` Timothy
2022-10-03 15:57 ` Max Nikulin
2022-10-03 19:32 ` David Lukeš
2022-10-04 4:04 ` Ihor Radchenko
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.