prettify-symbols-alist
構成ファイル内のelispコードの外観を改善するいくつかの記号があります。構成ファイルをElispからOrg-modeに移行していますが、きれいなシンボルを保持したいと思います。これはOrgモード8.3で実現できますか?
prettify-symbols-alist
構成ファイル内のelispコードの外観を改善するいくつかの記号があります。構成ファイルをElispからOrg-modeに移行していますが、きれいなシンボルを保持したいと思います。これはOrgモード8.3で実現できますか?
回答:
シンボルを組織ファイル全体できれいにしたい場合prettify-symbols-alist
は、バッファで定義して有効にしprettify-symbols-mode
ます。
しかし、より良い解決策は、これらのシンボルがsrcブロック内でのみ(および言語モードに従って)確実に整形されるようにすることです。ソースブロックを編集しているときですorg-edit-src-code
(srcブロックは対応するメジャーモードのバッファーにコピーされるため)。
srcブロックのフォント化がどのように機能org-src-font-lock-fontify-block
するかを調べます(ファイル内の関数org-src.el
:
そして、(enter prettify-symbols-mode
ファイル内の関数prog-mode.el
)シンボルのプレティフィケーションが'composition
プロパティに依存しorg-src-font-lock-fontify-block
ていることがわかると、'composition
プロパティをコピーするように変更するだけでよいと推測できます。
変更された関数は次のとおりです(「追加」の部分を参照)。
(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)))))
これは、での定義の後に読み込まれるようにする必要がありorg-src.el
ます。
Orgには、で有効にできるネイティブプリティシンボルモードがありますC-c C-x C-\
。