output = (dirs + files) or '\n' elif sign == '-': # dunno here pass elif tree: op = 'xiki' cmd = ['xiki'] cmd += tree.split(' ') if cmd: if persist: insert(view, edit, sel, '', indent + INDENTATION) spawn(view, edit, indent, cmd, sel) else: output = communicate(cmd, None, 3, return_error=True) if oldcwd: os.chdir(oldcwd) if output: if sign == '+': replace_line(view, edit, pos, indent + '- ' + tag) insert(view, edit, sel, output, indent + INDENTATION) if cont: region = find_region(view, pos, indent + INDENTATION) end = view.line(region.end()).begin() added = ''
# dunno here pass elif tree: if which('ruby'): cmd = ['ruby', which('xiki')] else: cmd = ['xiki'] cmd += tree.split(' ') if cmd: if persist: insert(view, edit, sel, '', indent + INDENTATION) spawn(view, edit, indent, cmd, sel) else: output = communicate(cmd, None, 3, return_error=True) if oldcwd: os.chdir(oldcwd) if output: if sign == '+': replace_line(view, edit, pos, indent + '- ' + tag) insert(view, edit, sel, output, indent + INDENTATION) view.sel().add(sel) view.end_edit(edit) def find_tree(view, row): regex = re.compile(r'^(\s*)(\$\$|[-+$]\s*)?(.*)$')
def xiki(view): settings = view.settings() output = None cmd = None oldcwd = None if settings.get('xiki'): indent, sign, path, tag, tree = find_tree(view) print 'xiki', sign, path, tree pos = get_pos(view) if get_line(view, 1).startswith(indent + INDENTATION): if sign == '-': replace_line(view, pos, indent + '+ ' + tag) edit = view.begin_edit() cleanup(view, edit, pos, indent + INDENTATION) select(view, pos) view.end_edit(edit) return elif sign == '$': if path: oldcwd = os.getcwd() # maybe this should be offloaded into find_tree # so path will be multiple directories instead of just a base dir path_re = r'^(.+)/%s$' % re.escape(tag) match = re.match(path_re, tree) if match: os.chdir(os.path.join(path, match.group(1))) else: os.chdir(path) cmd = shlex.split(tag.encode('ascii', 'replace'), True) elif path: # directory listing or file open target = os.path.join(path, tree) if os.path.isfile(target): sublime.active_window().open_file(target) return elif os.path.isdir(target): dirs = '' files = '' for entry in os.listdir(target): absolute = os.path.join(target, entry) if os.path.isdir(absolute): dirs += '+ %s/\n' % entry else: files += '%s\n' % entry output = (dirs + files) or '\n' elif sign == '-': # dunno here return elif tree: if which('ruby'): cmd = ['ruby', which('xiki')] else: cmd = ['xiki'] cmd += tree.split(' ') if cmd: output = communicate(cmd, None, 3, return_error=True) if oldcwd: os.chdir(oldcwd) if output: if sign == '+': replace_line(view, pos, indent + '- ' + tag) insert(view, output, indent + INDENTATION)