emacs devel 上请求支援,字体中英文等宽相关

我感觉如果能够解决“等宽与等高”不可兼得的问题就可以了,比如引入个全局的 min-line-height 保证行高。 在保证行高相等的情况下,中文 emacs 社区似乎有好多种技巧可以实现等宽(虽然不一定很完美)。

如果“等高等宽”问题不能完美解决,至少做到对字体不过分挑剔就能接受?比如 最完美解决vscode中文等宽字体的方案 这里直接使用 Ubuntu Mono 就可以,但是在 emacs 里面还是会出问题。

我也这么想的,我提交了一个 bug,希望添加一个类似 line-height 的变量,但后来和 emacs 维护者讨论的过程中,感觉希望越来越小了, 就好比一个人快要饿死了,要口吃得,但财主一直在考虑窝头不好消化,肥肉容易胆固醇,瘦肉吃多了致癌的事情。。。。 :rofl: :rofl: :rofl:

1 个赞

这个是指的要在emacs中从根本上所有核心mode中都解决这个问题吗?这个应该是没希望,但我觉得只要在org-mode中能解决就不错了,org-mode也是emacs中最需要这个的。

还是说我的理解又有问题,仅仅只是org-mode解决这个问题和emacs所有核心mode都解决这个问题难度是差不多的?

这个和 mode 关系应该不大,如果 org-mode 能完美解决,那么相同方法用在其他 mode 也可以。

并不是,org-mode的表格有明显的分界字符,所以org-mode的解决方法未必可以适用其他没有分界字符的情形。

你别说,这两天 emacs 大牛正在搞 min-width display 属性,我刚才试了试,也可以用来做中英文对齐,下面是测试代码,需要 emacs git

(defun eh-align-chinese ()
  (interactive)
  (dolist (window (window-list))
    (save-window-excursion
      (with-selected-window window
        (let* ((inhibit-read-only t)
               (buffer (window-buffer window))
               (n1 (window-start window))
               (n2 (window-end window))
               (flag t))
          (with-current-buffer buffer
            (while flag
              (let ((str (ignore-errors (buffer-substring n1 (+ n1 1)))))
                (when (and str (stringp str) (string-match-p "\\cc" str))
                  (add-display-text-property n1 (+ n1 1) 'min-width (list 2.0))))
              (setq n1 (+ n1 1))
              (when (> n1 n2)
                (setq flag nil)))))))))

(add-hook 'post-command-hook #'eh-align-chinese)

image

4 个赞

看起来有扔掉 sarasa 的可能?(好不容易才习惯了他这个瘦长的英文字体)

汉字两边加空白是相对最佳方案

2 个赞

现在主要问题不是行高吗?对齐的话,cn-fonts 已经满足一般需要了。

截图看起来不错? :+1:

我把这个代码放到 cnfonts 里面了,如果有人使用 emacs 29,就可以试试,使用 post-command-hook 来更新,感觉稍微有点影响性能,也可能是我的电脑太low

https://github.com/tumashu/cnfonts/commit/639d035b9ff172704785bb9d6428e5b371a4aab3

1 个赞

test-2021-11-26_14.47.53

大佬,是不是很开心?

哈哈,确实有点,不过如何优化这个命令的性能,确实还需要考虑 :rofl:

哇,可以从sarasa解放了!

image :+1: :+1: :+1: