@@ -333,16 +333,79 @@ def _populate_completion(self, main_loop, user_data):
333
333
# This is just me flailing around wildly. TODO: actually write.
334
334
if self .complete ():
335
335
if self .argspec :
336
- text = repr (self .argspec )
336
+ # This is mostly just stolen from the cli module.
337
+ func_name , args , is_bound , in_arg = self .argspec
338
+ args , varargs , varkw , defaults = args [:4 ]
339
+ if py3 :
340
+ kwonly , kwonly_defaults = args [4 :]
341
+ else :
342
+ kwonly , kwonly_defaults = [], {}
343
+ markup = [('bold name' , func_name ),
344
+ ('name' , ': (' )]
345
+
346
+ # the isinstance checks if we're in a positional arg
347
+ # (instead of a keyword arg), I think
348
+ if is_bound and isinstance (in_arg , int ):
349
+ in_arg += 1
350
+
351
+ # bpython.cli checks if this goes off the edge and
352
+ # does clever wrapping. I do not (yet).
353
+ for k , i in enumerate (args ):
354
+ if defaults and k + 1 > len (args ) - len (defaults ):
355
+ kw = str (defaults [k - (len (args ) - len (defaults ))])
356
+ else :
357
+ kw = None
358
+
359
+ if not k and str (i ) == 'self' :
360
+ color = 'name'
361
+ else :
362
+ color = 'token'
363
+
364
+ if k == in_arg or i == in_arg :
365
+ color = 'bold ' + color
366
+
367
+ markup .append ((color , str (i )))
368
+ if kw :
369
+ markup .extend ([('punctuation' , '=' ),
370
+ ('token' , kw )])
371
+ if k != len (args ) - 1 :
372
+ markup .append (('punctuation' , ', ' ))
373
+
374
+ if varargs :
375
+ if args :
376
+ markup .append (('punctuation' , ', ' ))
377
+ markup .append (('token' , '*' + varargs ))
378
+
379
+ if kwonly :
380
+ if not varargs :
381
+ if args :
382
+ markup .append (('punctuation' , ', ' ))
383
+ markup .append (('punctuation' , '*' ))
384
+ for arg in kwonly :
385
+ if arg == in_arg :
386
+ color = 'bold token'
387
+ else :
388
+ color = 'token'
389
+ markup .extend ([('punctuation' , ', ' ),
390
+ (color , arg )])
391
+ if arg in kwonly_defaults :
392
+ markup .extend ([('punctuation' , '=' ),
393
+ ('token' , kwonly_defaults [arg ])])
394
+
395
+ if varkw :
396
+ if args or varargs or kwonly :
397
+ markup .append (('punctuation' , ', ' ))
398
+ markup .append (('token' , '**' + varkw ))
399
+ markup .append (('punctuation' , ')' ))
337
400
else :
338
- text = ''
401
+ markup = ''
402
+ widget_list [0 ].set_text (markup )
339
403
if self .matches :
340
404
texts = [urwid .Text (('main' , match ))
341
405
for match in self .matches ]
342
406
width = max (text .pack ()[0 ] for text in texts )
343
407
gridflow = urwid .GridFlow (texts , width , 1 , 0 , 'left' )
344
408
widget_list [1 ] = gridflow
345
- widget_list [0 ].set_text (text )
346
409
self .frame .body = self .overlay
347
410
else :
348
411
self .frame .body = self .listbox
@@ -455,6 +518,9 @@ def main(args=None, locals_=None, banner=None):
455
518
(name , COLORMAP [color .lower ()], 'default' ,
456
519
'bold' if color .isupper () else 'default' )
457
520
for name , color in config .color_scheme .iteritems ()]
521
+ palette .extend ([
522
+ ('bold ' + name , color + ',bold' , background , monochrome )
523
+ for name , color , background , monochrome in palette ])
458
524
459
525
if options .reactor :
460
526
from twisted .application import reactors
0 commit comments