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

这个是指的要在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

1 个赞

test-2021-11-26_14.47.53

大佬,是不是很开心?

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

哇,可以从sarasa解放了!

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

大佬,我来挖一下坟。 我简单测试了一下你的代码。能够很好的中英文对齐。非常有用。

但我看这个代码你始终没有合并到正式的分支。是在实际使用过程中有什么坑吗?

时间太长了,早忘记啥情况了 :rofl:

后来有了不需要调字体的对齐方案 GitHub - casouri/valign: Pixel-perfect visual alignment for Org and Markdown tables.

详细使用发现确实有点问题。

对于折行的文字。调整完之后,不知道为什么折行后的每个文字占用了一行。

嗯,我目前使用的就是 valign 对齐。

只是偶然看到这个通过 ‘min-width 的方案,感觉比较简单,如果好用的话,又可以省去一个包了。

我现在还在用 cnfonts, 主要我熟悉它的代码,一般不会出现让人摸不着头脑的事情。