2012年5月5日星期六

Emacs里一些古老的术语

这篇总结写给初学者。

虽说Emacs里面很多功能对应的命令名都是比较直白的英文描述,比如delete-non-matching-lines,比如search-forward。但有些东西你不知道怎么称呼的话,就死活也找不到怎么去调用,查文档都不知道如何下手。

Emacs里的名词 "现代编辑器"里的名词 解释
kill-ring-save copy 复制
kill cut 剪切
yank paste 粘贴
region selection 被选中的区域1
mark select 选择一段文字
fringe gutter/margin 左右边栏2
hideshow / outline code folding 3
coding system encoding 编码
truncate-lines / visual-line-mode line wrapping 换行4
font-lock syntax highlighting
imenu function list / symbol list
face style font+color+其它一些装饰
Meta key Alt key 在现在的PC上,Alt键就是Emacs所说的meta键
window panel
frame window

Footnotes:

1 Emacs缺省支持不高亮显示的选中区,mark点(上次(显式或隐式)set-mark的位置)和当前point之间自然构成 region。但transient-mark-mode(常简称tmm)打开后,就是“现代编辑器”的那种选中方式。cua-mode里面已经 包含了这个设置,而且v23.1之后版本tmm也是缺省打开的。

2 Emacs比较常用的是fringe,有左右fringe之分,left-fringe可用来显示代码折叠用的+/-号(比如 hideshowvis(效果图)和semantic-tag-folding(效果图), right-fringe可用来标识代码中的问题(比如 flymaker+rfringe(效果图)。其实Emacs里面也有margin,但很少用到,我见到的唯一例外是Emacs自带的linum-mode。

3 这并不是说 hideshow/outlne跟code folding在名词上是对应的,而是目前Emacs实现代码折叠的两种方法 而已(当然,也还有其它方法,比如semantic-tag-folding)

4 这两个也不是严格的名词对应,只是功能上的对应。如果你想要打开显示上的自动换行,应该使用的命令是 toggle-truncate-lines或者visual-line-mode(后者是按单词边际换行)。如果你想要输入达到一定列(比如80) 的时候就自动插入一个换行,应该使用的是auto-fill-mode。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/05/05/emacs-ancient-glossary.html)

2012年2月27日星期一

[python] 介绍几个Interactive Shell (上)

用Python编程,免不得需要做些实验,你可以python interactive shell 里面试一下某个表达式是否正确,某个包 是怎样使用的,用dir(obj)看看一个对象都有些啥属性,用help(foo)查看帮助。。。

另外一方面,matplotlib这类扩展(或者说应用?)更是以interactive shell作为主要交互界面了。

不过python自己的interactive shell 还是弱了一点,比如没有代码补全,没有语法高亮,不能一次选择历史里面 的多行进行重用。下面简单介绍几个增强型的Python Interactive Shell.

IDLE

http://wiki.python.org/moin/IDLE

IDLE 是python的自带IDE(是的,它有编辑器、有调试器、还有这里讨论的interactive shell功能),采用tk编写 界面,虽然功能不是太强,但好在自带,并且跨平台,可以救急用用。

IDLE里面的interactive shell相对终端版本(就是不带参数运行python,或者带-i参数执行时出现的shell)而言, 多了几个功能:

  • 代码高亮
  • 代码补全(按tab键出现)
  • 显示函数说明,比如输入"os.path.isfile("后它会以提示框现实os.path.isfile这个函数的signature和文档

BTW: idle的shell里重用历史记录的快捷键是Alt-p(上一条)和Alt-n(下一条) —— Emacs用户表示这很自然 :-)。

又: 有个IdleX项目, 为IDLE提供了一些增强扩展和插件,在编辑、执行、帮助、shell各方面都有增强,有兴趣的 可以试试。下面是与shell相关的增强:

  • Terminal-like behavior for Shell. Cursor stays in prompt and up/down arrow keys cycle the command history.
  • Persistent history of Shell commands across sessions.
  • Paste and run multiple lines in the shell.
  • Non-blocking interactive GUI development for Tkinter, GTK, Qt, Qt4, PySide, wxPython
  • Matplotlib support for interactive figures when using the subprocess.
  • Clear Shell Window without restarting.
  • Capture large output and display it as an expandable button.

DreamPie

http://dreampie.sourceforge.net/






DreamPie 的功能定位比较单一,没有IPython里面的并发、shell命令等功能,它只是要改善一般使用interactive shell时候的不便: 多行输入/重用不方便、没有代码补全,没有即时的函数帮助(calltip)等。

dreampie有几个特色功能:

  • 支持代码高亮,随着你的输入自动变色,而且支持色彩主题(缺省提供dark/light两套,要自己配置也可以);
  • 在界面下方提供了一个多行输入框,你可以方便地编辑多行输入,比如回到上一行去修改;
  • 如果一段输出比较长,它可以将它折叠起来,方便你查看前面的内容;
  • 支持Python/Jython/IronPython;
  • 可以将整个交互过程保存为一个漂亮的HTML,颜色/缩进都很好地保留下来了——而且你下次还可以加载这份历 史,继续探索!
  • 如果你的语句进入了死循环,或者因为I/O等原因无法完成,你可以用Ctrl-C中止它,但你的会话不会就此中 止了(但在wxpy的python shell里面(见下节),就会中止),你的历史记录也还在

wxpython里面的PyShell, PyCrust和PyAlaMode

这是wxpython里面自带的工具,其实PyCrust = PyAlaCarte + PyFilling, 而PyAlaMode = PyAlaCarte + PyShell + PyFilling。其中PyShell是python shell交互功能,PyAlaCarte是个简单的Python代码编辑 器,PyFilling是个对象察看器。所以PyAlaMode就是相对PyCrust多了文件编辑的功能。


在代码高亮、自动补全、自动显示帮助方面,wxpy跟其它python shell差不多,不再多数。唯一需要介绍的是 PyCrust/PyAlaMode下方面板里面的几个标签:

  • Namespace 标签的功能相当于dir()函数,它列出当前python shell名字空间里面的所有对象,以及它们的属性;
  • Display 标签的功能相当于print()函数,它会以字符串方式展示出一个对象,而且是调用pprint模块来显示 的,用法是在shell里面想使用print()的时候改用pp()这个函数,该对象就会在这里列出结果了;
  • Calltip 标签页显示一个函数的signature和帮助,这个函数是你在shell里最后一次输入的函数名
  • History 标签页列出在shell中所输入的全部历史
  • Dispatcher 标签页——我不太清楚 :-(

参考文档:

PyCrust的改进版本: PySlices

http://code.google.com/p/wxpysuite/

PySlicesScreenshot

这是PyShell/PyCrust的改进版本:

  • PySlices改进了多行输入的方式,一般的python shell只是在class/def/if/for这类语句后面呈现多行输入方式,

等你输入下一行。但PySlices缺省是多行输入,你可以在输入多行后,按Ctrl-Enter一并提交执行。也可以切换到 旧方式(在菜单Options->Settings->Enable Shell Mode)。

  • PySlices还从IPython学了几个功能过来:
    • 函数调用的括号是可选的,比如"dir a"等同于"dir(a)"
    • 支持一些常用unix shell命令,比如pwd, cd, ls
    • 支持调用外部命令,只要命令行前面添加!就可以了,比如"!grep –help"
  • 多行的输入/输出可以折叠起来,跟DreamPie差不多

最后说一下安装,从wxPython的ChangeLog看,应该是在2.8.11就合入了wxPython,但在Debian的安装包里又没有看 到,很奇怪。所以可以先安装python-wxtools 包,然后从 http://code.google.com/p/wxpysuite/downloads/list 这里下载,然后将PySlices*.*这几个文件提取出来即可 (需要简单修改一下两个py文件,将 ="import wx_py as py"= 修改为 ="import wx.py as py"= ; 如果你不安装 python-wxtools的话,也可以直接全部使用这里下载的,那就用不着修改了)。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/02/27/python-interactive-shells-1.html)

2012年2月21日星期二

介绍几个Windows下的小工具

随手记: FlashPad

作者的介绍:

FlashPad是一款轻便的笔记工具。随时按下快捷键(缺省为Alt+Z)可调出它,再次按下相同快捷键或ESC键则可令其隐藏、回到系统托盘中。您可在日常工作中使用该软件快速地记下瞬间灵感、工作备忘、或者电话号码。

和Windows自带的记事本不同的是,FlashPad会自动保存您输入的全部内容,并支持多页(TAB)显示。

此外,FlashPad 支持数学计算,输入“1+2”,按下 Ctrl+Enter,即可出现计算结果,方便您进行简单的日常计算。

我觉得这个工具是我一直在找的:它满足的是“随手记”这个场景,你可以随手记录些杂七杂八的内容,多条记录简单地通过”---”分隔,多标签页可以用来能简单地分个类。自动保存,启动时自动加载,不会用“要不要保存”这类问题来烦你。

我使用过其它一些工具,都不太能满足这个简单的场景:而CintaNotes得一条条地记录,适合记录一些“有所得”的内容,还得分开填标题、链接、Tag什么的,用在这里太拘谨了; minipad2每条记录都需要独立编辑,调整内容不太方便; BooguNote操作太麻烦了,点来点去我还不如用org-mode; 而ATnotes/TurboNotes等桌面贴的编辑功能又比较差。

flashpad screenshot

剪贴板历史管理: ArsClip

剪贴板历史管理工具有很多不错的,善用佳软推荐的CLCL、ClipX都是不错的选择(详情参见: CLCL和ClipX:最实用的剪贴板增强工具,免费超小_善用佳软_新浪博客 和 剪贴板增强软件综述:CLCL,ClipX,Ditto等(更新ArsClip) | 善用佳软 这两篇)。

不过我有一个比较特殊一点的需求:要求保留的历史记录比较多。虽然大多数这类软件对于记录多少条历史,都是可以配置的,但它们都很少为这种情况下做过特殊考虑:CLCL和ClipX都只是根据数量的增大而将菜单撑得很长很长,让人很难去选择,其实只需要列出最近的10来条记录,再老的记录就可以用个二级菜单、列表框之类的就可以了。另外,记录数一多,一条条让人眼去挑是很累的,所以能提供一个搜索功能是最好的(而且应该是增量式搜索)。——满足这个要求的,就只有ArsClip和Ditto这两个工具了。

arsclip menu

善用佳软选择Ditto作为首选(Ditto:首选的剪贴板增强软件 | 善用佳软),但用了一阵,喜欢不起来,主要是功能太多了,设置界面太复杂了,让人头晕。于是选择了ArsClip。

BTW: 除Ctrl-V之外的粘贴方式: 因为我使用vim/emacs/命令行这类程序比较多,Firefox也用keysnail配成了emacs的参见风格,它们都不是用Ctrl-V来粘贴,所以Ditto可以针对不同程序自定义粘贴方式(参见: Ditto官方说明  善用佳软的介绍) 这一点很吸引我,先让我犹豫了好一阵要不要切换到Ditto,后来我又去拿了ArsClip的代码来改(是的,虽然不是开源软件,但作者提供了源代码哦)——最后发现ArsClip提供了Shift+Insert、Mimic Typing、Clipboard Only这三种方式备选,也可以针对每个程序进行设置(见上图),基本上够用了。

链接: ArsClip:超強圖文剪貼簿 | T客邦

MuseTips Text Filter

这个工具也很简单,就是在打开一个文本文件,随着你的输入过滤出包含这些关键字的行。看下面这个gif就明白啦:

textfilter demo

由于Emacs里有这样的扩展(EmacsWiki: HideSearch),我正经编辑文件时都用Emacs。所以单独使用这个小工具的场合,主要就一个——搜索我在博客园的闪存: 我用闪存记录一些零星的心得、想法、问题、待办,然后差不多每月一次将闪存导出为文件,还用AutoIt写了段小脚本来调用TextFilter打开最新的闪存离线文件,刚才写这篇文章就用了好多次这个功能。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/02/21/a-few-windows-tools.html)

2012年1月28日星期六

colinux简明安装说明

很多时候我需要用一些gnu tools来处理一些文件/数据,以前基本上都是用cygwin来完成的。但后来发现了colinux,就不怎么用cygwin了,因为:

  • colinux里也可以直接读写Windows的文件(通过cofs)、访问光盘(通过cobd);
  • colinux 里面跑的是原生的Linux,你可以直接安装现成的软件包,尤其是Debian,安装包非常方便,仓库里的资源又异常丰富(cygwin的安装程序实在比较烦,cyg-apt倒还方便一点,但才发现不久。而且Cygwin的包并不是太多);
  • 你可以安装sshd, apache这些服务,然后结合colinux提供的port forwarding功能,你的Windows就有了这些服务了;
  • colinux 运行也非常快(cygwin里面的东东比较慢,尤其是编译程序,实在是慢得不行),内存耗用也不多,比VirtualBox/VMWare的虚拟机方式强不少;
  • cygwin不够稳定,尤其是fork层次较多时碰到的rebase问题非常恼人;
  • colinux下可用vncserver方式运行X ( 因为效率的关系,cygwin里面跑X实在力不从心啊)。

不过有另外一种场合可能不适合用colinux替代Cygwin,那就是其它工具需要调用gnu tools来完成某件事情(比如Emacs里面需要使用grep, find, diff等)——不过这种情况下大都可以用msys和gnuwin32了。

1. 下载colinux安装程序

http://sourceforge.net/projects/colinux/files/coLinux-stable/

2. 下载一个磁盘镜像,coLinux提供了几个主流发行版的磁盘镜像(更新频度不高,基本上只有大版本),,已经安装好了基本系统,只要下载解压即可:

http://sourceforge.net/projects/colinux/files/

比如Debian 6.0 squeeze:

http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Debian/Debian%206.0%20Squeeze/

3. colinux的基本配置: 以example.conf为底稿,拷贝一个debian6.conf(别的名字也可以),主要修改以下几个配置就可以了:

 # 上一步解压的磁盘镜像位置
cobd0="d:\colinux\root_fs.img
#将Windows磁盘以cofs文件系统类型提供
cofs1="c:\"
cofs2="d:\"

#设置slirp网络服务,这种方式这会将colinux虚拟机变得象一个普通应用一样访问外部网络
eth0=slirp



4. 然后就可以启动colinux了,命令行如下:

 $ colinux-daemon @debian6.conf  

它会自动打开nt console或者fltk console,这跟真实的console很象,甚至可以用Alt-F1..Alt-F6切换多个tty。这console窗口可以关闭再重打开,只要不关闭colinux-daemon进程即可。
(不喜欢那个显示Linux内核信息的窗口的话,可以用工具隐藏。或者将colinux注册为服务: colinux-daemon --install-service colinux @debian6.conf,然后用sc start colinux启动)

然后在guest os里面进行如下配置:
4.1 用cofs读写Windows磁盘文件: 编辑/etc/fstab,添加如下内容

cofs1 /mnt/c cofs defaults 0 0
cofs2 /mnt/d cofs defaults 0 0

4.2 配置网络。上面采用的是slirp方式, colinux会启动自动colinux-slirp-net-daemon.exe这个进程,它对guest os提供了一个dhcp服务器。guest os里面用如下命令可以跟这个dhcp服务器连上:

 $ dhclient eth0 


注意slirp方式下,linux里面启动的网络服务外面不能直接访问到,但可以通过slirp-net-daemon实现端口转发,方法是修改配置文件debian6.conf,在eth0=slirp后面添加一些内容(需要重启guest os才能生效):

 #forwarding port 5901 (vncserver) & 22 (ssh server)
eth0=slirp,,tcp:5901:5901/tcp:22:22

其它的网络配置方法:  coLinux wiki: Network。


5. 运行X的方法
网上大都说用Cygwin/X或者XMing来做X server(andLinux也是选用XMing),但实际运行效果很不好,一方面是Cygwin/X和XMing缺乏一些特性,另一方面是运行得非常慢,而且不太稳定,所以我推荐使用vnc的方式

5.1 修改colinux的conf文件,确保5901端口被转发

 eth0=slirp,,tcp:5901:5901/tcp:22:22/tcp:8080:80 


5.2 guest os里面的操作

 $ apt-get install vnc-serverroot 
$ apt-get install xfce4root
$ su - colinux
colinux # cat > ~/.vnc/xstartup <<< EOF
#!/bin/shstartxfce4 &
EOF
colinux # chmod u+x ~/.vnc/startup
colinux # vncserver :1 -geometry 1024x768 -depth 16


5.3 然后就可以在Windows里面用vncviewer连接上去了
(如果vnc-server启动的时候是用vncserver :2,那么vncviewer就得连5902端口(debian6.conf里面就得配5902端口转发)

5.4 关闭vnc服务的方法

 colinux # vnc-server -kill :1 

参考资料:

  • coLinux for dummies - coLinux wikia
  • XCoLinux - coLinux wikia
  • andLinux: 这是个coLinux的衍生品,提供了不少host os和guest os桌面集成方面的功能,让用户开箱即用: 集成了Windows端的X server (Xming)和sound server (pulseaudio),增加了Windows桌面工具条和通知栏菜单以启动linux程序,增加了Windows右键菜单以调用guest os里面的程序来打开文件,命令行andcmd.exe工具方便Windows里调用linux里面的命令行... 可惜09年5月发了beta 2之后没有再发过新版本。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/01/28/colinux-simple-guide.html)

2010年9月17日星期五

《亮剑》的真正結局

在班車上看完了《亮剑》的小说,悲惨的结局让我都落下泪来(真的)。好久之前在书店无意中发现《亮剑》电视剧比小说少了后面好大一截,一直说要看看,却拖到了现在。

想发篇博文讲一下《亮剑》的真 正结局,却被JavaEye博客系统认为包含敏感词拒绝了,还威胁说要记录我的IP。我 艹,还是回blogger写吧(去年因为blogger再次封闭,自己又较长时间没太大想写的欲望,于是博客就停了。因为javaeye网站上班时可以上,年初开始在那上面贴了点几分简单的备忘性质的博文,但似乎从没认真作为俺的“归属”对待过——不过那上面的闲聊倒用得挺多。)

再看一下中断之前的最后一篇文章,居然是《我的团长我的团》,也是一部被电视剧上阉割的小说,再联系如今网络被GFW步步紧逼的现状,唉!


-----------------------------
50年代未期,有反苏言论的丁伟军长被迫害致死。

66年,时任总参正军级的赵刚因拒绝与罗瑞卿划清界线,因不堪迫害,与冯楠双双自杀,死前将四个子女送到厦门李云龙处。

68年,造反派搞武斗,越搞越大,后来为了搞榴弹炮而冲击军队驻地,时任福建军分区的李云龙军长在厦门因下命令对冲击军队的造反派开枪,造成几十人死伤,全国轰动,被关押前,时任东北军区的孔捷军长派人将李云龙的六个小孩(四个是赵刚的)接到东北,不久李云龙开枪自杀,二天后,也被隔离审查的田雨用刀片割腕自杀,伤口向孩子嘴那么大....

当时国军金门岛楚云飞中将也以贝多芬的第二乐章表示哀悼。 

79年李云龙将军恢复名誉。

91年一位少将和五位大校齐聚厦门,哭倒在他们的父母旧屋之中.....

据说电视剧已拍到这些人的结局,但审查未通过,就播到授衔就止了。