이 답변은에 공동 제안 후 영감을 이맥스 조직 모드 GNU 목록 사용에 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{}
이와 유사한 방법으로 엔티티 인코딩을 사용할 수 있습니다.a;
또는 별표 앞뒤에 공백을 추가하는 것이 옵션 인 경우에도 작동합니다.