Как мне сделать так, чтобы emacs отображал математически комбинированные символы в режиме font-lock?

Я пытаюсь заставить emacs правильно отображать математически комбинированные символы, такие как диарез, перемычка и т. Д., В режиме font-lock. Цель состоит в том, чтобы иметь возможность написать что-то математическое, например x_dot, и отобразить его как "ẋ" или x_bar как "x̄".

Это то, что я имею до сих пор, и это в основном работает.

 (font-lock-add-keywords 
  nil 
  `(("\\<\\(\\w\\)\\(_dot\\)\\>" 
     (0 (progn (compose-region (match-beginning 1) (match-end 2) 
                  (concatenate 'string (match-string 1) " ̇" )) nil)))))

НО: я вижу визуального артефакта персонажа перед сочиненным персонажем. Проверьте это, написав "x_dot" или что-то подобное в буфере * scratch * после выполнения вышеупомянутого.

Этот артефакт приходит и уходит как призрак. Такое поведение не возникает при составлении обычных символов, таких как "o" и "-", как в следующем примере.

 (font-lock-add-keywords 
  nil 
  `(("\\<\\(\\w\\)\\(_dash\\)\\>" 
     (0 (progn (compose-region (match-beginning 1) (match-end 2) 
                  (concatenate 'string (match-string 1) "-" )) nil)))))

А затем набрав где-нибудь "x_dash".

Что здесь происходит?

1 ответ

Решение

Как бы то ни было, ваш первый пример прекрасно работает без артефактов в моем ультрасовременном Emacs на OS X. Возможно, вы видите причуду рендеринга, специфичную для пользовательского интерфейса emacs вашей платформы и / или библиотеки шрифтов. Если вы опубликуете больше информации о Emacs, который вы используете, люди, более опытные, чем я, могут подтвердить эту проблему.

Другие вопросы по тегам