Могу ли я использовать изображение в моей модели светлее?


12

Моя моделин загроможден. Можно ли заставить его отображать картинки вместо названий режимов?

Я мог бы использовать Unicode Emoji (например, 🐍 для Python или 🐓 для Coq), но на некоторых машинах, на которых я использую мою конфигурацию Emacs, предустановленные правильные шрифты не установлены (в идеале, я также хотел бы использовать эту технику в режим, который я пишу, поэтому я не могу ожидать от пользователей правильной настройки шрифта).

Я попытался добавить :imageсвойство display к прикуривателю модельного ряда игрушечного второстепенного режима, но в моделине ничего не появилось:

(define-minor-mode my/test-mode
  "Test mode."
  :lighter (propertize " 🐓" 'display '(image :type imagemagick
                                             :file "/home/clement/.emacs.d/rooster.png")))

TWEmoji петух (https://raw.githubusercontent.com/twitter/twemoji/gh-pages/72x72/1f413.png)


Есть ли способ перенести шрифты в ваш конфиг?
PythonNut

2
Да, это вполне возможно сделать. Смотрите нян-режим. Может быть, изображение слишком велико для правильного отображения?
Васамаса

@ wasamasa, Отличная мысль! Вы знаете, как это работает в nyan-mode?
Clément

Как заменить строку основного режима в строке состояния этим значком?
stardiviner

Ответы:


11

Строка режима отображается из списка сегментов, каждый из которых имеет свои особые правила. См. Данные строки режима для подробностей. Секция символов содержит важный совет, чтобы ваш код работал:

Если SYMBOL не помечен как «рискованный» (т. Е. Он имеет свойство не «nil» «рискованная локальная переменная»), все текстовые свойства, указанные в значении SYMBOL, игнорируются. Сюда входят текстовые свойства строк в значении SYMBOL, а также все формы ': eval' и ': Propertize' в нем. (Причина этого заключается в безопасности: переменные без риска могут быть установлены автоматически из файловых переменных без запроса пользователя.)

Я подозреваю, что nyan-mode делает это не идеально , поэтому вот мой минимальный пример:

(defvar my-nyan-mode-lighter
  (list " " (propertize ":3" 'display
                        `(image :type imagemagick
                                :file ,(expand-file-name "~/nyan.png")))))
(put 'my-nyan-mode-lighter 'risky-local-variable t)

(define-minor-mode my-nyan-mode
  "Nyan mode"
  :lighter my-nyan-mode-lighter)

(my-nyan-mode)

Причина, по которой я использую список пробелов и изображений, заключается в том, что условно начинать зажигалку с пробела, чтобы отделить ее от предыдущих.


На самом деле, вы пробовали это в emacs -Q? Он прекрасно работает с включенной функцией smart-mode-line, но я не могу заставить ее работать, когда начинаю с чистого Emacs.
Климент

Да, ты прав. Я проверю, что еще не хватает.
Васамаса

Хорошо, я понял это. Очевидно, что этот пакет просто использует строки внутри строки формата, в то время как реальная сделка проходит по сегментам строки режима по отдельности и распознает только те строки, которые были настроены от начала до конца, поэтому я выбрал список из двух строк, чтобы иметь разделитель.
васамаса

Бриллиан, большое спасибо! Список обманывает форматировщик строки режима так, что он не применяет верхний уровень :propertizeпо умолчанию mode-line-format.
Климент

@ Wasamasa Вау, это мило. Теперь, когда вы наводите курсор мыши на изображение, появляется общее меню; как можно было бы в него вписать записи? Простая строка как сообщение при наведении мышки тоже подойдет.
yPhil

4

Хороший вопрос.

Вы можете попробовать использовать что-то вроде этого в качестве более легкого:, (concat " " (propertize " " 'display (create-image img-file)))где img-fileимя вашего файла изображения. (Первый космический символ должен просто отделить эту зажигалку от предыдущего.)

Ну, я просто попробовал, используя этот код, но он не работал для меня. Вы можете попробовать немного поиграться с этим. Не знаю, возможно ли это.

(defvar my-lighter-string
        (concat " " (propertize " " 'display (create-image "/path/to/an/image/file.png"))))

(define-minor-mode foo "..." nil my-lighter-string)

Зажигалка просто показывает, как обычный космический символ - displayсобственность, кажется, не соблюдается.

Если вы не получили хорошего ответа на этот вопрос, рассмотрите возможность подачи запроса на улучшение Emacs, используя M-x report-emacs-bug.

Конечно, вы можете использовать один или два символа Unicode в строке строки режима. И вы можете использовать символы, которые, по сути, являются графикой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.