如何设置Sublime Text 3鼠标事件以触发自定义行为和默认行为?

时间:2013-11-20 09:05:55

标签: plugins python-3.x sublimetext3

我想覆盖Sublime Text 3中的双击以运行我的插件代码,当且仅当用户在某个视图中时。否则双击应该执行正常行为(突出显示文件中的单词和其他实例)。但是,我不希望在我的自定义视图中运行正常行为。

可以从https://www.sublimetext.com/forum/viewtopic.php?f=6&t=8823找到在Sublime Text 2(和Python 2)中实现此目的的相应代码,但我无法重构它以在Sublime Text 3(和Python 3)中工作。

Sublime Text 2的工作代码(取自上述链接)是:

class MySpecialDoubleclickCommand(sublime_plugin.TextCommand):
    def run_(self, args):
        if self.view.name() == "mySpecialBuffer":
            self.doMyStuff()
        else:
            system_command = args["command"] if "command" in args else None
            if system_command:
                system_args = dict({"event": args["event"]}.items() + args["args"].items())
                self.view.run_command(system_command, system_args)

为了让它在Python 3中工作,我重构了字典处理代码(否则代码是相同的):

system_args = dict({"event" : args["event"].items() | args["args"].items()})

但是,当我调用run_command(system_command, system_args)方法时,它会返回以下错误消息:

File "C:\Program Files\Sublime Text 3\sublime.py", line 607, in run_command
sublime_api.view_run_command(self.view_id, cmd, args)
TypeError: Value required

由于Sublime Text 3的API文档几乎不存在,我试图弄清楚我的system_args字典中是否存在某些问题,或者API是否只是以其他方式更改了?

2 个答案:

答案 0 :(得分:2)

问题已经过时了,但最好迟到而不是抱歉,今天偶然发现它

我认为

ValueErrorsublime.decode_value(string)

抛出

这个方法将JSON字符串解码为一个对象,正如我想在run_command中使用然后解析args从键击或调用internaly运行命令。

.sublime-keymap文件包含一个JSON数组,其中包含用于指定键绑定的JSON对象。 JSON对象必须包含keyscommand键,如果命令需要参数,则还可能包含args键。

因此,如果arg值不是有效的JSON对象,则会得到ValueError

解决方法 - 传递字符串或数字

view.run_command('name', {'string_arg': 'string', 'num_arg': 1})

class NameCommand(sublime_plugin.TextCommand):

    def run(self, edit, string_arg, num_arg):
        pass

或者将对象转储为JSON字符串传递给命令并在位置恢复

答案 1 :(得分:0)

我自己没有做任何鼠标绑定的东西,但看起来你缺少run命令的参数。注意它预计3个parms,你只给。您是否尝试过self.view.id作为第一个parm(基于错误,这可能是它所期望的)。