Si desea que los símbolos se prettifiquen en todo el archivo de organización, solo defínalo prettify-symbols-alist
en el búfer y habilítelo prettify-symbols-mode
.
Pero una mejor solución aseguraría que estos símbolos se prettifiquen solo en los bloques src (y de acuerdo con el modo de lenguaje). Tenga en cuenta que están al editar el bloque de origen org-edit-src-code
(ya que el bloque src se copia en un búfer en el modo principal correspondiente).
Mirando cómo funciona la fuente de bloques src (función org-src-font-lock-fontify-block
en el archivo org-src.el
:
- extraer bloque como una cadena
- insertarlo en un búfer dedicado
- establecer el modo principal de idioma
- llamar a font-lock-fontify-buffer
- Copie las propiedades de la cara del búfer al búfer de organización
- marcar texto en el búfer de la organización como font-lock-fontified
Y viendo (función enter prettify-symbols-mode
en el archivo prog-mode.el
) que la prettificación de símbolos depende de las 'composition
propiedades, se puede deducir que solo necesitamos cambiar org-src-font-lock-fontify-block
para que también copie las 'composition
propiedades.
Aquí está la función modificada (vea la parte marcada 'Adición'):
(defun org-src-font-lock-fontify-block (lang start end)
"Fontify code block.
This function is called by emacs automatic fontification, as long
as `org-src-fontify-natively' is non-nil."
(let ((lang-mode (org-src--get-lang-mode lang)))
(when (fboundp lang-mode)
(let ((string (buffer-substring-no-properties start end))
(modified (buffer-modified-p))
(org-buffer (current-buffer)) pos next)
(remove-text-properties start end '(face nil))
(with-current-buffer
(get-buffer-create
(concat " org-src-fontification:" (symbol-name lang-mode)))
(delete-region (point-min) (point-max))
(insert string " ") ;; so there's a final property change
(unless (eq major-mode lang-mode) (funcall lang-mode))
;; Avoid `font-lock-ensure', which does not display fonts in
;; source block.
(font-lock-fontify-buffer)
(setq pos (point-min))
(while (setq next (next-single-property-change pos 'face))
(put-text-property
(+ start (1- pos)) (1- (+ start next)) 'face
(get-text-property pos 'face) org-buffer)
(setq pos next))
;; Addition: also copy 'composition info for prettified symbols
(setq pos (point-min))
(while (setq next (next-single-property-change pos 'composition))
(put-text-property
(+ start (1- pos)) (1- (+ start next)) 'composition
(get-text-property pos 'composition) org-buffer)
(setq pos next))
;; End addition
)
(add-text-properties
start end
'(font-lock-fontified t fontified t font-lock-multiline t))
(set-buffer-modified-p modified)))))
Debe asegurarse de que se cargue después de la definición en org-src.el
.