2006年08月23日

这个名字是德国朋友给起的,还不错。不过改名字可不是件容易的事,因为许多地方都是相互关联的。象svn, wiki,源文件,还有许多的Blog。有些是很难改的,至少以前的Blog不会更改了。以后的内容尽量使用 UliPad 这个名字。希望尽快发布一个新版本 3.3吧。

对于运行来说,原来是 NewEdit.py或NewEdit.pyw现在改为 UliPad.py 或UliPad.pyw。如果你做了快捷方式请改一下属性。对于从原来的版本直接升为 UliPad 版本,你需要将newedit.ini改为ulipad.ini,如果在启动时出现问题,将newedit.ini删除,虽然以前的配置丢了,不过问题不大。

UliPad的Logo改了一下,图标也换掉了,不在使用M$的MSN Explorer的图标了。

邮件列表创建了一个新的      http://groups.google.com/group/ulipad,原来的还可以使用。svn以后考虑再换。

svn现在改为: http://cvs.woodpecker.org.cn/svn/woodpecker/ulipad/trunk

以后与 NewEdit 相关的Blog都会改成 UliPad。

Update:

关于UliPad的来源

Claudio Grondi said:

As we are on the way to make NewEdit THE programmer editor I think, that
a new unique name will help here much (NewEdit is just cheap…).

I suggest to use ‘UliPad’.

It has the shortcut of UnLImited.
It tells it is a plain text editor (Pad).
It tells something about the original author (LImodou).

But the most important advantage is:

 Google has no entry for ‘UliPad’ yet!

2006年08月22日

以前是每个文档都对应一种词法分析的名字,如 Python, html 等,因此自动补全文件也是针对词法分析的名字来的。但这样存在一些问题。比如象 reStructuredText 就没有一个标准的后缀,很难根据后缀指定它的词法分析名,因为它可以是.rst或.txt。因此现在开发了可以为某一文档选择你要使用的自动补全文件。

如果你要使用,先要下载最新的 NewEdit 的源码,或者从svn中同步。在文档菜单中有一个Apply Auto-complete Files的菜单,选中它就可以弹出一个对话框,其中静态文本表示缺省的自动补全文件,下面的列表框是已经选中或未选中的自定义补全文件。这样你可以方便地在编译一个.txt文件时指定它为某种特殊的格式,从而应用某种自动补全功能。

同时自动补全进行了增强,可以在自动补全文件中使用Ctrl, Alt, Shift, 功能键等的组合,要求必须放在匹配串的最后,用 % 号包括起来,如:

Test%ESC% = Test a line

这样当你输入完Test后,按下ESC时会执行后面的处理。关于具体自动补全功能的使用还请查阅以前的 Blog 。

NewEdit 可能要考虑改名了。这是德国朋友的建议,不过因为涉及许多要修改的地方,一时还没有动。等到有合适的机会改一下,换个新气象。

2006年08月09日

这个功能可能和别人编辑器不一样。UltraEdit我没有试,不过试用了一个叫Crimson的软件,它支持列模式。于是经过改造,NewEdit也以持了。操作如下:

1. 列操作块的定义

首先对列进行操作,需要先定义一个列块。那么在 NewEdit 是以行为标识的。你要先选中多行,然后执行右键菜单中的 Column Mode 或编辑(Edit)菜单下的 Column Mode,或者还可以按 Ctrl+Shift+C 启动。如果可以启动,则在相应行的左侧边会看到有一条黑线,它标识列操作块的大小。如果你的光标移出了这块区域,那么这个列块定义就自动取消了,只能重新定义。

2. 如何编辑

在列块中可以自由移动光标,当你在任何一行按下一个字符,那么其它的行自动在相同的位置也出现相同的字符。注意,如果某些行的长度不足当前行的长度,那么它只是将新的字符加到最后,这样可能就不是对齐的。

目前列编辑模式也支持中文了。不过测试并不完全。同时还支持一些功能键,象Tab, Backspace, Delete。其它的目前还不支持。

有兴趣的可以下载最新的snapshot,或更新你的svn代码(现在啄木鸟的svn在zoom.quiet的努力下已经恢复了正常)。

Update:

列模式不再自动取消,而是有一个独立的状态了。快捷键改为Alt+C。选择方式有所变化。当未进入列模式时,你选中了多行,然后当选中列模式时,自动将选中行设定为列模式块。如果在列模式状态下,你选中多行(可以使用鼠标或shift+光标)自动更新列模式块。如果选中文本在一行内,不做列模式的设定。

当输入字符时,不同的行的长度可能不同。如果输入字符的列超出某一行,则自动补齐空格。

同时我还增加了一个快捷键,与列模式无关:Ctrl+Del这样可以自动删除当前位置后面的所有空白,包括回车和制表符。如果后面不是空白,则使用缺省的功能,将删除一个单词( 以前都不知道,这回试出来了) 。

2006年08月08日

这是上次我提到的那个德国人向我提起的,他还在与我交流。他提到有一个列模式很好,看 NewEdit 是否可以实现。我以前从来没有用到过这种编辑方式,还以为是块拷贝呢。结果实现了一下,才发现,不是这么回事。老外向我解释说:当进入列模式,你可以一次选中多行,然后如果你在开始的行的位置输入一个字符,你会发现,所有选中的行都同时出现了相同的字符。也就是自动进行了复制。在 UltraEdit 中,还可以执行一些菜单在列模式下插入一些有规律的值(我同样没有用过)。说实在的,我以前真的没有想过还有这样的编辑方式,也不知道这个功能到底有多大的用。不过我仍然可以使用其它的方法来实现。说白了,就是充分利用 NewEdit 可以编程的功能。

比如要生成下面的结果:

00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
01 11 21 31 41 51 61 71 81 91 A1 B1 C1 D1 E1 F1
02 12 22 32 42 52 62 72 82 92 A2 B2 C2 D2 E2 F2
03 13 23 33 43 53 63 73 83 93 A3 B3 C3 D3 E3 F3
04 14 24 34 44 54 64 74 84 94 A4 B4 C4 D4 E4 F4
05 15 25 35 45 55 65 75 85 95 A5 B5 C5 D5 E5 F5
06 16 26 36 46 56 66 76 86 96 A6 B6 C6 D6 E6 F6
07 17 27 37 47 57 67 77 87 97 A7 B7 C7 D7 E7 F7
08 18 28 38 48 58 68 78 88 98 A8 B8 C8 D8 E8 F8
09 19 29 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AB BB CB DB EB FB
0C 1C 2C 3C 4C 5C 6C 7C 8C 9C AC BC CC DC EC FC
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE BE CE DE EE FE
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF

你会怎么处理呢?在NewEdit中?

我会这样做,打开要写入的文件,然后在 shell 窗口中对其直接进行编程,将结果写入打开的编辑器中:

d = app.frame.documtn
for x in range(16):
    buf = []
    for y in range(16):
    buf.append("%X%X" % (y, x))
    d.AddText(‘ ‘.join(buf) + ‘\n’)

你还可以写一个Script,并且将其设置在菜单项中,就可以反复执行了。这里允分使用了 shell 窗口中可以通过 app 对象得到 NewEdit 实例的这一功能,这样我可以方便地访问当前打开的文档。

当然我所想到的方法是对于喜欢编程的人来说的,对于不熟悉的人可能执行起来困难。所以 NewEdit 的定位其实是爱编程的 Python 程序员。不过列模式有没有实现的意义呢?一时还想不出啊。

2006年08月06日

这几天有一位德国人与我交流 NewEdit 的开发和设计思路,本来讨论得挺热闹,不过因为我只对文本编辑器感兴趣,而他对富文本好象更感兴趣,而且他对于 NewEdit 采用的 Mixin 技术并不看好,于是谈话结束了。不过仍然非常感谢他,在他的帮助下,我又完成了几个功能。而 NewEdit 已经好久没有更新了,只是非常零散的更新过一些小地方。这次主要的更新有:

  1. 重新打开时光标停留在以前的位置上

    以前很简单,重新打开文件后停在文档的最前。这位外国朋友认为不好,于是我试着保存光标位置,然后打开后进行恢复。但是所在行和滚动条位置并不理解,还是有些变化。而在他的帮助下,我终于完善了这一功能,重新打开后光标和滚动条的位置与之前是一样的。非常感谢,他还帮我检查了一处遗望修改的地方。通过这一更新,我再接再励,把session打开后的恢复做得更好了。这样当再次启动 NewEdit 时,每进入一个文档,光标首先停在原先关闭时的位置。非常不错。

  2. 解决了DDE的socket重用问题

    以前关闭再打开经常会出现一个问题:有可能启动不了 NewEdit 。为什么?因为如果你使用了 DDE 功能,而我采用的是 socket 来实现的。如果上次关闭时有问题,这个 socket 联接不会释放,下次再启动时就无法得到这个端口。虽然我可以通过修改 config.ini 文件来手动设定使用的端口号,但这样的确不方便。后来想如果重用端口是否就可以了呢?改过之后,至少在后来的使用时再也没有出现过类似的情况,因此我想应该算是解决了吧。

  3. 增加对缩近拷贝的支持

    在编写对reStructuredText文学编程支持的小工具时,我知道了noweb(文学编程工具的一种)可以支持带缩近的拷贝。也就是说,如果一段文本在拷贝时,它的起始位置不是第一列,而是缩近的,那么所拷贝的文本如果有多行,每行都会进行缩近。其实在使用Eclipse时也有这样的功能。拷贝一段文本,然后在粘贴时,Eclipse会根据光标位置的缩近情况自动对粘贴的文本的缩近进行调整。我觉得这个功能应该还是有用的。因此在NewEdit中增加此功能。它可以处理两种情况。当插入点的光标位于第一列时,它会当前行的缩近值进行缩近。如果停留列不是第一列,它会自动判断空格的个数,然后进行缩近。不过我的测试少了些。同时是否使用这一功能,还可以在参数中进行控制。Auto indent as pasting这个检查框就是用来控制的。

  4. 特别是增强了自动完成功能

    其实自动完成(Auto-complete)是NewEdit中的一个亮点,这里不是说的在你按下’.'之后弹出属性选择的功能,而是当你输入某个字符,如果在acp文件中有对应的配置,它可以对输入的信息进行扩展。比如,你输入def,然后输入一个空格,NewEdit会自动扩展为def ():同时,光标停留在括号前。其实这一功能并不是才开发的,3.2版发布时就有了。而且这些功能都是可以自定义了,因此你可以增加你需要的东西。这一功能有些编辑器也有,特别是textmate,这是一款只能在mac操作系统上用的软件。现在我又增加了可以在acp配置中设置对应一个python的方法的调用。因此你可以插入一个方法,然后写一个程序来进行处理,这样可以进行更复杂的操作。目前还没有写出详细的使用说明,回头加上。现在已经完成的一个功能就是对from xxx import 的自动弹出xxx模块属性的支持。以前没有这个功能,现在由于自动完成功能的增强,可以实现这一功能了。

最新的代码目前无法提交到啄木鸟的SVN中,好象出问题了。不过我已经打包放在了 Wiki 页面上,下载最新的snapshot_newedit.zip就可以。直接下载

2006年02月09日

以前发布 NewEdit 的exe版本之后发现在运行时,外观不象直接从源码运行是xp风格的,一直也没有太在意。今天在 wxPython 邮件列表中偶然发现了一个解决方法,可以看这里。这个文档是 wxPython 的 FAQ。方法很简单:

从 wiki 上将提供的一个 manifest 的xml代码拷贝到NewEdit.exe.manifest,然后把它放在 NewEdit 的安装目录下,再启动 NewEdit 就可以了。于是我将其一起放入 NewEdit 的代码中了,以后再生成 exe 时自动就打在一起了。

2006年01月25日

地址在这里

版权是  Creative Commons Attribution 2.5 License 。

有时间把 NewEdit 的图标换一换。

2006年01月20日

以前一直没有装好 Ubuntu 上的 wxPython ,现在终于装好了。我想我要花不少时间在Linux下开发了。经过试验有不少地方与 Windows 差别很大。象 TreeCtrl ,在windows显示得挺漂亮,但到了Linux下,这一根线,那一根线的好难看,我只好根据平台不同去掉完事。ClassBrowser还是一运行就 CoreDump 。DirBrowser运行就报错,后来发现 windows 下与 Linux 下处理真是有差别:

在windows下,刚开始我创建了一个root结点,但设置它为隐藏。于是在点右键时,我会调用一个方法得到与这个结点相关联的信息 GetPyData() 。但因为 root 结点是隐藏的,因此我并没有给它设值,这样一取就出错了。原因是:在取结点前,我首先根据 GetSelection() 得到当前选中的结点。在 windows 下,隐藏结点是不选中的,因此我不会得到隐藏的 root 结点,但在 Linux 下却一样可以得到,因此报错。于是我只好再加一个判断如果是root结点就跳过。

wxPython虽然是跨平台的,但要想做好还是不容易的。要多在不同的平台上进行测试才可以。

再如我使用xrc做的一些对话框,在打开时输入焦点并不在第一个控件上,因此要我手工点,好象按ESC也关不掉,位置和字体都有一些变形,而这些在windows下都显得不错。很多象这样细小的地方都要调整才可以。

慢慢改吧。

2006年01月17日

新增功能:

  1. 增加当MessageWindow中出错异常时,可以根据当前行的异常信息自动跳转到出错文件的指定行的功能
  2. Windows平台中增加目录浏览窗口中,对某个目录打开Dos窗口的功能
  3. 自动保存上次打开目录,再次启动时自动打开上次目录
  4. 可以在config.ini中设置缺省编辑器的字体,在中文环境下为“宋体”
  5. 自动判断python文件的编码并进行转换后保存
  6. 增加新建文件时缺省编码的设置,如果用户定义编码不为空,则用户定义编码将作为缺省编码。如果为空则使用缺省编码。
  7. 在编辑窗口的右键菜单上增加修改文件编码菜单
  8. 增加 TODO 窗口
  9. 增加简单贴功能,并可以自动保存位置和大小
  10. 根据文本类型自动选择注释符,并且可以在config.ini中设置使用comment_chars作为节,同时语言为key,可以有一个default作为缺省值
  11. 增加ruby classbrowser功能
  12. 增加对动态菜单快捷键的处理
  13. 增加对debug生成的控制,缺省情况下debug不输出,需要在config.ini中设置才输出
  14. 在参数中增加一个设置document语法高亮的按钮
  15. 增加自动扩展功能,并支持项目处理及嵌套处理
  16. 增加简单模板功能,可以在code snippet中加入 <#{name=inputname,description=info,defult=value}#>,这样在双击snippets会弹出对话框让你录入信息。
  17. 可以设置某个目录工程类型,用在某些扩展中
  18. 增加代理服务器参数设置
  19. 增加网络分享窗口,目前只用于Rss Reader

新增插件:

  1. rssreader RSS阅读器
  2. docbook docbook的支持
  3. djangoproj django项目的支持

新增快捷键:

  1. Alt+C 清除Shell窗口的内容
  2. F5 Python程序运行

修改:

  1. 解决pyw的多线程运行阻塞的问题
  2. 修正模块信息显示出错的问题
  3. 在执行Tab与空格切换的菜单后自动调整缩近符
  4. 更新image有效性的判断处理
  5. 修正ftp目录分析的一个bug
  6. 调整文档切换时菜单的动态生成,及语法切换的问题,减少不必要的更新

源码下载:newedit_3.2.zip
Window版下载:NewEdit3.2.exe
欢迎大家订阅NewEdit的邮件列表,可以在上面提问,并且最新的消息都会发布在上面。

不是正式的发布,只是分支合并了。原本希望改善导入从而提高启动速度,但最终的发现是:由于debug功能造成启动很慢。只要关闭这项功能启动速度就非常快了。但还是采用新代码。如果你已经打开了debug功能,关闭它就可以提高速度。关闭的方法:

修改 config.ini

[default]
debug = 0

如果没有这些内容,不用管它,缺省情况下NewEdit是不使用debug的。只有上面的debug = 1才会启用。

svn和wiki都已经更新,欢迎下载使用。

在我的机器上 启动时间在4秒之内,一般为3秒。如果刚开始没有文档的话,可以到2秒。也许计算有出入,但关掉debug功能可以使启动速度大大提高。