Emacs里怎么显示全角引号?

如题,Emacs里引号都是半角的(unicode委员会真的sb)。有人有解决办法吗?

(setq text-quoting-style 'curve)

你也可以用方括号

(setq use-default-font-for-symbols nil)

我没说清楚,我是说即使在中文环境里引号依然是半宽:

Screen Shot 2020-06-18 at 11.13.44 AM

(setq text-quoting-style 'curve)

(setq use-default-font-for-symbols nil)

似乎都没有效果。是我引号打错了吗?

嗯…你给 symbol 这个 charset 设置成中文字体了么?

我这边的话,把 symbol 设置成中文字体,结合 use-default-font-for-symbols nil 是可以显示全角引号的。

另外 C-u C-x = 可以查看字符属于哪个 charset。

这样的话,英文里会不会变成显示全角引号?

不会。原理上的话应该是 default 字体 fallback 到另外一个字体,不过我不是字体专家,说不出具体的所以然,但总之效果上是这样。

我这里所有引号都会变成全角。可能有什么问题。

我突然想到可以用font-lock直接通过环境决定显示全角半角:

(defface quanjiao-quote '((t . (:family "Source Han Serif SC")))
  "Face for full width quotation marks."
  :group 'convenience)

(defun quanjiao-matcher (limit)
  "Matcher for font-lock."
  (and (re-search-forward "[‘’“”]" limit t)
       (or (memq (aref char-script-table (char-after))
                 '(han cjk-misc))
           (memq (aref char-script-table (char-before (1- (point))))
                 '(han cjk-misc)))))

(define-minor-mode quanjiao-mode
  "Display full width quotation marks."
  :lighter ""
  (if quanjiao-mode
      (font-lock-add-keywords nil '((quanjiao-matcher . 'quanjiao-quote)))
    (font-lock-remove-keywords nil '((quanjiao-matcher . 'quanjiao-quote))))
  (jit-lock-refontify))

把face的字体改成中文字体就可以了。只能说Emacs牛逼,别的编辑器能这么简单地做到这点?

quanjiao

(严格来说用的不是font-lock,是jit-lock) 改成用font-lock了。

2 个赞

在把Emacs当成排版引擎的邪路上越走越远 :zipper_mouth_face:

这叫 高 级 编 辑 器 显 示 功 能。