Domanda

Come si fa a cambiare il volto di default che Emacs utilizza per lo stile del testo su una base per-mode?

Ad esempio, dire che sono già felice con le personalizzazioni per il viso che ho, che includono un carattere a larghezza fissa predefinita. Tuttavia, in una particolare modalità (markdown-mode.el, per esempio), voglio che il carattere predefinito per essere larghezza variabile.

E 'facile da intestazioni di stile, link ecc unicamente per Markdown-mode:. È sufficiente posizionare il cursore sul testo formattato e M-x describe-face, quindi fare clic sul collegamento per personalizzarlo

Tuttavia, la faccia di default è il volto utilizzato se non è specificato alcun altra faccia, quindi non è specifico per Markdown-mode e se modificato interesserà tutti gli altri modi.

Che magia posso mettere in markdown-mode-hook per impostare il volto di default per i buffer si utilizza questa modalità?

È stato utile?

Soluzione

Che ne dite di qualcosa di simile a questo:

(add-hook 'markdown-mode-hook (lambda () (variable-pitch-mode t))

È quindi possibile personalizzare il volto variable-pitch, e le altre facce nel buffer sarà ereditare da questo al posto del volto di default.

Leggi la documentazione per buffer-face-mode per maggiori dettagli di personalizzazione. (BufFace viene utilizzato anche per text-scale-increase e text-scale-decrease ... molto utile.)

Altri suggerimenti

Devo dare una risposta parziale, perché questo è troppo complicato da capire sul posto e ho già fatto esplodere il mio tempo di bilancio.

Face è una struttura telaio. Una cornice può visualizzare buffer multipli contemporaneamente. Modalità è una proprietà buffer. Mi chiedi come variare la faccia su una base per-mode. La combinazione di tutto questo, sembra che la questione non può non avere una sola risposta completamente corretta.

È possibile approssimare la risposta desiderata, se si assume che un determinato lasso non potrà mai visualizzare più di un buffer. Si può effettivamente realizzare questo con qualcosa di simile, ma modificato per utilizzare speciali-display-espressioni regolari e una serie di espressioni regolari che corrispondono alla vostra nomi tampone Markdown-mode.

(append special-display-buffer-names
        '("*VC-log*"
          "*Help*"
          ("*Completions*" 
           (height . 25)
           (font . "8x13"))))

Tuttavia, questo non è probabilmente quello che si vuole. La tua domanda sembra implicare la modifica delle proprietà del viso di un singolo fotogramma.

Anche supponendo che un frame non visualizzerà mai più di un buffer alla volta, si può provare switch-to-buffer consulenza. Ma che potrebbe non essere sufficientemente basso livello e potrebbe essere troppo lento. (Non testato)

(defadvice switch-to-buffer (after switch-to-buffer activate compile)
  "change the frame's default face after switch-to-buffer"
  (doSomethingToChangePropertiesOfDefaultFace))

E ora per il mio attuale (incompleta) risposta ...

Una migliore, anche se più complicato, approccio istruire Markdown modalità per utilizzare un nuovo volto per tutte le regioni che non sono già assegnati uno dei volti built-in. È possibile creare un nuovo volto con copia-faccia e dare interessanti proprietà con il set-faccia- *.

Modifica font-lock-defaults del mark-down-mode per ignorare il font-lock-fontify-regione-funzione predefinita, come descritto nel blocco commento vicino alla linea 946 di font-lock.el che inizia, "funzioni Fontification". Probabilmente si può utilizzare un font-lock-default-fontify-regione molto leggermente modificata che fa proprio un passo in più subito dopo lo fa:

  (unless font-lock-keywords-only
    (font-lock-fontify-syntactically-region beg end loudly))

Il passo supplementare analizza la regione simile a quello font-lock-fontify-sintatticamente regione fa, rompendo la regione in "interessanti" sub-regioni. Ma questa volta si trovano sotto-regioni che hanno il volto di default e si mise-text-proprietà quei sotto-regioni per il nuovo volto che si è creato in precedenza.

In tutto questo si sente come dovrebbe essere solo un paio di righe di elisp nel vostro file .emacs, oltre a fare una copia del font-lock-default-fontify-regione che ha solo un diff minore da quello originale (chiamare uno nuovo la funzione), oltre a fare una copia del font-lock-fontify-sintatticamente-regione e modificarlo per fare la vostra offerta (la parte più difficile).

In realtà, se si "dopo" consiglio font-lock-fontify-sintatticamente-regione, allora probabilmente non è nemmeno necessario modificare font-lock-defaults o font-lock-default-fontify-regione.

Il variable-pitch-mode è impressionante. Ho scoperto attraverso questo thread. Ma può essere reso ancora più impressionante:

(dolist (hook '(erc-mode-hook
        LaTeX-mode-hook
        org-mode-hook
        edit-server-start-hook
        markdown-mode-hook))
  (add-hook hook (lambda () (variable-pitch-mode t))))

Basta aggiungere qualunque modalità che si desidera font sans-serif nella all'elenco.

In realtà è semplice anche per emacs versione 22.3.1 ...

Basta provare il seguente:

(progn 
  (set-buffer "your buffer name here")
  (overlay-put (make-overlay 0 (buffer-size)) 'face 'your-face))

C'è un blocco di codice che trovo molto comodo, da EmacsWiki. Il vantaggio di questo è che è possibile impostare il viso non solo carattere, ma comodamente configurare :height, :width ecc così

;; Use variable width font faces in current buffer
(defun my-buffer-face-mode-variable ()
  "Set font to a variable width (proportional) fonts in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
  (buffer-face-mode))
;; Use monospaced font faces in current buffer
(defun my-buffer-face-mode-fixed ()
  "Sets a fixed width (monospace) font in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "Consolas" :height 100))
  (buffer-face-mode))
;; Set default font faces for Info and ERC modes
(add-hook 'erc-mode-hook 'my-buffer-face-mode-variable)
(add-hook 'Info-mode-hook 'my-buffer-face-mode-variable)

In combinazione con il pacchetto load-theme-buffer-local, si può anche specificare il tema del colore per il buffer facilmente:

(defun my-buffer-face-mode-variable ()
  "Set font to a variable width (proportional) fonts in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
  (buffer-face-mode)
  (load-theme-buffer-local 'leuven (current-buffer)))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top