From 0b3f2d30ca9acafb8eaf578bc78242cb35619693 Mon Sep 17 00:00:00 2001 From: "alex.boterolowry" Date: Sat, 14 Nov 2009 01:08:49 +0000 Subject: check-in some basic and not quite useful yet completion support git-svn-id: http://freebase-python.googlecode.com/svn/trunk@231 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2 --- freebase/fcl/commands.py | 49 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) (limited to 'freebase/fcl/commands.py') diff --git a/freebase/fcl/commands.py b/freebase/fcl/commands.py index fa0b5ea..d695709 100755 --- a/freebase/fcl/commands.py +++ b/freebase/fcl/commands.py @@ -188,7 +188,7 @@ def cmd_ls(fb, path=None, long=False, timesort=False, revsort=False): print mk.value, mk.namespace.id+suffix - +@complete('path') def cmd_mkdir(fb, path): """create a new freebase namespace %prog mkdir id @@ -213,6 +213,7 @@ def cmd_mkdir(fb, path): r = fb.mss.mqlwrite(wq) +@complete('path', 'path') def cmd_ln(fb, src, dst): """create a namespace key %prog ln srcid dstid @@ -277,9 +278,51 @@ def cmd_cat(fb, id, include_headers=False): def cmd_shell(fb): import readline import shlex + cache = {} def complete_cmd(text, state): - m = [ c for c in fb.commands if c.startswith(text) ] - return m[state] + def complete_path(t, i): + if t == '': + pwd = fb.pwd + k = 'value' + v = None + elif t.startswith('/'): + p = t.split('/') + k = 'value~=' + v = '^'+p.pop()+'.*' + pwd = '/'.join(p) + else: + pwd = fb.pwd + k = 'value~=' + v = '^'+t+'.*' + + ckey = '%s:%s' % (k,v) + if ckey in cache: + r = cache[ckey] + else: + q = {'id': pwd, + '/type/namespace/keys': [{k:v, 'value':None}] + } + r = fb.mss.mqlread(q) + cache[ckey] = r + + return r['/type/namespace/keys'][i]['value'] + + completes = {'path':complete_path} + lb = readline.get_line_buffer() + if lb == text: + m = [ c for c in fb.commands if c.startswith(text) ] + return m[state] + else: + args = lb.split() + cmd = args.pop(0) + la = len(args)-1 + if la == -1: + la = 0 + + types = fb.commands[cmd].func.types + t = types[la] + return completes.get(t, lambda x,y: None)(text, state) + readline.set_completer(complete_cmd) readline.parse_and_bind('tab: complete') -- cgit v1.3.1