【问题标题】:Open sublime-project file programmatically以编程方式打开 sublime-project 文件
【发布时间】:2015-02-07 11:54:55
【问题描述】:

我目前正在为 Sublime Text 3 编写一个插件,旨在为用户提供更灵活的会话管理。

API 似乎没有提供打开.sublime-project 文件的方法。我显然能够像往常一样打开文件 - 使用 window.open_file - 但不能告诉 Sublime 打开特定的项目文件。
它只会在新标签页中打开它,这并不是我所希望的。

我可以使用window.project_datawindow.set_project_data 访问和设置project_data,但是虽然有window.project_file_name 方法,但它没有对应的方法。

这是有问题的,因为 project_data 通常包含相对路径,需要相对于 .sublime-project 文件位置进行解释。如果我只是将找到的数据转储到新窗口 (set_project_data),所有相对路径都将被解释为相对于 root(至少在我的 Ubuntu 系统上)。

我可以自己处理相对路径并相应地修改project_data,但这很麻烦。

是否有任何未记录的方法或我遗漏的东西?

编辑: The plugin in question.

【问题讨论】:

  • 这只是一个盲目的猜测,但是命令行参数有帮助吗?也就是说,当你从你的插件中生成一个新的 Sublime 进程时,你可以只提供项目文件的路径作为第一个参数吗?
  • @Jan-PhilipGehrcke 虽然这将使我能够打开与项目文件关联的窗口,但插件仍然必须将视图加载到此窗口中。 AFAIK 没有安全的方法可以访问我通过命令行打开的窗口。
  • 如果你在命令行上传递一个项目文件给 sublime,它将打开该项目文件,以及它之前打开的所有视图。如果您需要在打开后做某事,您可以随时将其写入另一个具有 plugin_loaded 的插件中,以便在启动时执行。

标签: python sublimetext sublimetext3 sublime-text-plugin


【解决方案1】:

尝试打开后缀为“:1”的文件 - 表示“行号 #1”: 这对我有用:

$ subl projectname.sublime-project:1

【讨论】:

  • 这可能通过命令行工作,但我正在尝试从 sublime 插件打开文件。打开窗口后我必须继续使用它,因此使用run_command(...) 方法似乎不可行。
【解决方案2】:

在名为 ProjectManager 的 Sublime 插件中找到了执行此操作的方法。您将在此文件中找到代码...

https://github.com/randy3k/ProjectManager/blob/master/pm.py

# Code lifted from https://github.com/randy3k/ProjectManager/blob/master/pm.py
def subl(args=[]):
    # learnt from SideBarEnhancements
    executable_path = sublime.executable_path()

    if sublime.platform() == 'linux':
        subprocess.Popen([executable_path] + [args])
    if sublime.platform() == 'osx':
        app_path = executable_path[:executable_path.rfind(".app/") + 5]
        executable_path = app_path + "Contents/SharedSupport/bin/subl"
        subprocess.Popen([executable_path] + args)
    if sublime.platform() == "windows":
        def fix_focus():
            window = sublime.active_window()
            view = window.active_view()
            window.run_command('focus_neighboring_group')
            window.focus_view(view)
        sublime.set_timeout(fix_focus, 300)

subl(project_file) # The something.sublime-project file. 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多