คำตอบนี้ได้รับแรงบันดาลใจหลังจากคำแนะนำโดยรวมในรายการ GNU emacs-org-modeเพื่อใช้org-entity
( C-h i g
(org) Special symbols
) \ast{}
แทนอักขระเว้นวรรคความกว้างเป็นศูนย์ (ซึ่งฉันแนะนำในคำตอบอื่นของฉันที่นี่ )
ด้านล่างนี้เป็นโซลูชันทั่วไปที่ผู้ใช้ไม่จำเป็นต้องจดจำเอนทิตีองค์กรสำหรับสัญลักษณ์ต่างๆ มันแทรกองค์กรนิติบุคคล (ถ้ามี) เมื่อผู้ใช้ทำC-u SYMBOL
; ทำงานสำหรับC-u *
, C-u /
, C-u =
ฯลฯ
(defun modi/org-entity-get-name (char)
"Return the entity name for CHAR. For example, return \"ast\" for *."
(let ((ll (append org-entities-user
org-entities))
e name utf8)
(catch 'break
(while ll
(setq e (pop ll))
(when (not (stringp e))
(setq utf8 (nth 6 e))
(when (string= char utf8)
(setq name (car e))
(throw 'break name)))))))
(defun modi/org-insert-org-entity-maybe (&rest args)
"When the universal prefix C-u is used before entering any character,
insert the character's `org-entity' name if available.
If C-u prefix is not used and if `org-entity' name is not available, the
returned value `entity-name' will be nil."
;; It would be fine to use just (this-command-keys) instead of
;; (substring (this-command-keys) -1) below in emacs 25+.
;; But if the user pressed "C-u *", then
;; - in emacs 24.5, (this-command-keys) would return "^U*", and
;; - in emacs 25.x, (this-command-keys) would return "*".
;; But in both versions, (substring (this-command-keys) -1) will return
;; "*", which is what we want.
;; http://thread.gmane.org/gmane.emacs.orgmode/106974/focus=106996
(let ((pressed-key (substring (this-command-keys) -1))
entity-name)
(when (and (listp args) (eq 4 (car args)))
(setq entity-name (modi/org-entity-get-name pressed-key))
(when entity-name
(setq entity-name (concat "\\" entity-name "{}"))
(insert entity-name)
(message (concat "Inserted `org-entity' "
(propertize entity-name
'face 'font-lock-function-name-face)
" for the symbol "
(propertize pressed-key
'face 'font-lock-function-name-face)
"."))))
entity-name))
;; Run `org-self-insert-command' only if `modi/org-insert-org-entity-maybe'
;; returns nil.
(advice-add 'org-self-insert-command :before-until #'modi/org-insert-org-entity-maybe)
ดังนั้นเมื่อผู้ใช้พิมพ์C-u *
, \ast{}
ถูกแทรกและด้านล่างข้อความจะปรากฏขึ้นในพื้นที่สะท้อน,
แทรก 'org-entity' \ ast {} สำหรับสัญลักษณ์ *
หากorg-pretty-entities
มีการตั้งค่าt
ข้างต้นแทรก\ast{}
จะแสดง*
เป็น
หากorg-entity
ไม่มีอยู่สำหรับอักขระXและหากผู้ใช้ทำC-u
X , Xจะถูกแทรกเพียง 4 ครั้ง (ตามC-u
ปกติจะทำ)
\ast{}shrug\ast{}
หรือ\star{}shrug\star{}
คล้ายกันโดยใช้ HTML คุณสามารถใช้การเข้ารหัสเอนทิตี:a;
หรือถ้าเพิ่มช่องว่างก่อนหรือหลังเครื่องหมายดอกจันเป็นตัวเลือก