I think I might make another page in the settings to allow one to choose what fields to search in and possibly which to display as details. I plan on embedding the code to search ports right in NPM, but if it doesn't clog things up I don't see why not to allow the ability to use an external program. The best reason being if the index file ever changes or is ax'ed and I get hit by a bus, no one has to learn Python to fix NPM lol.
A couple months ago I sat down and started trying to figure out the format of the index file in ports, it was pretty easy and I wrote a small script to search it and print out all the cells of information in each entry of the index that had a matching package-version in it.
This is a quick test script I wrote tonight that searchs for a port and displays a short info on it, being a test I wrote the port to look for in the file test rather then passing sys.argv over to save time. I plan to adopt NPM to using a variation of this for searching ports now.
1: #!/usr/bin/env python 2: 3: # This is as much of the format of /usr/ports/INDEX-* file as I have 4: # been able to reverse engineer by looking at it and a few other things 5: # that didn't come with a nice fat manual page: the source is the documentation! 6: # 7: # Each program is listed on one line with each field separated with the pipe 8: # symbol (|), list values are delimited by a space. 9: # 10: # pkg-ver| -> as listed in pkg_info 11: # location in ports| -> /usr/ports/editors/vim 12: # install prefix| -> /usr/local 13: # short descr| -> 14: # path to pkg-descr| -> /usr/ports/editors/vim/pkg-decsr 15: # maintainer e-mail| -> firstname.lastname@example.org 16: # listed in categories| -> list of cat, e.g. cat1 cat2 17: # dependencies to build| -> list of pkg-ver required to build this port 18: # dependencies at run time| -> list of pkg-ver required to run this program 19: # website| -> the programs website 20: # | -> unknown 21: # | -> unknown 22: # XXX: the unknowns may relate to internal port opts, e..g use zip, etc 23: #### 24: 25: 26: import re, os.path 27: 28: INDEX="/usr/ports/INDEX-6" 29: 30: # find keys 1,2,4 in index row via regex 31: def search(pattern): 32: idx = open(INDEX) 33: for line in idx: 34: keys = line.split('|') 35: k = (keys,os.path.split(keys), keys) 36: for each in k: 37: if re.search(pattern, each): 38: print 'found' 39: mypp(keys) 40: idx.close() 41: 42: def mypp(table): 43: print "PORT INFORMATION FOR: %s" % table 44: print 'location: %s' % table[11:] 45: print 'descr: %s' % table 46: print 'category: %s' % table 47: print 'website: %s' % table 48: 49: 50: if __name__ == "__main__": 51: search("linux-flock") 52: 53: