在 sublime 3 中将文本插入视图 api
Insert text into view in sublime 3 api
我的 sublime 现在有 4 个视图。我想在一个视图中插入一些文本。我正在尝试这样。但运气不好。
getAllViews = self.window.views()
jobView = getAllViews[1]
jobEdit = jobView.begin_edit()
jobView.insert(jobEdit, 0, 'Hello')
jobView.end_edit(jobEdit)
有什么更好的主意吗?
更新我的问题
我正在将我当前的视图布局编辑为 4 窗格布局,我想将一些差异数据放入我新创建的布局中。我现在有这个代码。
import sublime
import sublime_plugin
import os, subprocess
class SpliterCommand(sublime_plugin.TextCommand):
def on_done(self, Regex):
self.window.set_layout({
"cols": [0, 0.5, 1],
"rows": [0.0, 0.33, 0.66, 1.0],
"cells": [ [0, 0, 1, 3], [1, 0, 2, 1], [1, 1, 2, 2], [1, 2, 2, 3]]
})
def run(self, edit):
self.editview = edit
self.window = sublime.active_window()
self.window.show_input_panel('User Input', "Hello",self.on_done,None,None)
getAllViews = self.window.layouts()
这会将 ui 分成 4 个布局。但无法将数据设置为新布局。
问题是 当您创建新组时,该组是空的(不包含视图),因此如果没有视图则无法插入文本。您需要在每个空组中创建一个新视图以在其中插入字符。我已经更新了您的 on_done 方法,以便在每个空组中创建一个视图,并在新视图中插入一些文本。这在代码注释中进行了解释。
def on_done(self, Regex):
self.window.set_layout({
"cols": [0, 0.5, 1],
"rows": [0.0, 0.33, 0.66, 1.0],
"cells": [ [0, 0, 1, 3], [1, 0, 2, 1], [1, 1, 2, 2], [1, 2, 2, 3]]
})
# For each of the new groups call putHello (self.window.num_groups() = 4)
for numGroup in range(self.window.num_groups()):
# If the group is empty (has no views) then we create a new file (view) and insert the text hello
if len(self.window.views_in_group(numGroup)) == 0:
self.window.focus_group(numGroup) # Focus in group
createdView = self.window.new_file() # New view in group
createdView.run_command("insert",{"characters": "Hello"}) # Insert in created view
之前:
之后:
我的 sublime 现在有 4 个视图。我想在一个视图中插入一些文本。我正在尝试这样。但运气不好。
getAllViews = self.window.views()
jobView = getAllViews[1]
jobEdit = jobView.begin_edit()
jobView.insert(jobEdit, 0, 'Hello')
jobView.end_edit(jobEdit)
有什么更好的主意吗?
更新我的问题
我正在将我当前的视图布局编辑为 4 窗格布局,我想将一些差异数据放入我新创建的布局中。我现在有这个代码。
import sublime
import sublime_plugin
import os, subprocess
class SpliterCommand(sublime_plugin.TextCommand):
def on_done(self, Regex):
self.window.set_layout({
"cols": [0, 0.5, 1],
"rows": [0.0, 0.33, 0.66, 1.0],
"cells": [ [0, 0, 1, 3], [1, 0, 2, 1], [1, 1, 2, 2], [1, 2, 2, 3]]
})
def run(self, edit):
self.editview = edit
self.window = sublime.active_window()
self.window.show_input_panel('User Input', "Hello",self.on_done,None,None)
getAllViews = self.window.layouts()
这会将 ui 分成 4 个布局。但无法将数据设置为新布局。
问题是 当您创建新组时,该组是空的(不包含视图),因此如果没有视图则无法插入文本。您需要在每个空组中创建一个新视图以在其中插入字符。我已经更新了您的 on_done 方法,以便在每个空组中创建一个视图,并在新视图中插入一些文本。这在代码注释中进行了解释。
def on_done(self, Regex):
self.window.set_layout({
"cols": [0, 0.5, 1],
"rows": [0.0, 0.33, 0.66, 1.0],
"cells": [ [0, 0, 1, 3], [1, 0, 2, 1], [1, 1, 2, 2], [1, 2, 2, 3]]
})
# For each of the new groups call putHello (self.window.num_groups() = 4)
for numGroup in range(self.window.num_groups()):
# If the group is empty (has no views) then we create a new file (view) and insert the text hello
if len(self.window.views_in_group(numGroup)) == 0:
self.window.focus_group(numGroup) # Focus in group
createdView = self.window.new_file() # New view in group
createdView.run_command("insert",{"characters": "Hello"}) # Insert in created view
之前:
之后: