def tag_search(self, pattern): if not self.have_database() or pattern is None: return self._view.clear_items() if pattern == '': return if self._task: self._task.stop() def _line(line): match = re.search('([^\ ]*)[\ ]+([0-9]+) ([^\ ]+) (.*)', line) if match is None: return data = match.groups() self._view.add_item( GtagsItem(file=data[2], line=data[1], dataline=data[3], symbol=data[0], search=pattern)) if len(self._view._list) > 200: self._task.stop() #FIXME this is not portable cmd = 'for foo in `global -c %s`; do global -x -e $foo; done' % pattern self._task = GeneratorSubprocessTask(_line) self._task.start(cmd, cwd=self._project.source_directory, shell=True)
def cmd_find(self, options, pattern): # stop and clear task if self.task: self.task.stop() self._view.clear_items() # don't make empty search if not pattern: return # prepare command cmd = '/usr/bin/env man %s "%s"' % (options, pattern) #XXX: unittest reman = re.compile( r''' (?P<name>\w+) \s*(\[\])\s* #whitespace and gentoo brackets \((?P<group>[\w\d]+)\) \s*-\s* (?P<desc>.*) ''', re.VERBOSE) # match and add each line def _line(result): # avoid too many results if len(self._view.list) > 100: self.task.stop() match = reman.match(result) if not match: return name = match.group('name') group = match.group('group') desc = match.group('desc') # add in list self._view.add_item(ManItem(name, int(group), desc, pattern)) # launch man subprocess self.task = GeneratorSubprocessTask(_line) self.task.start(cmd, shell=True)