Фон вбудованого зображення за замовчуванням у режимі Org


9

Коли зображення має прозорий фон, Emacs, звичайно, це поважає.

На жаль, це може призвести до проблем із відображенням:

чорний текст на темному тлі

Чи існує спосіб відображення конкретного кольору (наприклад, білого) за зображенням? Здається, у програмі ImageMagick є якась підтримка .

Для конкретних речей, з якими я зараз працюю, може бути встановлений колір тла, однак для кожної фігури я повинен додати ще кілька рядків , що є менш ніж ідеальним. Я хотів би отримати його там, де вбудовані зображення, що відображаються в режимі org, мають фоновий колір за замовчуванням.

(Примітка. Це не специфічно для org-babel, це просто так, як я зараз отримую ці зображення)

Відповіді:


9

Після довгого копання, здається, немає вбудованої опції, щоб відрегулювати це в Org або взагалі. Система зображень не має можливості налаштувати фон за замовчуванням, і org не має способу встановити :backgroundвластивість. Однак схоже, що більшість зображень підтримують :backgroundвластивість відображення.

Цю функціональність я додав до Org, модифікуючи (читайте: скопіюйте та вставте .emacs.dзі зміною 1 рядка) 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)))

Це прекрасно працює, і його можна налаштувати за допомогою підбору кольорів, тому він відповідає всім моїм вимогам.

чорний текст світлому фоні


1
Схоже, ви доклали багато роботи, щоб зрозуміти цю річ. Чи хочете ви надіслати патч для цього або попросити його додати в режим org через електронну пошту emacs-orgmode@gnu.org?
Каушал Моді

Після того, як я проведу його кроками (переконайтесь, що це нічого не зламає), я також сподіваюся
J David Smith

Нова версія Org-режиму 8.0, здається, почала використовувати накладку для відображення вбудованих зображень. Чи є спосіб змінити колір фону за замовчуванням за замовчуванням?
stardiviner

@stardiviner саме це і робить
Дж. Девід Сміт

Я перевірив свою Org версію, вона є 8.3.4. Я перевірив org-display-inline-imagesвихідний код, не знайшов визначення вашого коду. Ось вихідний код: gist.github.com/649a7b36031d6adb4a96
stardiviner

4

Я отримав краще рішення з порадами.

(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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.