Sublimetext3 如何为升华文本3上下文菜单指定范围?
我通过在Sublimetext3 如何为升华文本3上下文菜单指定范围?,sublimetext3,contextmenu,Sublimetext3,Contextmenu,我通过在Packages/user文件夹中创建一个context.sublime菜单文件,添加了一个右键单击上下文菜单来升华文本3,配置如下: [ { "caption": "wrap with try", "mnemonic": "t", "id": "try", "command": "insert_snippet", "args": { "name": "Packages/User/js-try.sub
Packages/user
文件夹中创建一个context.sublime菜单
文件,添加了一个右键单击上下文菜单来升华文本3,配置如下:
[
{
"caption": "wrap with try",
"mnemonic": "t",
"id": "try",
"command": "insert_snippet",
"args": { "name": "Packages/User/js-try.sublime-snippet" }
}
]
这个很好用。但我希望它只在当前文件是javascript文件时出现,就像您可以通过配置source.js
为代码段分配范围一样。一方面,我没有找到任何关于这方面的文档,另一方面,我看到上下文菜单的行为是这样的,所以我知道这是可能的。
有人知道如何实现这一点吗?菜单项的可见性由所引用的命令控制。请参阅位于的
is_visible
方法
由于此方法的内置insert_snippet
命令始终返回True
,为此,您需要编写一个(小型)自定义插件,作为所需命令的包装器:
- 从工具菜单->开发者->新插件
- 将模板替换为:
导入升华
导入升华插件
类ProxyCommand(升华插件.TextCommand):
def运行(自我、编辑、命令名、范围选择器、**kwargs):
self.view.run_命令(命令名称,kwargs)
def可见(自身、命令名称、范围选择器、**kwargs):
返回self.view.match_选择器(self.view.sel()[0].begin(),scope_选择器)
- 将其保存在用户包中,类似于
——基本文件名不重要,只有扩展名重要proxy\u command.py
- 现在,将上下文菜单项更改为:(注意,我们现在要求菜单项指向刚刚创建的
命令,并传入参数,告诉它应该为哪个作用域(选择器)激活,执行哪个实际命令以及使用什么参数。)proxy
sublime.load\u resource
API,然后解析XML),查看其中指定的
是否匹配,而不是要求在上下文菜单项中输入(/可能重复)
[
{
"caption": "wrap with try",
"mnemonic": "t",
"id": "try",
"command": "proxy",
"args": {
"command_name": "insert_snippet",
"name": "Packages/User/js-try.sublime-snippet",
"scope_selector": "source.js",
},
}
]