Fundo de imagem embutida padrão no modo de organização

9

Quando uma imagem tem um plano de fundo transparente, o Emacs obviamente respeita isso.

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

texto em preto sobre fundo escuro

Existe uma maneira de exibir uma cor específica (por exemplo, branco) atrás da imagem? Parece haver algum suporte para isso nas 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 para fazer isso, o que é menos que o ideal. Gostaria de chegar onde as imagens embutidas exibidas no modo organizacional têm a cor de fundo definida por padrão.

(Nota: isso não é específico ao org-babel, apenas acontece como estou obtendo essas imagens agora)

J David Smith
fonte

Respostas:

8

Após muita escavação, não parece haver uma opção interna para ajustar isso na organização ou em geral. O sistema de imagem não tem como personalizar o plano de fundo padrão e a organização não tem como definir a :backgroundpropriedade. No entanto, parece que a maioria das imagens suporta a :backgroundpropriedade de exibição.

Adicionei essa funcionalidade à organização modificando (leia: copie e cole em .emacs.duma alteração de 1 linha) org-display-inline-images.

Não reproduzirei a função aqui, porque é bastante longa. A linha 51 da função diz:

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

Eu defini uma nova variável personalizável org-inline-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)))

Em seguida, adicionei a 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, satisfazendo todos os meus requisitos.

texto em preto luz de fundo

J David Smith
fonte
Parece que você trabalhou muito para descobrir isso. Deseja enviar um patch para isso ou solicitar que ele seja adicionado ao modo organizacional, enviando um e-mail para [email protected]?
Kaushal Modi
Uma vez que eu o passo (certifique-se de que não quebre nada), espero também.
J David Smith
A nova versão 8.0 do modo Orgânico parece começar a usar sobreposição para exibir imagens embutidas. Existe uma maneira de modificar a cor de fundo padrão da sobreposição?
stardiviner
@stardiviner que é exatamente o que isso faz
J David Smith
Eu verifiquei minha versão Org, é 8.3.4. Eu verifiquei o org-display-inline-imagescódigo fonte, não encontrei sua definição de código. Aqui está o código-fonte: gist.github.com/649a7b36031d6adb4a96
stardiviner
3

Consegui uma solução melhor com conselhos.

(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
fonte
Ótima solução. Posso sugerir renomear a função de aconselhamento para remover o org-prefixo, pois a solução se aplica muito mais amplamente? Com temas não padrão, o objetivo é provavelmente um plano de fundo branco (que freqüentemente não é o plano de fundo padrão da face), portanto, (list :background "white")pode ser um exemplo útil.
EBPa
11
Essa é a opção do usuário, sua consideração é correta. Acho que seu comentário é suficiente para o usuário que encontrou esse código. :)
stardiviner