分页: 1 / 3

让emacs真正的等宽,补丁

发表于 : 2012-04-07 18:50
cjacker
补丁后续做过一些修改,需要的同志们在提交前可关注emacs-devel maillist里的
“A patch for enforcing double-width CJK character display”Thread.



Call for more test.
2012年4月19日更新:
修正emacs-23.4补丁打不上的问题,现在 23.4/24.xxxx都可以用了。

2012年4月17日更新:
1,修复了M-x text-scale-increase/decrease的问题。
2,尊重用户fontset字号设置,如果用户明确设置了script han的字号,不会在scale时增加字体宽度。
3,修复了text-scale情况下modeline或minibuffer等固定字号的宽度问题。可用leim测试。
4,修复了半宽CJK字符的支持问题,比如半宽片假名,半宽韩文字母等。
5,修复了默认字体设置为“中文非等宽”字体的英文字符花掉的问题,有同学提到的通过菜单"Set Default Font"更换字体的问题OK了。

注:
1,默认字体如果设置为非等宽英文或中文字体,本补丁不会生效,这种情况无法再做对齐。
2,默认字体如果设置为等宽中文字体,本补丁也不会再生效,直接使用合适的等宽中文字体就可以了(比如NSimSun,文泉驿的等宽黑等)
3,如果用户强制设定了Script Han的字号,本补丁会在当前固定字号下,但如果用户进行text-scale,补丁不会再做字宽的处理,因为强制的字号设定即使text-scale也不会发生scale,这时候再做宽度处理会显的很奇怪。可以通过M-x text-scale-increase测试。

emacs-cjk-monospace-v24.patch.tar.gz
(2.49 KiB) 已下载 323 次

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-07 21:39
kardinal
fringe 里面的倒三角挺好看,点击会动么?
函数体左边的坚条是指示线?怎么弄的

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-07 22:00
cjacker
kardinal 写了:fringe 里面的倒三角挺好看,点击会动么?
函数体左边的坚条是指示线?怎么弄的
1, cedet的folding mode
2, highlight-indentation modes. 对C/C++用处不大,主要是读代码方便,可以看个大概。对python/haskell之类的依赖缩进的比较方便。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-07 22:08
Fermat618
这事以前搞得我焦头烂额,最后中英文弄了个文泉译的字体,才算差不多达到目的。

不整了,先这么将就着来吧。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-07 23:28
kardinal
cjacker 写了:
kardinal 写了:fringe 里面的倒三角挺好看,点击会动么?
函数体左边的坚条是指示线?怎么弄的
1, cedet的folding mode
2, highlight-indentation modes. 对C/C++用处不大,主要是读代码方便,可以看个大概。对python/haskell之类的依赖缩进的比较方便。
观摩了下 highlight-indentation,发现有个 font-lock-fontify-buffer,挺好……
这下我的问题解决了百分之一,剩下的百分之九十九指日可待啊 :em05

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-07 23:38
cjacker
pocoyo 写了:整个 24 的补丁呗?
emacs-snapshot-b89ec7e
emacs-24.0.93
直接打上没问题。

Emacs Xft fontbackend这部分代码没啥大的变动,24估计也不会怎么变了。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-08 13:36
cjacker
pocoyo 写了:
cjacker 写了:
pocoyo 写了:整个 24 的补丁呗?
emacs-snapshot-b89ec7e
emacs-24.0.93
直接打上没问题。

Emacs Xft fontbackend这部分代码没啥大的变动,24估计也不会怎么变了。
确实没变化 emacs-24.0.93 与 emacs-24.0.95 的 xftfont.c 内容一样。但是 打过补丁后 emacs-24.0.95 编译后 字体有重叠 效果也不好
原帖附件补丁有更新,看一下下的补丁是不是最新的。
如果不是就把原来的补丁 patch -R掉,打上新的。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-08 13:45
cjacker
试了一下emacs 24,没问题。
2012-04-08-134421_874x416_scrot.png

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-08 13:52
cjacker
pocoyo 写了:
cjacker 写了:
pocoyo 写了:整个 24 的补丁呗?
emacs-snapshot-b89ec7e
emacs-24.0.93
直接打上没问题。

Emacs Xft fontbackend这部分代码没啥大的变动,24估计也不会怎么变了。
确实没变化 emacs-24.0.93 与 emacs-24.0.95 的 xftfont.c 内容一样。但是 打过补丁后 emacs-24.0.95 编译后 字体有重叠 效果也不好
从图片上来看,用的是Monaco。这个补丁不会影响英文等宽字体,如果不打补丁英文就显示成这样,那明显是不对的。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-08 16:28
cjacker
pocoyo 写了:奇怪了 这下不重叠了 但是没效果了。并且org mode 字体里显示不正常。

这个是 没打补丁的。
附件 1.png 已经无效
这个是打过最新补丁的。
附件 2.png 已经无效
最新的Emacs Git 24.1.50,OrgMode,CJK语言混合,英文Monaco(DejaVu Mono也一样),中文丫黑,日文VL Gothic,韩文Baekmuk Batang
2012-04-08-163912_811x610_scrot.png

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-08 17:34
自由建客
软件有 bug 就会出现对不齐的现象。
实际的等宽应当由软件自身控制,不能指望字体,字体只能提供一种等宽饱满的样子。
gvim 和各大终端都是自己控制好宽度的,连 Windows 的 cmd 都是!

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-09 2:43
cjacker
自由建客 写了:软件有 bug 就会出现对不齐的现象。
实际的等宽应当由软件自身控制,不能指望字体,字体只能提供一种等宽饱满的样子。
gvim 和各大终端都是自己控制好宽度的,连 Windows 的 cmd 都是!
由软件控制的观点我是同意的,前面有说明vte/gvim都已经做了workaround,cmd的情况不清楚。

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-09 2:49
cjacker
pocoyo 写了:果然是字体的问题。不过我这里的雅黑 不知道为什么没有 spacing 字段。
试了试有spacing 为 90 的字段 宋体,隶书等中文字体都可以对齐。但是文泉驿正黑,微米黑, 雅黑,都没有spacing 字段。 不知道这是为什么?
改了算法,现在应该可以准确的判断CJK字体并作出正确的处理了,逻辑反而比以前简单了。

有时候简单的做法反而是更有效的方法,见原帖附件,更新一下吧,不管什么CJK字体只要比两个等宽宽度窄的都应该可以对齐了。
并且不会影响其他的语言。

一直在找准确判断CJK的方法,结果简单粗暴的反而是最有效的。

现在不论字体是否标准都没问题了,丫黑当然也不会有问题。 :em01

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-09 14:54
lilydjwg
pocoyo 写了:怎么说呢。重新打了最新的补丁 刚开始的时候正常。再打开文件的时候貌似出现一个中字=3个英文字符,不是很稳定。
哈哈哈

Re: 让emacs真正的等宽,补丁

发表于 : 2012-04-09 21:32
cjacker
pocoyo 写了:怎么说呢。重新打了最新的补丁 刚开始的时候正常。再打开文件的时候貌似出现一个中字=3个英文字符,不是很稳定。
见首页。