Domyślne tło obrazu wbudowanego w trybie organizacji

9

Gdy obraz ma przezroczyste tło, Emacs oczywiście to szanuje.

Niestety może to prowadzić do problemów z wyświetlaniem:

czarny tekst na ciemnym tle

Czy istnieje sposób wyświetlenia określonego koloru (np. Białego) za obrazem? Wydaje się, że jest to obsługiwane w obrazach ImageMagick .

Specyficzne rzeczy, nad którymi teraz pracuję, mogą mieć ustawiony kolor tła, jednak muszę dodać kilka dodatkowych linii do każdej pojedynczej figury, aby to zrobić, co jest niezbyt idealne. Chciałbym dostać się tam, gdzie obrazy wbudowane wyświetlane w trybie org mają domyślnie ustawiony kolor tła.

(Uwaga: nie jest to specyficzne dla org-babel, tak się składa, że ​​właśnie teraz otrzymuję te obrazy)

J David Smith
źródło

Odpowiedzi:

9

Po wielu kopaniach nie wydaje się, aby istniała wbudowana opcja dostosowania tego w Org lub ogólnie. System obrazów nie ma sposobu na dostosowanie domyślnego tła, a organizacja nie ma sposobu na ustawienie tej :backgroundwłaściwości. Wygląda jednak na to, że większość obrazów obsługuje :backgroundwłaściwość display.

Dodałem tę funkcjonalność do organizacji, modyfikując (czytaj: skopiuj i wklej do zmiany .emacs.dz 1-wierszową zmianą) org-display-inline-images.

Nie odtworzę tutaj funkcji, ponieważ jest ona dość długa. Wiersz 51 funkcji brzmi:

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

Zdefiniowałem nową konfigurowalną zmienną org-inline-image-background, która może zawierać nil(przezroczyste tło) lub kolor:

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

Następnie dodałem go do wiersza 51:

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

Działa to pięknie i można go dostosować za pomocą próbnika kolorów, dzięki czemu spełnia wszystkie moje wymagania.

jasnym tle czarny tekst

J David Smith
źródło
1
Wygląda na to, że włożyłeś dużo pracy, aby to zrozumieć. Czy chcesz przesłać łatkę w tym celu lub poprosić o dodanie jej do trybu org, wysyłając wiadomość e-mail na adres [email protected]?
Kaushal Modi
Mam nadzieję, że kiedy już to sprawdzę (upewnij się, że niczego nie złamie).
J David Smith
Wydaje się, że nowa wersja 8.0 w trybie Org używa nakładki do wyświetlania obrazów wbudowanych. Czy istnieje sposób na zmodyfikowanie domyślnego koloru tła nakładki?
stardiviner
@stardiviner właśnie to robi
J David Smith
Tak, sprawdziłem swoją wersję Orga 8.3.4. Sprawdziłem org-display-inline-imageskod źródłowy, nie znalazłem twojej definicji kodu. Oto kod źródłowy: gist.github.com/649a7b36031d6adb4a96
stardiviner
4

Mam lepsze rozwiązanie z radą.

(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
źródło
Niezłe rozwiązanie. Czy mogę zasugerować zmianę nazwy funkcji porady, aby usunąć org-prefiks, ponieważ rozwiązanie ma znacznie szerszy zakres? W przypadku motywów innych niż domyślne celem jest prawdopodobnie białe tło (które często nie jest domyślnym tłem twarzy), więc (list :background "white")może być przydatnym przykładem.
ebpa
1
To jest opcja użytkownika, którą uważasz za słuszną. Myślę, że twój komentarz wystarczy dla użytkownika, który znalazł ten kod. :)
stardiviner