【发布时间】:2018-07-29 21:28:13
【问题描述】:
代码如下:
Sublime 插件:
文件 1:open_in_default_program.py:
# https://github.com/SublimeTextIssues/Core/issues/2368
import webbrowser
import sublime_plugin
class OpenInDefaultProgramCommand(sublime_plugin.TextCommand):
def run(self, edit):
if self.view.file_name():
webbrowser.open_new_tab("file://" + self.view.file_name())
def is_visible(self):
return self.view.file_name() is not None and (
self.view.file_name()[-5:] == ".html" or
self.view.file_name()[-3:] == ".md" or
self.view.file_name()[-4:] == ".ahk")
文件 2:Context.sublime-menu:
[
{ "command": "open_in_default_program" },
]
AutoHotkey测试文件:
Test.ahk:
MsgBox Something
我的问题:
它适用于 HTML 和 Markdown 文件。它也适用于 AutoHotkey 文件 - 但如何?据我所知,它使用浏览器。 AutoHotkey 文件无法在浏览器中打开 - 但实际上它们完全可以使用此插件启动。为什么有效?
这是另一个用于在默认应用程序中打开文件的插件,但它要复杂得多:https://github.com/SublimeText/OpenDefaultApplication/blob/master/OpenDefault.py
【问题讨论】:
-
旁注:
self.view.file_name()[-5:] == ".html" or self.view.file_name()[-3:] == ".md" or self.view.file_name()[-4:] == ".ahk"是一种非常冗长/脆弱(由于硬编码切片索引)拼写self.view.file_name.endswith((".html", ".md", ".ahk"))的方式(endswith接受tuple的可能结尾并返回@ 987654331@ 如果它们中的任何一个终止字符串,它可以避免像硬编码索引切片这样的脆弱的东西。 -
@ShadowRanger 据我了解,这种紧凑的形式在 ST 中不起作用? (至少对我不起作用)。
-
SublimeText 是纯 Python,对吧?
endswithis a plain Python method onstr;应该在任何地方都可以工作。 -
@ShadowRanger 是的,确实可以,但是必须在
file_name之后加上()。 -
另外,我发现,在
.file_name()之后添加.lower()是个好主意。因此,代码也适用于大写扩展。
标签: python sublimetext3 sublimetext python-webbrowser