组织模式下的默认嵌入式图像背景


9

当图像具有透明背景时,Emacs当然会尊重这一点。

不幸的是,这可能导致显示问题:

在深色背景上的黑色文本

有没有办法在图像后面显示特定的颜色(例如白色)?在ImageMagick图像中似乎对此有所支持。

我现在正在使用的特定材料可以设置背景颜色,但是我必须在每个图形上添加额外的几行才能做到这一点,这不理想。我想将其显示到以组织模式显示的嵌入式图像具有默认设置的背景色的位置。

(注意:这不是特定于org-babel的,这恰好是我现在如何获取这些图像的方式)

Answers:


8

经过大量挖掘之后,似乎没有内置选项可以在组织或一般情况下进行调整。图像系统无法自定义默认背景,并且org无法设置:background属性。但是,看起来大多数图像都支持:backgrounddisplay属性。

我通过修改(读:复制并粘贴到.emacs.d1行中)将此功能添加到组织中org-display-inline-images

我不会在这里重现该函数,因为它很长。该函数的第51行显示:

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

我定义了一个新的可自定义变量org-inline-image-background,可以容纳nil(透明背景)或颜色:

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

然后,将其添加到第51行:

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

效果很好,可以使用颜色选择器进行自定义,因此可以满足我的所有要求。

黑色文字浅色背景


看来您已经做了很多工作来弄清这件事。您是否要为此提交补丁程序或通过发送电子邮件至emacs-orgmode@gnu.org要求将其添加到org-mode?
Kaushal Modi

一旦我按照它的步伐(确保它不会破坏任何东西),我也希望。
戴维·史密斯

新的Org-mode版本8.0似乎开始使用叠加显示内嵌图像,是否可以修改叠加默认背景颜色?
stardiviner

@stardiviner正是此功能
J David Smith

我检查了Org版本,它是8.3.4。我检查了org-display-inline-images源代码,没有找到您的代码定义。这是源代码:gist.github.com/649a7b36031d6adb4a96
stardiviner

3

我得到了更好的建议解决方案。

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

不错的解决方案。org-由于该解决方案的应用范围更广,我是否建议重命名建议函数以删除前缀?对于非默认主题,目标可能是白色背景(通常不是默认的面部背景),因此(list :background "white")可能是一个有用的示例。
ebpa

1
那是用户的选择,您的考虑是正确的。我认为您的注释对于找到此代码的用户来说已经足够。:)
stardiviner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.