Nếu bạn muốn các ký hiệu được thêm vào trong toàn bộ tệp org, chỉ cần xác định prettify-symbols-alist
trong bộ đệm và bật prettify-symbols-mode
.
Nhưng một giải pháp tốt hơn sẽ đảm bảo rằng các ký hiệu này chỉ được bổ sung trong các khối src (và theo chế độ ngôn ngữ). Lưu ý rằng chúng là khi chỉnh sửa khối nguồn thông qua org-edit-src-code
(vì khối src được sao chép trong bộ đệm ở chế độ chính tương ứng).
Nhìn vào cách hoạt động của phông chữ khối src (chức năng org-src-font-lock-fontify-block
trong tệp org-src.el
:
- trích xuất khối dưới dạng chuỗi
- chèn nó vào một bộ đệm chuyên dụng
- đặt chế độ chính ngôn ngữ
- gọi font-lock-fontify-buffer
- sao chép 'thuộc tính khuôn mặt từ bộ đệm sang bộ đệm org
- đánh dấu văn bản trong bộ đệm org là phông chữ khóa
Và nhìn thấy (chức năng enter prettify-symbols-mode
trong tập tin prog-mode.el
) rằng sự hoàn thiện biểu tượng phụ thuộc vào 'composition
các thuộc tính, người ta có thể suy luận rằng chúng ta chỉ cần thay đổi org-src-font-lock-fontify-block
để làm cho nó sao chép 'composition
các thuộc tính là tốt.
Đây là chức năng được sửa đổi (xem phần 'Bổ sung' được đánh dấu):
(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)))))
Bạn phải đảm bảo điều này được tải sau khi định nghĩa trong org-src.el
.