Standard-Inline-Bildhintergrund im Organisationsmodus


9

Wenn ein Bild einen transparenten Hintergrund hat, respektiert Emacs das natürlich.

Leider kann dies zu Problemen mit der Anzeige führen:

schwarzer Text auf dunklem Hintergrund

Gibt es eine Möglichkeit, eine bestimmte Farbe (z. B. Weiß) hinter dem Bild anzuzeigen? In ImageMagick-Bildern scheint dies unterstützt zu werden .

Für die spezifischen Dinge, mit denen ich gerade arbeite, kann die Hintergrundfarbe eingestellt werden. Allerdings muss ich jeder einzelnen Figur ein paar zusätzliche Zeilen hinzufügen, um dies zu tun, was nicht ideal ist. Ich möchte es dahin bringen, wo Inline-Bilder, die im Organisationsmodus angezeigt werden, standardmäßig die Hintergrundfarbe eingestellt haben.

(Hinweis: Dies ist nicht org-babel-spezifisch, es ist nur so, wie ich diese Bilder gerade bekomme.)

Antworten:


8

Nach langem Graben scheint es keine eingebaute Option zu geben, um dies in Org oder allgemein anzupassen. Das Bildsystem hat keine Möglichkeit, den Standardhintergrund anzupassen, und org hat keine Möglichkeit, die :backgroundEigenschaft festzulegen. Es sieht jedoch so aus, als würden die meisten Bilder die :backgroundAnzeigeeigenschaft unterstützen.

Ich habe diese Funktionalität durch Ändern zu Org hinzugefügt (lesen: Kopieren und Einfügen .emacs.dmit einer 1-zeiligen Änderung) org-display-inline-images.

Ich werde die Funktion hier nicht reproduzieren, da sie ziemlich lang ist. Zeile 51 der Funktion lautet:

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

Ich habe eine neue anpassbare Variable definiert org-inline-image-background, die entweder nil(transparenter Hintergrund) oder eine Farbe enthalten kann:

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

Dann habe ich es zu Zeile 51 hinzugefügt:

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

Dies funktioniert wunderbar und kann mit dem Farbwähler angepasst werden, sodass alle meine Anforderungen erfüllt werden.

schwarzer Textlichthintergrund


Sieht so aus, als hätten Sie viel Arbeit investiert, um dieses Problem zu lösen. Möchten Sie einen Patch dafür einreichen oder anfordern, dass dieser zum Organisationsmodus hinzugefügt wird, indem Sie eine E-Mail an emacs-orgmode@gnu.org senden?
Kaushal Modi

Sobald ich es auf Herz und Nieren geprüft habe (stellen Sie sicher, dass es nichts kaputt macht), hoffe ich auch.
J David Smith

Die neue Version 8.0 im Org-Modus scheint Overlay zu verwenden, um Inline-Bilder anzuzeigen. Gibt es eine Möglichkeit, die Standardhintergrundfarbe für Overlays zu ändern?
Stardiviner

@Stardiviner das ist genau das, was dies tut
J David Smith

Ich habe meine Org-Version überprüft 8.3.4. Ich habe den org-display-inline-imagesQuellcode überprüft und Ihre Codedefinition nicht gefunden. Hier ist der Quellcode: gist.github.com/649a7b36031d6adb4a96
stardiviner

3

Ich habe eine bessere Lösung mit Rat.

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

Schöne Lösung. Könnte ich vorschlagen, die Hinweisfunktion umzubenennen, um das org-Präfix zu entfernen, da die Lösung viel umfassender gilt? Bei nicht standardmäßigen Themen ist das Ziel wahrscheinlich ein weißer Hintergrund (der häufig nicht der standardmäßige Gesichtshintergrund ist). (list :background "white")Dies kann daher ein nützliches Beispiel sein.
Ebpa

1
Das ist die Option des Benutzers, Ihre Überlegung ist richtig. Ich denke, Ihr Kommentar ist genug für Benutzer, die diesen Code gefunden haben. :)
Stardiviner
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.