def which(cmd, env=None): if env is None: env = create_environment() for path in env['PATH'].split(':'): full = os.path.join(path, cmd) if os.path.isfile(full) and os.access(full, os.X_OK): return full
def popen(cmd, env=None, return_error=False): if isinstance(cmd, basestring): cmd = cmd, info = None if os.name == 'nt': info = subprocess.STARTUPINFO() info.dwFlags |= subprocess.STARTF_USESHOWWINDOW info.wShowWindow = subprocess.SW_HIDE if env is None: env = create_environment() try: return subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=info, env=env) except OSError, err: print 'Error launching', repr(cmd) print 'Error was:', err.strerror if return_error: return err.strerror
def xiki(view): settings = view.settings() if is_xiki_buffer(view): for sel in view.sel(): output = None cmd = None persist = False oldcwd = None view.sel().subtract(sel) edit = view.begin_edit() row, _ = view.rowcol(sel.b) indent, sign, path, tag, tree = find_tree(view, row) pos = view.line(sel.b).b if get_line(view, row+1).startswith(indent + INDENTATION): if sign == '-': replace_line(view, edit, pos, indent + '+ ' + tag) do_clean = True check = sublime.Region(sel.b, sel.b) for name, process in commands.items(): regions = view.get_regions(name) for region in regions: if region.contains(check): process.terminate() do_clean = False if do_clean: cleanup(view, edit, pos, indent + INDENTATION) # select(view, pos) elif sign == '$' or sign == '$$': if path: p = dirname(path, tree, tag) oldcwd = os.getcwd() os.chdir(p) tag = tag.encode('ascii', 'replace') env = create_environment() if sign == '$$' and 'SHELL' in env: shell = os.path.basename(env['SHELL']) cmd = [shell, '-c', tag] if not cmd: try: cmd = shlex.split(tag, True) except ValueError, err: output = 'Error: ' + str(err) persist = True elif path: # directory listing or file open target = os.path.join(path, tree) d, f = os.path.split(target) f = unslash(f) target = os.path.join(d, f) if os.path.isfile(target): sublime.active_window().open_file(target) elif os.path.isdir(target): dirs = '' files = '' listing = [] try: listing = os.listdir(target) except OSError, err: dirs = '- ' + err.strerror + '\n' for entry in listing: absolute = os.path.join(target, entry) if os.path.isdir(absolute): dirs += '+ %s/\n' % entry else: entry = slash(entry, '\\+$-') files += '%s\n' % entry output = (dirs + files) or '\n'
def xiki(view, cont=False): if is_xiki_buffer(view): for sel in view.sel(): output = None cmd = None persist = False oldcwd = None op = None scroll = False view.sel().subtract(sel) edit = view.begin_edit() if sel.end() == view.size(): view.insert(edit, view.size(), '\n') row, _ = view.rowcol(sel.b) indent, sign, path, tag, tree = find_tree(view, row) pos = view.line(sel.b).b if get_line(view, row+1).startswith(indent + INDENTATION): if sign == '-': replace_line(view, edit, pos, indent + '+ ' + tag) do_clean = True check = sublime.Region(sel.b, sel.b) for name, process in commands[view.id()].items(): regions = view.get_regions(name) for region in regions: if region.contains(check): try: process.terminate() except OSError: pass do_clean = False if do_clean and not cont: op = 'cleanup' cleanup(view, edit, pos, indent + INDENTATION) # select(view, pos) elif sign == '$' or sign == '$$': op = 'command' if path: p = dirname(path, tree, tag) oldcwd = os.getcwd() os.chdir(p) tag = tag.encode('ascii', 'replace') env = create_environment() if sign == '$$' and 'SHELL' in env: shell = os.path.basename(env['SHELL']) cmd = [shell, '-c', tag] if not cmd: try: cmd = shlex.split(tag, True) except ValueError, err: output = 'Error: ' + str(err) persist = True elif path: # directory listing or file open target = os.path.join(path, tree) d, f = os.path.split(target) f = unslash(f) target = os.path.join(d, f) if os.path.isfile(target): op = 'file' if platform.system() == 'Windows': target = os.path.abspath(target) if not cont: sublime.active_window().open_file(target) elif os.path.isdir(target): op = 'dir' dirs = '' files = '' listing = [] try: listing = os.listdir(target) except OSError, err: dirs = '- ' + err.strerror + '\n' for entry in listing: absolute = os.path.join(target, entry) if os.path.isdir(absolute): dirs += '+ %s/\n' % entry else: entry = slash(entry, '\\+$-') files += '%s\n' % entry output = (dirs + files) or '\n'