Чи можу я використовувати зображення у своїй модельній запальничці?


12

Моя моделіна захаращена. Чи можу я змусити його відображати зображення замість назв режимів?

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

Я спробував додати :imageвластивість дисплея до модельної запальнички іграшкового режиму мінорного режиму, але в моделіні нічого не з’явилося:

(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
Так, це цілком можливо зробити. Дивіться режим nyan. Можливо, зображення занадто велике, щоб відображатися належним чином?
wasamasa

@wasamasa, чудова точка! Чи знаєте ви, як це робить nyan-mode?
Клімент

Як замінити рядок основного режиму в рядку режиму цим значком?
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? Він чудово працює з увімкненою лінією розумного режиму, але я не можу змусити його працювати, коли я починаю з чистого Emacs.
Clément

Ага, ти маєш рацію. Я перевірю, чого ще немає.
wasamasa

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

Бріліан, велике спасибі! У списку вводиться форматник рядка режиму не застосовувати верхній рівень :propertizeза замовчуванням mode-line-format.
Clément

@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.