Pregunta

¿Cómo se cambia la cara por defecto que Emacs usa al texto de estilo en función de cada modo?

Por ejemplo, decir que ya estoy feliz con las personalizaciones de la cara que tengo, que incluyen una fuente de ancho fijo predeterminado. Sin embargo, en un modo determinado (markdown-mode.el, por ejemplo), quiero que el tipo de letra predeterminado para ser de ancho variable.

Es fácil de conectores de estilo, etc. enlaces únicamente para rebaja en modo:. Basta con colocar el cursor sobre el texto con estilo y M-x describe-face, a continuación, haga clic en el enlace para personalizarlo

Sin embargo, la cara por defecto es la cara utiliza si no se especifica otra cara, por lo que no es específico de markdown-mode y si modificado afectará a todos los otros modos.

¿Qué magia puedo poner en el markdown-mode-hook para establecer la cara por defecto para los tampones se utiliza este modo?

¿Fue útil?

Solución

¿Qué tal algo como esto:

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

A continuación, puede personalizar la cara variable-pitch, y las otras caras de la memoria intermedia se heredan de esto en vez de la cara por defecto.

Leer la documentación para buffer-face-mode para más detalles de personalización. (BufFace también se utiliza para text-scale-increase y text-scale-decrease ... muy útil.)

Otros consejos

Tengo que dar una respuesta parcial, porque esto es demasiado complicado de averiguar sobre el terreno y que ya soné presupuesto de tiempo.

La cara es una propiedad de marco. Un marco puede mostrar varios buffers al mismo tiempo. Modo es una propiedad de amortiguamiento. Te preguntas cómo variar la cara en función de cada modo. Combinando todo esto, parece que la cuestión no puede no tiene una única respuesta totalmente correcta.

Puede aproximar la respuesta deseada si se asume que una trama dada nunca va a mostrar más de un búfer. En realidad se puede lograr eso con algo como esto, pero modificado para utilizar especial-display-expresiones regulares y un conjunto de expresiones regulares que coincidan con sus nombres de almacenamiento intermedio en modo de reducción del precio.

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

Sin embargo, esto probablemente no es lo que quiere. Su pregunta parece implicar el cambio de las propiedades de la cara de un solo marco.

Una vez más el supuesto de que un marco nunca va a mostrar más de una memoria intermedia a la vez, puede intentar interruptor-to-buffer asesoramiento. Pero eso podría no ser lo suficientemente bajo nivel y podría ser demasiado lento. (No probado)

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

Y ahora mi respuesta real (incompleta) ...

Una mejor, aunque más complicado, enfoque daría instrucciones rebaja en modo de utilizar una nueva cara para todas las regiones que no están ya asignados una de las caras incorporadas. Puede crear una nueva cara con copia de la cara y darle propiedades interesantes con juego-cara- *.

Modificar font-lock-defaults de markdown en modo de anular la fuente-lock-fontify-region-función predeterminada como se describe en el bloque de comentario cerca de la línea 946 de font-lock.el que comienza, "funciones resaltado". Probablemente se puede utilizar una fuente-lock-default-fontify-región muy ligeramente modificada que hace sólo un paso adicional inmediatamente después de que hace:

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

El paso adicional analiza la región similar a lo que font-lock-fontify-sintácticamente-región hace, rompiendo la región en subregiones "interesantes". Pero esta vez se encuentre sub-regiones que tienen la cara predeterminado y se puso de texto propiedad de esas subregiones a la nueva imagen que ha creado anteriormente.

En todo esto se siente como tiene que ser sólo un par de líneas de elisp en el fichero .emacs, además de hacer una copia de font-lock-default-fontify-región que tiene sólo un diff menor del original (llamar a uno nuevo función), además de hacer una copia de font-lock-fontify-sintácticamente-región y modificarlo para hacer su hacer una oferta (la parte más difícil).

En realidad, si "después de" asesorar font-lock-fontify-sintácticamente-región entonces es probable que ni siquiera necesita modificar font-lock-defaults o font-lock-default-fontify-región.

El variable-pitch-mode es impresionante. Me enteré de que a través de este hilo. Pero puede ser aún más impresionante:

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

Sólo tiene que añadir el modo de lo que quiera fuentes sans-serif en la lista.

En realidad es sencillo incluso para emacs versión 22.3.1 ...

Solo trata de lo siguiente:

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

Hay un bloque de código que me parece muy conveniente, desde EmacsWiki. La ventaja de esto es que se puede establecer no sólo la cara de la fuente, pero convenientemente configurar :height, etc, así :width

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

En combinación con el paquete load-theme-buffer-local, incluso se puede especificar la tonalidad para el búfer fácilmente:

(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)))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top