联盟首页 协同开发 共创软件 开放源码 软件工程 共创论坛 关于联盟
  您的位置 » 2004年10月29日  
通过SSL登录
新用户通过SSL注册

完全匹配   
项目摘要

项目维护

软件分类表
新发布软件
代码片断

项目名称: NewEdit:
文档管理: 显示文档


摘要| 管理| 首页| 论坛| 跟踪| 错误| 支持| 补丁| 电子邮件| 任务| 文档 |  调查| 新闻| CVS| 软件包|

提交新文档 | 查看文档 | 管理

FlyEdit插件文件格式说明


作者:limodou



FlyEdit的插件就是Python的一个模块,不过想要使其加入到FlyEdit的环境中,需要遵守一定的格式,下面为插件格式的说明。



目前FlyEdit插件可以允许你自由定义主菜单项、加速键、右键菜单项、工具条。可以一次在一个文件中定义多个插件。由于Python语言的动态性,你可以使用所有FlyEdit的资源。但最主要的是使用文本编辑框中的文字。


下面以FlyEdit中所带的插件 addcomment.py 为例进行说明。


插件说明: addcomment.py


#add comment

__all__=\
    [
        'keylist',
        'eventlist',
        'menulist',
        'rmenulist',
        'on_plugin_addcomment'
    ]

menulist=\
    [
        ('_Plugin',
            [
                ('Add Comment\tCtrl+1',     '<<plugin-addcomment>>')
            ])
    ]

rmenulist=\
    [
        ('Add Comment\tCtrl+1',     '<<plugin-addcomment>>')
    ]

keylist=\
    {
        '<<plugin-addcomment>>':     ['<Control-Key-1>']
    }

eventlist=\
    [
        ('<<plugin-addcomment>>',     'on_plugin_addcomment')
    ]

def on_plugin_addcomment(self, event=None):
    w=70
    comment='\n'+"#"+'-'*w+'\n'+"#\n#"+'-'*w+'\n'
    self.dselect()
    self.set_select_text(unicode(comment))

1.定义输出项


全局变量 __add__ 为一个列表,它定义了所有将要输出到FlyEdit中的对象。此处为加速键列表( 'keylist' )、事件列表( 'eventlist' )、主菜单项列表( 'menulist' )、右键菜单项列表( 'rmenulist' )、事件列表( 'eventlist' )、工具条列表( 'toolbuttonlist' )、和处理方法名( 'on_plugin_addcomment' )。注意,输出对象均为字符串表示。如果有多个菜单项,则要对应多个处理方法,则相应的处理方法依次列出。


2.加速键列表

加速键列表对象必须为: keylist 。它是一个字典,关键字为事件的名字,值为对应的加速键。事件(相当于一个功能,但并不是真正的功能,而是功能的一个名字)的名字由你自已指定,它是一个字符串,且一定要用'<<'和'>>'包括起来,如例中的:'<<plugin-addcomment>>'。值为一个加速键的列表,所以一个事件可以对应多个加速键。每个加速键都用字符串进行定义。不同的功能键有相应的字符表示,如:


Control Alt Shift F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12

对于组合键,用 '-' 将键的字符串表示连接起来。对于某些组合键,如: Control+1 等应表示为: '<Control-Key-1>'注意,对于加速键事件的字符串表示,应前后加 '<''>'[1]


3.主菜单项列表

主菜单项列表对象必须为: menulist 。它是一个列表。每项为两值元组对象(tuple)。元组对象的第一个元素为菜单项提示信息,后面为菜单项对应的事件名。如果当前菜单有子菜单,由第二项应为一个列表,此列表则应该为子菜单结构。故主菜单项列表的定义为一个递归定义。如本例中定义为:主菜单 Plugin 下有一子菜单,子菜单提示为: 'Add Comment\tCtrl+1' 。对应的事件(功能)为: '<<plugin-addcomment>>' 。对于子菜单的提示,要注意,如果在某个字母前加入下划线( '_' ),则表示它后面的字母为快捷键,当在菜单上进行选择时,按相应的快捷键可以直接执行菜单功能。它的显示为快捷字母有一下划线。如果菜单还有相应的加速键,则应由你加入此说明,即在菜单项的提示后面加上: '\t加速键的说明' 。此处为: '\tCtrl+1' 。这样的定义只是一个说明,并不会自动转换为加速键的定义。


对于FlyEdit的插件菜单是可以自动融合的。对于你定义的菜单项,应完全按照实际的菜单布局进行定义,即第一层应为菜单条,后面为相应的子菜单。那么定义完之后,处理过程是这样的:


根据提供的菜单结构定位相应的父菜单,如果找到,则将子菜单追加到父菜单的后面;如果没有找到,则定义的新菜单级别。这样,如果有相同的菜单结构,则菜单会进行融合。如第一个插件为: addcomment.py ,生成新的菜单项 Plugin ,下面有一个下拉菜单,下拉菜单有一菜单项 'Add Comment' 。如果还有一个插件: blank2nbsp.py ,则会在菜单项 Plugin 的下拉菜单中增加一项 'Blank to &nbsp;' ,即菜单进行了融合。

要注意,由于菜单会进行融合,则定义上级菜单时应严格菜单的字符串写法,要完全相同。


4.右键菜单列表

右键菜单列表对象必须为: rmenulist 。它是一个同 menulist 相似的列表,不过它没有相应完整的菜单结构,而只是从子菜单开始定义的。


5.事件列表

事件列表对象必须为: eventlist 。它是一个列表,每个元素为两值元组对象。元组第一个值为事件的字符串表示,第二个值为事件对应的处理方法名字。


6.事件处理方法

还要定义事件对应的处理方法,一个事件应对应一个处理方法。要注意的是,不同的插件不能有同名的处理事件和方法。方法应定义为类的方法,同时还要带一个 event 的事件参数,如:


def on_plugin_addcomment(self, event=None):

    w=70
    comment='\n'+"#"+'-'*w+'\n'+"#\n#"+'-'*w+'\n'
    self.dselect()
    self.set_select_text(unicode(comment))

其中 self 将为正在使用的编辑窗口对象,因此你就可以使用编辑窗口对象中的所有函数。一般说来,插件的任务是对正在编辑的文本进行处理,所以只需要使用某些方法即可,它们为:



  1. self.get_select_text()   它返回选中的文本,如果没有选中文本则为None

  2. self.set_select_text(text)   它用来替换当前选中的文本。

  3. self.dselect()   它取消文本的选中状态。

  4. self.get_region()   它返回选中的文本,返回值为一个四值元组对象 (head, tail, chars, lines) 。其中 headtail 为选中文本开始与结束的位置。 chars 为选中的文本, lines 为选中文本的行列表。

  5. self.set_region(head, tail, chars, lines)   为 self.get_region() 的反向函数。它用来将选中文本进行替换。应与 self.get_region() 配合使用。且 chars 不应做改动,而只修改 lines


7.工具条

在FlyEdit中还可以定义工具条,格式如:


#toolbuttonlist

toolbuttonlist=\
    [
        ('image/new.gif', '<<file-new>>'),
        ('image/open.gif', '<<file-open>>'),
        ('image/save.gif', '<<file-save>>'),
        (None, None),
        ('image/cut.gif', '<<Cut>>'),
        ('image/copy.gif', '<<Copy>>'),
        ('image/paste.gif', '<<Paste>>'),
        (None, None),
        ('image/undo.gif', '<<undo>>'),
        ('image/redo.gif', '<<redo>>')
    ]

工具条对象必须为: toolbuttonlist 。它是一个列表,每个元素由两值元组对象构成。每个元组为:工具条图片和对应的事件。注意:只支持gif格式文件。如果需要增加分隔符则应定义为 (None, None)




[1]关于Tkinter的事件和键值的定义请参考Tcl/Tk的手册。

  » 合 作 伙 伴