Fundo da Imagem Inline Padrão no Modo Org

Quando uma imagem tem um fundo transparente, o Emacs naturalmente respeita isso.

Infelizmente, isso pode levar a problemas com a exibição:

black text on dark background

Existe uma maneira de exibir uma cor específica (por exemplo, branco) atrás da imagem? Parece haver algum suporte para isso em Imagens do ImageMagick .

As coisas específicas com as quais estou trabalhando agora podem ter a cor de fundo definida, no entanto, tenho que adicionar algumas linhas extras a cada figura individual para fazer isso, o que é menos que ideal. Eu gostaria de levá-lo para onde as imagens em linha exibidas no modo de organização têm a cor de fundo definida por padrão.

(Nota: isso não é específico do org-babel, é apenas como eu estou recebendo essas imagens agora)

8

2 Respostas

Depois de muita escavação, não parece ser uma opção incorporada para ajustar isso em Org ou em geral. O sistema de imagens não tem como personalizar o fundo padrão, e a organização não tem como definir a propriedade : background . No entanto, parece que a maioria das imagens suporta a propriedade de exibição : background .

Eu adicionei essa funcionalidade ao Org modificando (leia: copie e cole no .emacs.d com uma alteração de 1 linha) org-display-inline-images .

Eu não vou reproduzir a função aqui, porque é bastante longa. A linha 51 da função lê:

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

Eu defini uma nova variável personalizável org-in-line-image-background , que pode conter nil (fundo transparente) ou uma cor:

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

Então, eu adicionei na linha 51:

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

Isso funciona lindamente e pode ser personalizado usando o seletor de cores, por isso satisfaz todas as minhas necessidades.

black text light background

8
adicionado
Parece que você deu muito trabalho para descobrir isso. Gostaria de enviar um patch para isso ou solicitar que isso seja adicionado ao modo de organização enviando um e-mail para [email protected]?
adicionado o autor UnkwnTech, fonte
Uma vez que eu coloquei seus passos (certifique-se que não quebre nada) eu estou esperando também.
adicionado o autor Gareth Simpson, fonte
@stardiviner é exatamente o que isso faz
adicionado o autor Gareth Simpson, fonte
@stardiviner: não. Se você quiser, pode usar: filter-return ( gnu.org/software/emacs/manual/html_node/elisp/… ) para fazer isso.
adicionado o autor Gareth Simpson, fonte
A nova versão do modo organizacional 8.0 parece começar a usar a sobreposição para exibir imagens em linha. Existe uma maneira de modificar a cor de fundo padrão da sobreposição?
adicionado o autor Calvin Allen, fonte
Eu verifiquei minha versão da Org, é 8.3.4 . Eu verifiquei o código-fonte org-display-in-line-images , não encontrei sua definição de código. Aqui está o código fonte: gist.github.com/649a7b36031d6adb4a96
adicionado o autor Calvin Allen, fonte
Eu localizo o código de linha create-image e, em seguida, anexe o código como seu método. Eu acho que isso deveria ser um conselho. Você pode melhorar seu código?
adicionado o autor Calvin Allen, fonte
@JDavidSmith Eu acho que isso deve usar : filter-args em create-image para especificar a cor de fundo obtida do tema de cores. Mas eu ainda não consigo descobrir como escrever este conselho.
adicionado o autor Calvin Allen, fonte

Eu tenho uma solução melhor com conselhos.

(defun org-display-inline-images--with-color-theme-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
            #'org-display-inline-images--with-color-theme-background-color)
1
adicionado