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)


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.