Exporte archivos de modo org con bastante frecuencia, y casi todos tienen código. Cuando exporto código, termina coloreando el texto dependiendo de mi tema, sin embargo, cambio regularmente entre un tema oscuro y uno claro. En el caso del tema claro, los <code>
bloques deben tener un fondo claro, y para un tema oscuro deben tener un fondo oscuro (de lo contrario, termino con un texto amarillo claro sobre un fondo grisáceo y es ilegible).
Tengo que agregar esta línea para fondos oscuros:
#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>
Y luego recuerde eliminarlo cada vez que cambie a un fondo de color claro
¿Hay alguna forma en que pueda detectar automáticamente el color de fondo del tema actual en el momento de la exportación y usarlo en el CSS del HTML exportado?
EDITAR
Voy con la respuesta de Jordon (¡gracias Jordon, obtienes los puntos de karma!), Sin embargo, quería publicar la solución que terminé agregando a mi código, ya que era una versión ligeramente modificada de su respuesta:
(defun my/org-inline-css-hook (exporter)
"Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
(when (eq exporter 'html)
(let* ((my-pre-bg (face-background 'default))
(my-pre-fg (face-foreground 'default)))
(setq
org-html-head-extra
(concat
org-html-head-extra
(format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
my-pre-bg my-pre-fg))))))
(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)
Esto establece no solo el color de fondo, sino también el color de primer plano. También agrega la línea a la org-html-head-extra
configuración existente para que otro HTML no se sobrescriba accidentalmente. ¡Lo he probado y esto funciona muy bien para mí!
fuente
disable-theme
), no quiero tener que reiniciar Emacs con un tema separado solo para exportar HTML, lo que hago muchas veces al día.org-html-head-extra
se agrega, lo que lleva a un crecimiento ilimitado, aunque la funcionalidad del estilo no se verá afectada.Respuestas:
Primero, creo que org puede usar
htmlize
para colorear automáticamente sus bloques de código fuente de acuerdo con su tema.Alternativamente.
Echa un vistazo a http://definitelyaplug.b0.cx/post/custom-inlined-css-in-org-mode-html-export/ . Tiene un gran ejemplo de cómo usar
org-export-before-processing-hook
para lanzar CSS personalizado en un documento de organización antes de una exportación html.Aquí está el código en caso de que el sitio se caiga:
Aquí, en una exportación html, org buscará un archivo llamado styles.css en el directorio actual o un archivo predeterminado en el directorio .emacs.d e inyectará ese css en el documento. Esto es agradable pero no perfecto para su caso de uso.
Puede personalizar esto de varias maneras para que funcione como desee.
Una forma sería construir manualmente el CSS basado en su tema e insertarlo.
Aquí hay una versión modificada que establece el fondo del
pre.src
valor hexadecimal de las caras predeterminadas: propiedad de fondo.fuente