Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否阻止Sublime插件TextCommand在控制台上运行?_Python_Sublimetext_Sublime Text Plugin - Fatal编程技术网

Python 是否阻止Sublime插件TextCommand在控制台上运行?

Python 是否阻止Sublime插件TextCommand在控制台上运行?,python,sublimetext,sublime-text-plugin,Python,Sublimetext,Sublime Text Plugin,我有一个Sublime插件TextCommand,其中包括设置视图语法文件。我以前没有意识到这一点,但控制台输入实际上似乎是一个视图,因此如果在运行TextCommand时选择了它,它将在控制台输入字段上执行。如何防止命令在其上运行 下面是一个示例插件: from sublime_plugin import TextCommand class ExampleCommand(TextCommand): def run(self, edit): if 'Python' no

我有一个Sublime插件
TextCommand
,其中包括设置视图语法文件。我以前没有意识到这一点,但控制台输入实际上似乎是一个视图,因此如果在运行
TextCommand
时选择了它,它将在控制台输入字段上执行。如何防止命令在其上运行

下面是一个示例插件:

from sublime_plugin import TextCommand

class ExampleCommand(TextCommand):
    def run(self, edit):
        if 'Python' not in self.view.settings().get('syntax'):
            self.view.set_syntax_file('Packages/Python/Python.tmLanguage')
如果我打开控制台,然后单击输入字段,并使用键盘快捷键激活TextCommand,那么控制台的输入字段将更改为与Python主题匹配


要明确的是,我根本不希望这个TextCommand在控制台的输入字段上运行。我如何检测我的命令是否在运行,如果是这样,我如何中止它?

好的,我找到了一个解决方案

不要使用
self.view
,而是使用
self.view.window().active\u view()
。这将导致您的代码在当前选定窗口中最近处于活动状态的正常视图上运行,这可能是对用户意图的一个很好的假设

您可能需要处理一个不寻常的情况:用户可能有一个没有打开缓冲区的窗口,而该窗口的控制台是打开的。可以运行
TextCommand
s,但是
self.view.window()。在这种情况下,active\u view()
将返回
None
。您可能需要检查并处理该案例

如果用户在控制台输入视图中使用光标时运行命令,而您希望采取更安全的方法,并且什么也不做,则可以执行以下操作:

from sublime_plugin import TextCommand

class ExampleCommand(TextCommand):
    def run(self, edit):
        # If the user attempted to run the command while having a non-activatable
        # view selected, such as the console input view, don't run anything.
        if self.view.id() != self.view.window().active_view().id():
            return
        # Otherwise continue running the command as normal...