Arrière-plan de l'image en ligne par défaut en mode organisation


9

Lorsqu'une image a un fond transparent, Emacs respecte bien sûr cela.

Malheureusement, cela peut entraîner des problèmes d'affichage:

texte noir sur fond sombre

Existe-t-il un moyen d'afficher une couleur spécifique (par exemple le blanc) derrière l'image? Il semble y avoir une certaine prise en charge dans les images ImageMagick .

Les éléments spécifiques avec lesquels je travaille en ce moment peuvent avoir la couleur de fond définie, mais je dois ajouter quelques lignes supplémentaires à chaque figure pour ce faire, ce qui n'est pas idéal. Je voudrais obtenir où les images en ligne affichées en mode org ont la couleur d'arrière-plan définie par défaut.

(Remarque: ce n'est pas spécifique à org-babel, il se trouve que c'est comme ça que je reçois ces images en ce moment)

Réponses:


8

Après beaucoup de fouilles, il ne semble pas y avoir d'option intégrée pour régler cela dans Org ou en général. Le système d'image n'a aucun moyen de personnaliser l'arrière-plan par défaut et org n'a aucun moyen de définir la :backgroundpropriété. Cependant, il semble que la plupart des images prennent en charge la :backgroundpropriété d'affichage.

J'ai ajouté cette fonctionnalité à Org en modifiant (lire: copier et coller .emacs.davec un changement d'une ligne) org-display-inline-images.

Je ne reproduirai pas la fonction ici, car elle est assez longue. La ligne 51 de la fonction se lit comme suit:

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

J'ai défini une nouvelle variable personnalisable org-inline-image-background, qui peut contenir soit nil(fond transparent) soit une couleur:

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

Ensuite, je l'ai ajouté à la ligne 51:

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

Cela fonctionne à merveille et il peut être personnalisé à l'aide du sélecteur de couleurs, il répond donc à toutes mes exigences.

fond clair de texte noir


On dirait que vous avez fait beaucoup de travail pour comprendre cette chose. Souhaitez-vous soumettre un patch pour cela ou demander à ce qu'il soit ajouté au mode org en envoyant un e-mail à emacs-orgmode@gnu.org?
Kaushal Modi

Une fois que je l'ai mis à l'épreuve (assurez-vous qu'il ne casse rien), j'espère aussi.
J David Smith

La nouvelle version 8.0 du mode Org semble commencer à utiliser la superposition pour afficher des images en ligne. Existe-t-il un moyen de modifier la couleur d'arrière-plan par défaut de la superposition?
stardiviner

@stardiviner c'est exactement ce que cela fait
J David Smith

J'ai vérifié ma version Org, ça l'est 8.3.4. J'ai vérifié le org-display-inline-imagescode source, je n'ai pas trouvé votre définition de code. Voici le code source: gist.github.com/649a7b36031d6adb4a96
stardiviner

3

J'ai obtenu une meilleure solution avec des conseils.

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

Belle solution. Puis-je suggérer de renommer la fonction de conseil pour supprimer le org-préfixe puisque la solution s'applique beaucoup plus largement? Avec des thèmes autres que ceux par défaut, l'objectif est probablement un fond blanc (qui n'est souvent pas l'arrière-plan du visage par défaut), ce (list :background "white")pourrait donc être un exemple utile.
ebpa

1
C'est l'option de l'utilisateur, votre considération est juste. Je pense que votre commentaire est suffisant pour l'utilisateur qui a trouvé ce code. :)
stardiviner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.