Posso usare un'immagine nel mio accendino a modeline?


12

La mia modeline è ingombra. Posso far visualizzare le immagini anziché i nomi delle modalità?

Potrei usare Unicode Emoji (come 🐍 per Python o 🐓 per Coq), ma alcune macchine su cui uso la mia configurazione di Emacs non hanno i caratteri giusti preinstallati (idealmente, vorrei anche riutilizzare questa tecnica in un modalità che sto scrivendo, quindi non posso aspettarmi che gli utenti abbiano la giusta configurazione dei caratteri).

Ho provato ad aggiungere una :imageproprietà di visualizzazione all'accendino da modina di una modalità secondaria giocattolo, ma non è apparso nulla nella modellino:

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

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


C'è un modo per portare i caratteri nella tua configurazione?
PythonNut,

2
Sì, è assolutamente possibile farlo. Vedi modalità nyan. Potrebbe essere che l'immagine sia troppo grande per essere visualizzata correttamente?
Wasamasa,

@wasamasa, ottimo punto! Sai come funziona la modalità nyan?
Clément,

Come sostituire la stringa della modalità principale nella riga della modalità con questa icona?
stardiviner,

Risposte:


11

La riga della modalità viene visualizzata da un elenco di segmenti, ognuno dei quali viene fornito con le proprie regole speciali. Vedere Dati linea modalità per i dettagli. La sezione dei simboli contiene un suggerimento fondamentale per far funzionare il tuo codice:

A meno che SYMBOL non sia contrassegnato come "rischioso" (ovvero, abbia una proprietà "variabile locale locale" non "nulla"), tutte le proprietà di testo specificate nel valore di SIMBOLO vengono ignorate. Ciò include le proprietà del testo delle stringhe nel valore di SIMBOLO, nonché tutte le forme ": eval" e ": appropriate" in essa contenute. (Il motivo di ciò è la sicurezza: le variabili non rischiose possono essere impostate automaticamente dalle variabili dei file senza richiedere all'utente.)

Ho il sospetto che Nyan-Mode lo stia facendo in un modo tutt'altro che ideale , quindi ecco il mio esempio minimo:

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

Il motivo per cui uso un elenco di uno spazio e un'immagine è perché è una convenzione avviare un accendino con uno spazio per separarlo da quelli precedenti.


In realtà, ci hai provato emacs -Q? Funziona alla grande con la modalità smart-line abilitata, ma non riesco a farlo funzionare quando inizio da un Emacs nudo.
Clément,

Eh, hai ragione. Controllerò cos'altro manca.
Wasamasa,

OK, l'ho capito. Apparentemente quel pacchetto usa solo stringhe all'interno di una stringa di formato mentre il vero affare percorre individualmente i segmenti della linea di modalità e riconosce solo le stringhe che sono corrette dall'inizio alla fine, quindi ho scelto un elenco di due stringhe per avere un separatore.
Wasamasa,

Brillian, molte grazie! L'elenco inganna il formattatore della riga di modalità per non applicare il livello superiore :propertizedel valore predefinito mode-line-format.
Clément,

@wasamasa Wow, è carino. Ora quando passi il mouse sull'immagine, c'è un menu generico; come si inseriscono le voci? Anche una semplice stringa come messaggio al passaggio del mouse andrebbe bene.
yPhil

4

Buona domanda.

Potresti provare a usare qualcosa di simile come l'accendino:, (concat " " (propertize " " 'display (create-image img-file)))dov'è img-fileil nome del tuo file immagine. (Il primo carattere spaziale serve solo a separare questo accendino dal precedente.)

Bene, ho appena provato, usando questo codice, ma non ha funzionato per me. Potresti provare a giocherellare un po 'di più con esso. Non so se è possibile.

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

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

L'accendino si presenta come un normale carattere spaziale: la displayproprietà non sembra essere rispettata.

Se non ottieni una buona risposta a questa domanda, considera di presentare una richiesta di miglioramento di Emacs, utilizzando M-x report-emacs-bug.

Una cosa che puoi certamente fare è usare uno o due caratteri Unicode nella stringa della riga di modalità. E puoi usare caratteri che sono, in effetti, grafici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.