TL; DR: Qual è un modo semplice per dire in modo affidabile: utilizzare Consolas come carattere predefinito, FreeMono per i caratteri non supportati da Consolas e Symbola per i caratteri non supportati da entrambi?
Poiché il mio carattere di programmazione principale non copre tutti i simboli matematici di cui ho bisogno, inizialmente ho impostato il fallback dei caratteri come mostrato di seguito:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Purtroppo questo ha cambiato anche il carattere di alcuni dei caratteri supportati dal mio carattere principale, quindi l'ho cambiato
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Se la mia comprensione è corretta, ciò dovrebbe garantire che i caratteri che Consolas non può gestire siano gestiti da FreeMono, a meno che FreeMono non li abbia, nel qual caso dovrebbero essere visualizzati usando Symbola. È anche mia comprensione che t
fa lo stesso come "fontset-default"
sopra.
Sfortunatamente, c'erano ancora casi in cui non era stato selezionato il carattere giusto; Ho scoperto che cambiando in
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)
ha funzionato meglio, ma non sempre: modificando la dimensione del carattere con
(set-face-attribute 'default nil :height some-size)
ha fatto sì che i fallback fossero ignorati, a causa della creazione di nuovi set di caratteri.
La mia soluzione attuale è fare
(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)
su ogni set di caratteri ( fontset-list
), dopo ogni modifica della dimensione del carattere.
Qual è il modo corretto di impostare il fallback dei caratteri?
Nota : a scopo di test, ecco alcuni caratteri matematici: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Riferimenti : manuale di Emacs sui set di caratteri e sulla modifica dei set di caratteri
fontset
nel modo sbagliato. Emacs non controlla effettivamente per ogni carattere che mostra se un carattere sa come visualizzarlo o meno. Sarebbe troppo intenso dal punto di vista computazionale. Quindi non esiste un meccanismo "fallback" di per sé. È necessario impostare il tipo di carattere predefinito e quindi modificare manualmente il set di caratteri predefinito in determinati intervalli per visualizzare utilizzando tipi di carattere diversi. Questa procedura è manuale o forse il pacchetto unicode
può essere d'aiuto.