Example #1
0
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
Example #2
0
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
Example #3
0
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'
Example #4
0
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'