首页 > 其他, 初级, 好玩的 > 用artist-mode画文本图

用artist-mode画文本图

概述

artist是一个emacs的内置lisp包。
在artist-mode中,你可以使用鼠标或者键盘来画线(可以带箭头)、矩形、正方形、多边形、椭圆、圆和一些类似于水蒸气似的不规则图形,当然可以擦除,填出图形,还可以在其上写字。

截图

这是一个很不错的绘制单链表的截图flash

这是一个画了一些形状的截图, 这幅图画了一个A.

这是我工作时的一个绘制结果.

为什么使用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. 我试验,此处并没有绘制正方形,难道是我的版本有问题,求确认。

2.1相同,我仍然没有得到圆,得到的是椭圆

3. 顾名思义,很拉风的东西,但是我感觉不实用

分享家:Addthis中国
GD Star Rating
loading...
用artist-mode画文本图, 9.6 out of 10 based on 14 ratings 标签:artist-mode, Emacs, emacser, emacser.com, irc, org, screenshot, 截图, 配色, 鼠标

相关日志

分类: 其他, 初级, 好玩的
  1. CCheng
    2010年5月19日03:51 | #1

    果然是很拉风的东西!!!

    不知道,在muse里面,有没有什么画图的工具。

    [回复]

    fangzhzh 回复:

    @CCheng, 文中的图,就是在org-mode中画的,同理,muse也可以。muse里,画图时启动artist-mode即可,画完退出,还是muse:)

    [回复]

    nowait 回复:

    @fangzhzh, 不错,好用

    [回复]

  2. filebat
    2010年5月19日12:42 | #2

    very sweet!

    可能我是有些picky了:
    - artist-mode移动画好的矩形或箭头不大方便。
    - 放大和缩小也不太方便。

    [回复]

    fangzhzh 回复:

    @filebat, 呵呵,是啊,放大缩小确实没有这个功能,比较郁闷。移动的话,我就退出artist-mode,然后把矩形当矩阵操作:) 不知道这个能不能对你有帮助

    [回复]

    ahei 回复:

    @fangzhzh,

    把矩形当矩阵操作

    ….强

    [回复]

    fangzhzh 回复:

    @ahei, 就是 kill-rectangle, yank-rectangle, insert-rectangle 之类的 :)

    [回复]

    ahei 回复:

    @fangzhzh, 用CUA吧, CUA操作矩形特别方便.

    [回复]

    fangzhzh 回复:

    @ahei, emacs的默认操作用久了也就熟了,用熟了也就不想改了。有空试试吧。

    [回复]

    ahei 回复:

    @fangzhzh, … 顽固啊

    [回复]

    filebat 回复:

    @fangzhzh, 使用artist-mode的复制和粘贴可以一定程度上解决这个问题。

    理论上,还蛮简单的:
    - 标识光标附近的矩形/线段
    - 选中区域
    - 剪切
    - 移动光标
    - 粘贴

    我试着,自己写个小lisp代码片断。 折腾了一下,总是有些小的瑕疵。然后就放弃了。

    [回复]

    fangzhzh 回复:

    @filebat, 贴出来探讨一下也好:),
    站长aheii是个lisp高手,狂热的geek,最喜欢解决问题了

    [回复]

    ahei 回复:

    @fangzhzh, …这话说的, 我最近太太忙了

    [回复]

  3. Meteor Liu
    2010年5月19日13:50 | #3

    谢谢作者。
    这么酷的功能居然现在才知道,以前也听说过这个mode,但是实在没想到它还有这么大作用。
    关于1,2,我感觉画出来的好像确实是圆和正方形,不过它说的正是指横向和竖向的字符数一样,但是在我这横向的字符比竖向的字符短,的以看起来好像变成了椭圆和矩形。

    PS: Flood-fill真拉风,我不小心在一个不算大的文件中(10几K吧)用这个点了一下鼠标,就见emacs从点的地方不停地往下fill,fill,fill……….一直到文件尾,整个过程持续了好几分钟,想停都停不下来。全文fill完之后我undo一下,整个emacs整个挂掉了,到我打完这么大段话还没恢复过来,不知道它还有没有活过来的勇气。

    [回复]

    Meteor Liu 回复:

    @Meteor Liu,
    另外,在我这鼠标位置好像点得不准,总是点到第一行,结果画的线是在鼠标的下一行,不知道怎么回事

    [回复]

    fangzhzh 回复:

    @Meteor Liu, 如果你使用的是org之类的开启了outline-mode的mode,必须要show-all后,鼠标才能绘制正确,否则行为很诡异:)

    [回复]

    yswzing 回复:

    @Meteor Liu,
    我也遇到了这个问题,经查证,是 tabbar-mode 引进的,关掉 tabbar-mode 后正常,
    不知道开启 tabbar-mode 的时候如何让 artist-mode 正常工作。如果你找到方法的话,
    通知我一声,tianlei.zhao # gmail.com

    [回复]

    fangzhzh 回复:

    @yswzing, 我机器里没有tabbar-mode,我感觉他让我的emacs看起来很凌乱,而且据说,tabbar及其耗内存。我推荐aheii的emaci+window-num-mode,基本可以去掉一个一个的tabbar。个人意见,仅供参考:)

    [回复]

    yswzing 回复:

    @fangzhzh,
    我没有发现 tabbar 占用内存多,可能是我内存比较大(1.5G),不明显。

    Vim 中也有人向我推荐使用 buffer number 来切换,总觉得还要记 buffer 号,不方便。
    还是觉得 tabbar 这样的偶而需要切换的时候去看一眼方便一些。其实我用 emacs 的时候
    最多也就同时操作两个主要文件,所以 tabbar 对我也并不是不可或缺的。

    Anyway,还是看了一下 artist 的源代码,如下代码可以解决和 tabbar-mode 的兼容问题。

    1
    2
    
    (defadvice artist-coord-win-to-buf (before fixup-artist-position activate compile)
        (if tabbar-mode (setq coord (cons (car coord) (1- (cdr coord))))))

    [回复]

    fangzhzh 回复:

    @yswzing, 谢谢你的代码:) 另:window-number-mode是不用记住buffer号的,这个mode将你当前emacs可以看到的所有buffer,按照左右上下的顺序排成1,2,3,4,5,6, 并且此数字就是显示在mode-line上,- 1 -,红色的,还是很醒目的。 切换时,看一眼也很方便

    [回复]

    yswzing 回复:

    @fangzhzh,
    恕在下愚钝,没有找到你所说的 window-num-mode 的相关资料,
    window-number-mode 资料也很少。能否指点一下哪里可以找到
    中文的相关介绍?截图之类的?

    另外,在我的 firefox 3.5 上,这个嵌入的回复框似乎太宽了,超出
    了页面可显示内容的宽度,导致有一部分内容显示不出来,害的我每
    次都得手工换行。

    [回复]

    fangzhzh 回复:

    @yswzing, window-number-mode,http://www.emacswiki.org/emacs/NumberedWindows 我的也是firefox,我的也是回复框太宽,有时候我写好全部一块贴进去,呵呵

    [回复]

    yswzing 回复:

    @fangzhzh,
    试了一下,确实不错,谢谢!

    [回复]

    ryan 回复:

    @fangzhzh, 恕我愚钝,window-number-mode是多window的时候显示window号,而不是buffer的号,一个windows,一直是1.

    [回复]

    fangzhzh 回复:

    @ryan, 我的意思就是一个emacs,使用若干次(>=1)split-window-*后,一个emacs上的那些窗口,都是有1,2,3,4标注的。

    谢谢指点,我buffer和window的概念没有搞清楚

    [回复]

    Meteor Liu 回复:

    @yswzing,
    Thanks,这下鼠标终于准了

    [回复]

    ahei 回复:

    @Meteor Liu, 刚才也试了下Flood-fill,靠, 太拉风了, 哈哈

    [回复]

  4. 2010年5月19日14:23 | #4

    喷雾器Spray-can很好玩的, 多喷几下就全变成#了, 果然浓度很高啊

    [回复]

  5. 2010年5月19日14:25 | #5

    哈哈, 还是Flood-fill最拉风, 太牛叉了

    [回复]

  6. 匿名
    2010年5月20日01:33 | #6

    @ahei
    我靠,果然如此,这两天忙着公司的事情,结果今天来一看,原来上次的东西真搞定了,哈哈 抄袭抄袭!~~

    [回复]

    ahei 回复:

    @, 。。。不知道你在说啥

    [回复]

  7. 2010年5月20日01:36 | #7

    我来溜达溜达,上次的东西真找到了。。非常感谢,不过郁闷的是 我的muse或org任意一个启动后都不能关闭,找不到哪里出现了死锁状态。。。。。。。

    每次编辑完了 还要终端来killed~~~~~~

    [回复]

    ahei 回复:

    @B.Qnyd, 我的DEA也有这种情况,我已加到我的TODO list里面了。

    [回复]

    B.Qnyd 回复:

    @ahei, 如何解决呢?

    [回复]

    ahei 回复:

    @B.Qnyd, 。。。都说了加到TODO list里面了,你还问我怎么解决

    [回复]

  8. 2010年5月20日04:36 | #8

    现在出了一个用Emacs进行协同编辑的扩展,有兴趣的朋友可以试试
    http://rudel.sourceforge.net/

    [回复]

    fangzhzh 回复:

    @demon386, 我最近喜欢的一个东西是gds,google desktop集成到emacs,然后用w3m浏览桌面效果,效果也很拉风!!

    [回复]

    ahei 回复:

    @fangzhzh, 是google的桌面搜索吗?哈,啥时候有空再整篇文章给大家show show

    [回复]

    fangzhzh 回复:

    @ahei, 是的,google的桌面搜索,一个require就行,好像叫gds.el,有兴趣可以去搜一下,回头我整张图给站长ahei,ahei发上来看看就行。

    [回复]

    ahei 回复:

    @fangzhzh, 哈哈,你可以写一篇短文嘛,技巧类的,也可以发上来的

    [回复]

    fangzhzh 回复:

    @demon386,
    你博客的文章写的挺好,第一篇《阅读与思维的提升》我就很喜欢,翻阅中:)

    [回复]

    ahei 回复:

    @fangzhzh, 我啥时候写过这种文章阿?

    [回复]

    demon386 回复:

    @fangzhzh, 多谢大牛捧场

    [回复]

    fangzhzh 回复:

    @demon386, 太客气了,思想上有高度的人,才是真正的大牛呢。

    [回复]

  9. 凌狐
    2010年5月30日10:52 | #9

    应该建立自己的QQ群!!!!!!!!

    [回复]

    ahei 回复:

    @凌狐, 太山寨了,我的计划是等有空的时候把wiki和论坛搭起来.

    [回复]

    qudian 回复:

    @ahei, 其实论坛用不上,搞个wiki就蛮好的

    [回复]

    ahei 回复:

    @qudian, 用户多了的话,论坛还是很有必要的,方便讨论

    [回复]

  10. 2010年8月22日05:00 | #10

    倒是发布了一款Ascii art 软件!

    [回复]

    fangzhzh 回复:

    @G字头老大, 什么?

    [回复]

评论分页
1 2 41374
  1. 2010年5月19日03:33 | #1
  2. 2010年8月4日03:25 | #2
  3. 2012年4月22日10:16 | #3
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: