Czy mogę użyć obrazu w mojej zapalniczce modeline?

12

Moja modelka jest zagracona. Czy mogę ustawić wyświetlanie obrazów zamiast nazw trybów?

Mógłbym użyć Emoji unicode (np. 🐍 dla Pythona lub 🐓 dla Coq), ale niektóre maszyny, na których używam mojej konfiguracji Emacs, nie mają wstępnie zainstalowanych odpowiednich czcionek (idealnie, chciałbym również użyć tej techniki w tryb, który piszę, więc nie mogę oczekiwać, że użytkownicy będą mieli odpowiednią konfigurację czcionek).

Próbowałem dodać :imagewłaściwość display do zapalniczki modeline w trybie małej zabawki, ale nic nie pojawiło się w modeline:

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

TWEmoji rooster (https://raw.githubusercontent.com/twitter/ wymagoji/gh-pages/72x72/1f413.png)

Łaskawy
źródło
Czy istnieje sposób na wprowadzenie czcionek do konfiguracji?
PythonNut,
2
Tak, jest to całkowicie możliwe. Zobacz tryb nyan. Czy to możliwe, że obraz jest zbyt duży, aby wyświetlać się poprawnie?
wasamasa,
@wasamasa, Świetny punkt! Czy wiesz, jak to działa w trybie nyan?
Clément,
Jak zamienić ciąg znaków trybu głównego w trybie linii za pomocą tej ikony?
stardiviner

Odpowiedzi:

11

Linia trybu jest renderowana z listy segmentów, z których każdy ma własne reguły specjalne. Aby uzyskać szczegółowe informacje, zobacz Dane linii trybu . Sekcja symboli zawiera kluczową wskazówkę, aby Twój kod działał:

O ile SYMBOL nie jest oznaczony jako „ryzykowny” (tj. Ma właściwość inną niż „zero” „ryzykowna-lokalna zmienna”), wszystkie właściwości tekstu określone w wartości SYMBOL są ignorowane. Obejmuje to właściwości tekstowe ciągów znaków w wartości SYMBOL, a także wszystkie zawarte w nim formy „: eval” i „: propertize”. (Przyczyną tego jest bezpieczeństwo: zmienne nie ryzykowne można ustawiać automatycznie na podstawie zmiennych plików bez monitowania użytkownika.)

Podejrzewam, że tryb nyan robi to w mniej niż idealny sposób , więc oto mój minimalny przykład:

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

Powodem, dla którego używam listy spacji i obrazu jest to, że konwencja polega na zapalaniu z miejscem do oddzielania go od poprzednich.

wasamasa
źródło
Właściwie to próbowałeś tego emacs -Q? Działa świetnie z włączoną linią trybu inteligentnego, ale nie mogę sprawić, aby działał, gdy zaczynam od gołego Emacsa.
Clément
Masz rację. Sprawdzę, czego jeszcze brakuje.
wasamasa
OK, wymyśliłem to. Najwyraźniej ten pakiet po prostu używa ciągów wewnątrz ciągu formatu, podczas gdy prawdziwa transakcja przechodzi indywidualnie przez segmenty linii trybu i rozpoznaje tylko ciągi, które są obsługiwane od początku do końca, więc wybrałem listę dwóch ciągów, które mają separator.
wasamasa
Brillian, wielkie dzięki! Lista powoduje, że formater linii trybu nie stosuje najwyższego poziomu :propertizewartości domyślnej mode-line-format.
Clément
@wasamasa Wow, to miłe. Teraz, gdy najedziesz myszką na obraz, pojawi się ogólne menu; jak wstawić w to wpisy? Wystarczy zwykły ciąg znaków jako wiadomość po najechaniu myszą.
yPhil
4

Dobre pytanie.

Możesz spróbować użyć czegoś takiego jako zapalniczki:, (concat " " (propertize " " 'display (create-image img-file)))gdzie img-filejest nazwa pliku obrazu. (Pierwszym znakiem spacji jest tylko oddzielenie tej zapalniczki od poprzedniej.)

Właśnie próbowałem, używając tego kodu, ale to nie działało dla mnie. Możesz spróbować trochę z tym pogrzebać. Nie wiem, czy to możliwe.

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

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

Zapalniczka pokazuje się po prostu jako zwykły znak kosmiczny - displaywłaściwość nie wydaje się być szanowana.

Jeśli nie otrzymasz dobrej odpowiedzi na to pytanie, rozważ złożenie prośby o ulepszenie Emacsa, używając M-x report-emacs-bug.

Jedną rzeczą, którą na pewno możesz zrobić, to użyć jednego lub dwóch znaków Unicode w ciągu wiersza trybu. I możesz używać znaków, które są w rzeczywistości grafiką.

Rysował
źródło