Sfondo immagine incorporata predefinito in modalità organizzazione


9

Quando un'immagine ha uno sfondo trasparente, Emacs ovviamente lo rispetta.

Sfortunatamente, questo può portare a problemi con la visualizzazione:

testo nero su sfondo scuro

Esiste un modo per visualizzare un colore specifico (ad es. Bianco) dietro l'immagine? Sembra esserci del supporto nelle immagini di ImageMagick .

Le cose specifiche con cui sto lavorando in questo momento possono avere il set di colori di sfondo, tuttavia devo aggiungere qualche riga in più a ogni singola figura per farlo, il che è tutt'altro che ideale. Vorrei portarlo dove le immagini in linea visualizzate in modalità org hanno il colore di sfondo impostato per impostazione predefinita.

(Nota: questo non è specifico per org-babel, capita solo come sto ottenendo queste immagini in questo momento)

Risposte:


8

Dopo aver scavato molto, non sembra esserci un'opzione integrata per regolarla in Org o in generale. Il sistema di immagini non ha alcun modo per personalizzare lo sfondo predefinito e l'organizzazione non ha un modo per impostare la :backgroundproprietà. Tuttavia, sembra che la maggior parte delle immagini supporti la :backgroundproprietà display.

Ho aggiunto questa funzionalità a Org modificando (leggi: copia e incolla .emacs.dcon un cambio di 1 riga) org-display-inline-images.

Non riprodurrò qui la funzione, perché è piuttosto lunga. La riga 51 della funzione riporta:

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

Ho definito una nuova variabile personalizzabile org-inline-image-background, che può contenere nil(sfondo trasparente) o un colore:

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

Quindi l'ho aggiunto alla linea 51:

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

Funziona magnificamente e può essere personalizzato utilizzando il selettore colore, quindi soddisfa tutti i miei requisiti.

sfondo chiaro testo nero


Sembra che tu abbia lavorato molto per capire questa cosa. Desideri inviare una patch per questo o richiedere che venga aggiunto alla modalità organizzazione inviando un'email a emacs-orgmode@gnu.org?
Kaushal Modi,

Una volta messo alla prova (assicurati che non rompa nulla) lo spero anch'io.
J David Smith,

La nuova modalità Org versione 8.0 sembra iniziare a utilizzare l'overlay per visualizzare immagini in linea, c'è un modo per modificare il colore di sfondo predefinito dell'overlay?
Stardiviner,

@stardiviner questo è esattamente ciò che fa
J David Smith

Ho controllato la mia versione dell'organizzazione, lo è 8.3.4. Ho controllato il org-display-inline-imagescodice sorgente, non ho trovato la definizione del codice. Ecco il codice sorgente: gist.github.com/649a7b36031d6adb4a96
stardiviner

3

Ho ottenuto una soluzione migliore con un consiglio.

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

Bella soluzione. Potrei suggerire di rinominare la funzione di avviso per rimuovere il org-prefisso poiché la soluzione si applica in modo molto più ampio? Con temi non predefiniti, l'obiettivo è probabilmente uno sfondo bianco (che spesso non è lo sfondo predefinito), quindi (list :background "white")potrebbe essere un esempio utile.
ebpa,

1
Questa è l'opzione dell'utente, la tua considerazione è giusta. Penso che il tuo commento sia sufficiente per l'utente che ha trovato questo codice. :)
stardiviner
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.