def go_to_spec(prj = XReqProject()): context = GPS.current_context() file = context.file() line_no = context.location().line() buffer = GPS.EditorBuffer.get(file) #GPS.Console().write ("%s line %d\n" % (file.name(), line_no)) if not buffer.is_modified(): filename = file.name() delete = False else: filename = GPS.dump(buffer.get_chars()) delete = True args = ["xreq", "--partial", "--step-matching", "--step", prj.steps_dir(), filename] p = subprocess.Popen(args, stdout=subprocess.PIPE) step_file = None step_line = None for line in p.stdout.readlines(): m = re.match('^Step Matching: "(.*):([0-9]+)" matches "(.*):([0-9]+)" procedure (.*)$', line) if m: l = int(m.group(2)) if l > line_no: break else: #GPS.Console().write ("line %d match %s (%s:%d)\n" % ( # int(m.group(2)), m.group(5), m.group(3), int(m.group(4)))); step_file = m.group(3) step_line = int(m.group(4)) p.stdout.close() if delete: os.remove(filename) if step_file: open_file(step_file, step_line)