def on_insert(self, edit, text): an.attach(self.view, edit) edit.ret = None edit._n = True # 是否自动插入换行 an.eval_(text) or an.exec_(text) if hasattr(edit.ret, '__len__'): selectionlen = len(self.view.selection) if selectionlen > 1: # 依次应用到光标 itr = iter(edit.ret) i = 0 for region in self.view.selection: if i == selectionlen: break else: i += 1 cur = itr.__next__() # 当前要插入的文本 if not isinstance(cur, str): cur = str(cur) self.view.replace(edit, region, cur) else: # 列表插入到当前位置 regions = [] i = 0 itemlen = len(edit.ret) usetpl = False # 使用模板 region = self.view.selection[0] if selectionlen == 1 and region.size() > 1 and self.view.substr(region.begin()) == '%': usetpl = True tpl = self.view.substr(sublime.Region(region.begin() + 1, region.end())) # 模板文字 self.view.erase(edit, region) while i < itemlen: item = edit.ret[i] if not usetpl: item = extypes.astr(item) else: if isinstance(item, (list, tuple)): argslen = len(item) # 当前参数的长度 iscontainer = argslen > 0 and isinstance(item[0], (list, tuple)) if iscontainer and argslen == 1: item = tpl.format(*item[0]) elif iscontainer and argslen == 2: item = tpl.format(*item[0], **item[1]) else: item = tpl.format(*item) elif isinstance(item, dict): item = tpl.format(**item) # 替换一个参数 else: item = extypes.astr(item) item = tpl.format(item) cur = self.view.selection[-1].a regions.append(sublime.Region(cur, cur + len(item))) self.view.insert(edit, cur, item) i += 1 if edit._n and i < itemlen: self.view.run_command('insert', {"characters": "\n"}) self.view.selection.clear() self.view.selection.add_all(regions)
def on_exec(self, edit, text): an.attach(self.view, edit) edit.i = 0 for region in self.view.selection: edit.src = self.view.substr(region) edit.i += 1 if (an.eval_(text)): self.view.replace(edit, region, extypes.astr(edit.ret))
def run(self, edit): an.attach(self.view, edit) for region in self.view.selection: if region.empty(): region = self.view.line(region.a) edit.ret = None if an.exec_(self.view.substr(region)) and edit.ret: self.view.replace(edit, region, extypes.astr(edit.ret))
def on_exec(self, edit, text): an.attach(self.view, edit) edit.i = 0 for region in self.view.selection: edit.src = self.view.substr(region) edit.i += 1 if(an.eval_(text)): self.view.replace(edit, region, extypes.astr(edit.ret))
def set_output(self, text=None): win = sublime.Window(self.window_id) output = self.output if not output: output = self.output = win.create_output_panel('an') view = self.view or win.active_view() # self.output.settings().set('color_scheme', view.settings().get('color_scheme')) output.assign_syntax('Packages/Text/Plain text.tmLanguage') if text is not None: output.run_command('set_text', {'text': extypes.astr(text)}) win.run_command('show_panel', {'panel': 'output.an'})
def on_insert(self, edit, text): an.attach(self.view, edit) edit.ret = None edit._n = True # 是否自动插入换行 an.eval_(text) or an.exec_(text) if hasattr(edit.ret, '__len__'): selectionlen = len(self.view.selection) if selectionlen > 1: # 依次应用到光标 itr = iter(edit.ret) i = 0 for region in self.view.selection: if i == selectionlen: break else: i += 1 cur = itr.__next__() # 当前要插入的文本 if not isinstance(cur, str): cur = str(cur) self.view.replace(edit, region, cur) else: # 列表插入到当前位置 regions = [] i = 0 itemlen = len(edit.ret) usetpl = False # 使用模板 region = self.view.selection[0] if selectionlen == 1 and region.size( ) > 1 and self.view.substr(region.begin()) == '%': usetpl = True tpl = self.view.substr( sublime.Region(region.begin() + 1, region.end())) # 模板文字 self.view.erase(edit, region) while i < itemlen: item = edit.ret[i] if not usetpl: item = extypes.astr(item) else: if isinstance(item, (list, tuple)): argslen = len(item) # 当前参数的长度 iscontainer = argslen > 0 and isinstance( item[0], (list, tuple)) if iscontainer and argslen == 1: item = tpl.format(*item[0]) elif iscontainer and argslen == 2: item = tpl.format(*item[0], **item[1]) else: item = tpl.format(*item) elif isinstance(item, dict): item = tpl.format(**item) # 替换一个参数 else: item = extypes.astr(item) item = tpl.format(item) cur = self.view.selection[-1].a regions.append(sublime.Region(cur, cur + len(item))) self.view.insert(edit, cur, item) i += 1 if edit._n and i < itemlen: self.view.run_command('insert', {"characters": "\n"}) self.view.selection.clear() self.view.selection.add_all(regions)
def run(self, edit): an.attach(self.view, edit) for region in self.view.selection: if not region.empty() and an.eval_(self.view.substr(region)): self.view.replace(edit, region, extypes.astr(edit.ret))