让emacs真正的等宽,补丁

Vim、Emacs配置和使用
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

让emacs真正的等宽,补丁

#1

帖子 cjacker » 2012-04-07 18:50

补丁后续做过一些修改,需要的同志们在提交前可关注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) 已下载 322 次
上次由 cjacker 在 2012-04-19 3:17,总共编辑 18 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

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

#2

帖子 kardinal » 2012-04-07 21:39

fringe 里面的倒三角挺好看,点击会动么?
函数体左边的坚条是指示线?怎么弄的
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#3

帖子 cjacker » 2012-04-07 22:00

kardinal 写了:fringe 里面的倒三角挺好看,点击会动么?
函数体左边的坚条是指示线?怎么弄的
1, cedet的folding mode
2, highlight-indentation modes. 对C/C++用处不大,主要是读代码方便,可以看个大概。对python/haskell之类的依赖缩进的比较方便。
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

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

#4

帖子 Fermat618 » 2012-04-07 22:08

这事以前搞得我焦头烂额,最后中英文弄了个文泉译的字体,才算差不多达到目的。

不整了,先这么将就着来吧。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

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

#5

帖子 kardinal » 2012-04-07 23:28

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

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

#6

帖子 cjacker » 2012-04-07 23:38

pocoyo 写了:整个 24 的补丁呗?
emacs-snapshot-b89ec7e
emacs-24.0.93
直接打上没问题。

Emacs Xft fontbackend这部分代码没啥大的变动,24估计也不会怎么变了。
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#7

帖子 cjacker » 2012-04-08 13:36

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掉,打上新的。
上次由 cjacker 在 2012-04-09 6:10,总共编辑 1 次。
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#8

帖子 cjacker » 2012-04-08 13:45

试了一下emacs 24,没问题。
2012-04-08-134421_874x416_scrot.png
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#9

帖子 cjacker » 2012-04-08 13:52

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。这个补丁不会影响英文等宽字体,如果不打补丁英文就显示成这样,那明显是不对的。
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#10

帖子 cjacker » 2012-04-08 16:28

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
上次由 cjacker 在 2012-04-09 6:11,总共编辑 1 次。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#11

帖子 自由建客 » 2012-04-08 17:34

软件有 bug 就会出现对不齐的现象。
实际的等宽应当由软件自身控制,不能指望字体,字体只能提供一种等宽饱满的样子。
gvim 和各大终端都是自己控制好宽度的,连 Windows 的 cmd 都是!
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#12

帖子 cjacker » 2012-04-09 2:43

自由建客 写了:软件有 bug 就会出现对不齐的现象。
实际的等宽应当由软件自身控制,不能指望字体,字体只能提供一种等宽饱满的样子。
gvim 和各大终端都是自己控制好宽度的,连 Windows 的 cmd 都是!
由软件控制的观点我是同意的,前面有说明vte/gvim都已经做了workaround,cmd的情况不清楚。
上次由 cjacker 在 2012-04-09 6:18,总共编辑 1 次。
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#13

帖子 cjacker » 2012-04-09 2:49

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

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

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

现在不论字体是否标准都没问题了,丫黑当然也不会有问题。 :em01
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#14

帖子 lilydjwg » 2012-04-09 14:54

pocoyo 写了:怎么说呢。重新打了最新的补丁 刚开始的时候正常。再打开文件的时候貌似出现一个中字=3个英文字符,不是很稳定。
哈哈哈
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

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

#15

帖子 cjacker » 2012-04-09 21:32

pocoyo 写了:怎么说呢。重新打了最新的补丁 刚开始的时候正常。再打开文件的时候貌似出现一个中字=3个英文字符,不是很稳定。
见首页。
上次由 cjacker 在 2012-04-11 20:34,总共编辑 12 次。
回复