Emacs仅显示的缩写

时间:2013-03-21 21:11:59

标签: emacs

我正在编辑emacs中的Mathematica代码。 Mathematica对希腊字母的明文表示看起来像

\[Alpha], \[Beta], \[Gamma], ...

我不介意输入这些,但结果代码很大,看起来很笨重,例如:

k[\[Beta]_,z_]:=z^(\[Beta]/2) Hypergeometric2F1[\[Beta]/2,\[Beta]/2,\[Beta],z];

有没有办法让emacs自动显示某些字符串(如\[Alpha])和其他字符串(如alpha的unicode字符)?注意,我不想实际用一个字符串替换另一个字符串(如果我理解的话,这是缩写的缩写),因为Mathematica仍然可以正确读取该文件。

1 个答案:

答案 0 :(得分:5)

是的,有办法。普通的Emacs解决方案是使用compose-region函数来完成它。此代码段将定义一个函数compose-greek-symbols,如果font-lock处于活动状态,它将激活当前缓冲区中请求的缩写替换:

(setq
 greek-symbols
 (loop
  ;; characters are entered with `ucs-insert'
  ;; 'α' is "GREEK SMALL LETTER ALPHA"
  for ch from ?α to ?ω
  collect (let ((str (get-char-code-property ch 'name)))
        (setq str
          (upcase-initials
           (downcase
            (replace-regexp-in-string "greek small letter " "" str))))
        (cons str ch))))


(defun compose-greek-symbols ()
  (interactive)
  (font-lock-add-keywords
   nil
   '(("\\\\\\[\\([^]]+\\)\\]"
      (0 (progn (let
            ((sym (cdr-safe (assoc (match-string 1) greek-symbols))))
          (when sym
            (compose-region (match-beginning 0)
                    (match-end 0)
                    sym)))))))))

EmacsWiki提供情侣more solutions。如果你愿意安装新软件包,你可以尝试更复杂的东西,比如pretty-symbols-mode