让ruby cowsay支持中文

cowsay 是一个很有趣的linux命令行工具,尤其是和fortune, lolcat联合在一起用,休闲好去处。可以加到.bash_profile中作为进入console时的调剂。比如:

在Mac中可以使用Ruby 对应的cowsay, fortune, lolcat 的gem包,gem install即可。不过在使用cowsay的时候,有个问题就是对中文的支持,一个中文汉字的长度仍然为1,但显示占的宽度是2,使得格式对不齐。类似于这样:

简单修改cowsay安装目录下lib/cowsay/character/base.rb代码,将第31行代码的


line_length = message_lines.max{ |a,b| a.length <=> b.length }.length
修改成:

line_length = message_lines.max{ |a,b| a.length <=> b.length }.encode('gbk').b.length

41行的代码


output_lines << “| %-#{line_length}s |” % line

修改成:


output_lines << “| %-#{line_length+line.length-line.encode(‘gbk’).b.length}s |” % line

即可以支持中文的输出,结果就成了:

不过注意的是中文的分词没支持,到时句子中需要自己打几个空格来实现换行。