某些升华软件包(如MarkdownEditing)根据语法将其命令隐藏在命令选项板中。有没有办法克服这个问题?

某些升华软件包(如MarkdownEditing)根据语法将其命令隐藏在命令选项板中。有没有办法克服这个问题?,markdown,sublimetext3,sublime-text-plugin,Markdown,Sublimetext3,Sublime Text Plugin,例如,MarkdownEditing有一些用于导航标记文件的有用命令。但是,除非文件专门设置为标记语法,否则它会从选项板中隐藏其命令。起初,这似乎合乎逻辑 但是,对于大型标记文件,有时最好在不突出显示语法(即纯文本语法)的情况下查看这些文件,因为文件打开速度更快,但是用户无法访问调色板中的标记编辑命令,这是一个遗憾,因为当某些命令(如折叠页眉)真正亮起时,会显示大型文件 这只是一个例子,但我相信在这里解决这个问题可能会帮助其他在调色板中隐藏命令的包有类似问题的人 我发现了这个软件包,这确实允许用

例如,MarkdownEditing有一些用于导航标记文件的有用命令。但是,除非文件专门设置为标记语法,否则它会从选项板中隐藏其命令。起初,这似乎合乎逻辑

但是,对于大型标记文件,有时最好在不突出显示语法(即纯文本语法)的情况下查看这些文件,因为文件打开速度更快,但是用户无法访问调色板中的标记编辑命令,这是一个遗憾,因为当某些命令(如折叠页眉)真正亮起时,会显示大型文件

这只是一个例子,但我相信在这里解决这个问题可能会帮助其他在调色板中隐藏命令的包有类似问题的人


我发现了这个软件包,这确实允许用户向调色板添加新命令,但是如果您为插件添加一个现有命令,而该插件通常会像前面提到的那样隐藏它,那么它将不会显示该命令。

在这种特殊情况下,我认为最简单的方法可能是更改软件包本身。因为MarkdownEditing在从包控制安装时不安装源代码,所以您必须手动安装它(这是此特定包的自述文件),然后自己调整代码。如果有人有某种覆盖,不需要调整包本身,这将很有帮助,并大大降低难度,因为有些包相当大,可能需要一些时间来找出哪个文件做什么

在这种情况下,如果查看根项目目录中的文件mdeutils.py,只需将
view\u is\u markdown
设置为始终返回true,因为这是确定是否显示命令/使其可用于其他语法的函数

简而言之,在mdeutils.py中,更改以下内容:

def view_是_标记(视图):
如果len(view.sel())>0:
返回len(view.sel())>0和bool(view.score\u选择器(view.sel()[0].a,“text.html.markdown”))
其他:
返回错误
为此:

def view_是_标记(视图):
返回真值

您的问题的技术答案是,确实可以阻止命令隐藏在命令调色板中。然而,对于大多数命令来说,这样做的原因不是为了消除命令调色板的混乱,而是因为它们依赖于当前的工作状态

这个软件包可能依赖于或不依赖于类似的东西,因此,尽管您可以使命令出现,但这并不意味着它们可以工作。此外,像这样的更改需要修改插件代码本身,因为实际的命令负责它们是否处于活动状态或可见状态

所有命令类都支持名为
is_enabled()
is_visible()
的方法,这些方法将查询升华为查看在任何特定情况下是否应启用或显示该命令:

  • 当命令是菜单的一部分时,将调用
    is_enabled()
    ,查看命令出现时是否应在菜单中启用或禁用(灰显),并且
    is_visible()
    确定它是否应出现

  • 当命令在命令选项板中时,
    启用()
    可见()
    被调用,以查看该命令是否应该出现;禁用的命令将从视图中隐藏,因为它们不适用

  • 当命令绑定到某个键时,按下该键后,在执行命令之前,会调用
    is_enabled()
    ,查看是否应该执行该命令<代码>可见()在这里什么都不做

因此,如果要找到感兴趣的命令的Python源代码,可以修改它们的
is_enabled()
方法来阻止它们隐藏自己。在视频中可以找到如何查找的示例

一旦您访问了源代码,就可以使用

免责声明:我是视频和软件包的作者

然而,如上所述,尽管这可以使命令在原本隐藏的时候出现,但这并不意味着它们实际上可以工作

例如,当没有选定文本时,命令可能会禁用自身,因为它会转换选定内容;在这种情况下,修改命令使其在选择为空时显示并不意味着它在该时间到来时将实际工作;如果作者使用了
is_enabled()
来确保对命令执行情况的特定假设,则它可能什么也不做,在控制台中生成错误,或者可能以非预期的方式修改文件

其他命令可能依赖于使用的语法,以便能够识别文件的某些部分,从而知道该做什么;在这种情况下,他们可能会在其他类型的文件中禁用自己,部分原因是他们不适用,部分原因是他们需要的信息不可用

我不熟悉您在这里使用的软件包,因此它可能受此约束,也可能不受此约束。例如,如果您提到的标题折叠依赖于语法来告诉它标题是什么,那么它将无法在纯文本中工作,因为该信息不可用。另一方面,如果它分析缓冲区本身(比如使用正则表达式)来尝试检测事物,那么它仍然可以按预期的方式工作