Fondo de imagen en línea predeterminado en modo Org

9

Cuando una imagen tiene un fondo transparente, Emacs, por supuesto, lo respeta.

Desafortunadamente, esto puede conducir a problemas con la pantalla:

texto negro sobre fondo oscuro

¿Hay alguna manera de mostrar un color específico (por ejemplo, blanco) detrás de la imagen? Parece que hay algo de soporte en las imágenes de ImageMagick .

Las cosas específicas con las que estoy trabajando ahora pueden tener el color de fondo establecido, sin embargo, tengo que agregar algunas líneas adicionales a cada figura para hacer eso, lo cual es menos que ideal. Me gustaría llegar a donde las imágenes en línea que se muestran en modo org tienen el color de fondo establecido de forma predeterminada.

(Nota: esto no es específico de org-babel, simplemente es cómo estoy obteniendo estas imágenes en este momento)

J David Smith
fuente

Respuestas:

8

Después de mucho excavar, no parece haber una opción integrada para ajustar esto en Org o en general. El sistema de imágenes no tiene ninguna forma de personalizar el fondo predeterminado, y la organización no tiene una forma de establecer la :backgroundpropiedad. Sin embargo, parece que la mayoría de las imágenes admiten la :backgroundpropiedad de visualización.

Agregué esta funcionalidad a Org al modificar (leer: copiar y pegar .emacs.dcon un cambio de 1 línea) org-display-inline-images.

No reproduciré la función aquí, porque es bastante larga. La línea 51 de la función dice:

(setq img (save-match-data (create-image file type nil :width width)))

Definí una nueva variable personalizable org-inline-image-background, que puede contener nil(fondo transparente) o un color:

(defcustom org-inline-image-background nil
  "The color used as the default background for inline images.
  When nil, use the default face background."
  :group 'org
  :type '(choice color (const nil)))

Luego, lo agregué a la línea 51:

(setq img (save-match-data (create-image file type nil :width width 
                                                       :background org-inline-image-background)))

Esto funciona de maravilla y se puede personalizar con el selector de color, por lo que satisface todos mis requisitos.

texto negro fondo claro

J David Smith
fuente
Parece que trabajaste mucho para resolver esto. ¿Desea enviar un parche para esto o solicitar que se agregue al modo org enviando un correo electrónico a [email protected]?
Kaushal Modi
Una vez que lo puse a prueba (asegúrese de que no rompa nada) también espero.
J David Smith
La nueva versión 8.0 del modo Org parece comenzar a usar superposición para mostrar imágenes en línea. ¿Hay alguna forma de modificar el color de fondo predeterminado de superposición?
stardiviner
@stardiviner que es exactamente lo que hace esto
J David Smith
Revisé mi versión de Org, lo es 8.3.4. Revisé el org-display-inline-imagescódigo fuente, no he encontrado la definición de su código. Aquí está el código fuente: gist.github.com/649a7b36031d6adb4a96
stardiviner
3

Obtuve una mejor solución con consejos.

(defun create-image-with-background-color (args)
  "Specify background color of Org-mode inline image through modify `ARGS'."
  (let* ((file (car args))
         (type (cadr args))
         (data-p (caddr args))
         (props (cdddr args)))
    ;; get this return result style from `create-image'
    (append (list file type data-p)
            (list :background (face-background 'default))
            props)))

(advice-add 'create-image :filter-args
            #'create-image-with-background-color)
Stardiviner
fuente
Buena solución ¿Puedo sugerir cambiar el nombre de la función de consejos para eliminar el org-prefijo ya que la solución se aplica mucho más ampliamente? Con temas no predeterminados, el objetivo es probablemente un fondo blanco (que con frecuencia no es el fondo de la cara predeterminado), por lo que (list :background "white")podría ser un ejemplo útil.
ebpa
1
Esa es la opción del usuario, su consideración es correcta. Creo que tu comentario es suficiente para el usuario que encontró este código. :)
stardiviner