用artist-mode画文本图

概述
artist是一个emacs的内置lisp包。
在artist-mode中,你可以使用鼠标或者键盘来画线(可以带箭头)、矩形、正方形、多边形、椭圆、圆和一些类似于水蒸气似的不规则图形,当然可以擦除,填出图形,还可以在其上写字。
截图
这是一个很不错的绘制单链表的截图flash
这是我工作时的一个绘制结果.
为什么使用Artist-mode
我经常在写程序的时候,希望在文档里画一些类的继承关系、包含关系什么的,以帮助读这个文件的人能够更好的理解代码,但是此处不能且不适合放一张jpg(要是h,cpp文件里能插图,那多拉风啊)。
就考虑用plain-text的文本格式来绘图。初始时想用“-|+_”这几个符号来拼凑,但是工作效率太低,而且容易出错,一修改就几乎整个图作废。将有限的时间浪费在如此耗时,且没有技术含量的工作上,那还不就等于浪费生命啊,剩下来的时间多去看看twitter多好!
正如截图中绘制单链表的截图flash所展示,artist-mode来做这件事情,那是最适合不过了。那么来初探一下emacs的artist-mode能够如何完成任务呢。
怎么使用Mouse 绘制
进入artist-mode
M-x artist-mode
离开artist-mode
M-x artist-mode-off
三个mouse
mouse-2(鼠标中键),shift mouse-2
弹出一个菜单,从菜单里你可以选择要使用左键画什么类型更改一些设定
mouse-1 ( 鼠标左键) , shift-mouse-1
绘制部分由鼠标左键完成,请参考绘制操作。
mouse-3 ( 鼠标右键) , shift mouse-3
| mouse-3 | 删除鼠标下的一个字符 |
| shift mouse-3 | 画出矩形框,删除框选所有字符 |
绘制操作(鼠标左键)
| 操作 | 无shift | shift |
| pen | 单击,在鼠标点填充一个“填充符号”,默认为”.”;按下左键,拖动,抬起,绘制填充符号组成的线 | 单击,在鼠标点填充一个“o”;按下左键,拖动,抬起,绘制一条从初始点到最终点的直线 |
| Line | 任意方向的线 | 直线 |
| Rectangle | 矩形 | 正方形1 |
| Poly-line | 任意方向的多边形 | 每条线都是直线的多边形 |
| Ellipses | 椭圆 | 圆2 |
| Text | 文本 | 覆盖式文本 |
| Spray-can | 喷雾器3 | 设置喷雾器的大小 |
| Erase | 橡皮,擦掉一个字符 | 擦掉矩形内字符 |
| Vaporize | 擦除一行 | 擦除所有相连的行 |
| Cut | 剪切矩形 | 剪切正方形 |
| copy | 复制矩形 | 复制正方形 |
| paste | 粘贴 | 粘贴 |
| Flood-fill | 填充工具,填充 | 填充 |
一些说明
直线:只能是垂直,水平,对角线
箭头:绘制线,或多边形时,可以设置箭头,详细见箭头.
设定
| 设定选项 | 含义 |
| Set fill | 设定用来填充矩形和正方形的字符 |
| Set line | 设定绘制线的时候使用的字符 |
| Erase char | 设置擦除的时候使用的字符 |
| Trimming | 开关修剪行尾的功能(一个图画完,一行行尾的空格会被移除) |
| Borders | 开关在填充图形周围绘制行边界的功能 |
箭头
在artist-mode中,有下面两个键
< artist-toggle-first-arrow > artist-toggle-second-arrow
就像他们的快捷键所展示,artist-toggle-first-arrow将一条直线的第一个字符变为<,而artist-toggle-second-arrow将一条线的最后一个字符变为>。
命令
基本命令
| 命令 | 功能 |
| M-x artist-key-set-point | 执行以下功能 |
| M-x artist-select-operation | 选择绘制类型 |
| M-x artist-next-line, M-x artist-previous-line, M-x artist-forward-char and M-x artist-backward-char. | 移动 |
| M-x artist-select-fill-char | 设置填充字符 |
| M-x artist-select-line-char | 设置绘制时字符 |
| M-x artist-select-erase-char | 设置擦除时使用字符 |
| M-x artist-toggle-rubber-banding | 开关 rubber-banding功能(不知道是什么) |
| M-x artist-toggle-trim-line-endings | 开关修剪行尾的功能 |
| M-x artist-toggle-borderless-shapes | 开关在填充图形周围绘制行边界的功能 |
artist-key-set-point 执行的功能
| 情况 | 作用 |
| lines/rectangles/squares | 设置起始/结束点 |
| poly-lines | 设置其中一个点, (使用 C-u M-x artist-key-set-point 设置结束点) |
| 擦除字符时 | 开关橡皮功能 |
| 剪切,复制 | 设置区域/正方形 的 开始/结束点 |
| 粘贴时 | 粘贴动作 |
箭头命令
| M-x artist-toggle-first-arrow | 设置/取消 在线/多线段开头的箭头 |
| M-x artist-toggle-second-arrow | 设置/取消 在线/多线段结尾的箭头 |
选择操作
| M-x artist-select-op-line | 绘制线 |
| M-x artist-select-op-straight-line | 绘制直线 |
| M-x artist-select-op-rectangle | 绘制矩形 |
| M-x artist-select-op-square | 绘制正方形 |
| M-x artist-select-op-poly-line | 绘制多线段 |
| M-x artist-select-op-straight-poly-line | 绘制直线组成的多线段 |
| M-x artist-select-op-ellipse | 绘制椭圆 |
| M-x artist-select-op-circle | 绘制圆 |
| M-x artist-select-op-text-see-thru | 写字(插入模式) |
| M-x artist-select-op-text-overwrite | 写字(覆盖模式) |
| M-x artist-select-op-spray-can | 喷雾器 |
| M-x artist-select-op-spray-set-size | 设置喷雾器的大小 |
| M-x artist-select-op-erase-char | 擦除字符 |
| M-x artist-select-op-erase-rectangle | 擦除矩形内字符 |
| M-x artist-select-op-vaporize-line | 擦除一行 |
| M-x artist-select-op-vaporize-lines | 擦除所有相连的行 |
| M-x artist-select-op-cut-rectangle | 剪切矩形 |
| M-x artist-select-op-copy-rectangle | 复制矩形 |
| M-x artist-select-op-paste | 粘贴 |
| M-x artist-select-op-flood-fill | 填充 |
有了以上的介绍,我将所有artist-mode的命令绘制为一张表格,再参考artist-mode的键绑定+自己绑定,键盘绘制会像用鼠标绘制一样顺手。
artist变身
或许有人觉得artist-mode绘制出来的ascii图很不错,但是如果能变成图片或许更好;或者图片是一种硬性要求;或者由于不知道的原因,总有可能有需求将ascii变成图片呢?多一种选择总是好事。
好吧,传送门 。
1. 我试验,此处并没有绘制正方形,难道是我的版本有问题,求确认。
3. 顾名思义,很拉风的东西,但是我感觉不实用

loading...
在矩形框中输入文本,会改变矩形框的形状,各位有遇到这个问题吗?
[回复]
fangzhzh 回复:
五月 17th, 2011 at 8:33 下午
@cmdblock, 中文字体的宽度是英文字体的宽度的两倍,所以看起来对不齐。但是如果生成html是对齐的,这确实是个难题
[回复]
怎样copy&paste rectangle?
我试了几次没有用,该怎样正确操作
另外,没有集成到右键菜单里。
真多命令操作起来有点麻烦
[回复]
fangzhzh 回复:
六月 10th, 2011 at 5:31 下午
@zealinux, 光标在矩形的左上角,c-space, 光标到矩形右下角,C-x r k (这个命令是矩形剪切),再c-x r y将原来的矩形放回来(或者c-/ 取消剪切),到目标位置,c-x r y 粘贴
[回复]