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)

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


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 emacs-orgmode@gnu.org?
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)

Ó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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.