我想覆盖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是否只是以其他方式更改了?
答案 0 :(得分:2)
问题已经过时了,但最好迟到而不是抱歉,今天偶然发现它
我认为 ValueError
被sublime.decode_value(string)
这个方法将JSON字符串解码为一个对象,正如我想在run_command
中使用然后解析args从键击或调用internaly运行命令。
.sublime-keymap
文件包含一个JSON数组,其中包含用于指定键绑定的JSON对象。 JSON对象必须包含keys
和command
键,如果命令需要参数,则还可能包含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(基于错误,这可能是它所期望的)。