35
35
36
36
from __future__ import print_function
37
37
38
- from pyrepl import completing_reader as cr , reader , completer
38
+ from pyrepl import completer
39
39
from pyrepl .completing_reader import CompletingReader as CR
40
40
import cmd
41
41
42
+
42
43
class CmdReader (CR ):
43
44
def collect_keymap (self ):
44
45
return super (CmdReader , self ).collect_keymap () + (
45
46
("\\ M-\\ n" , "invalid-key" ),
46
47
("\\ n" , "accept" ))
47
-
48
- CR_init = CR .__init__
48
+
49
49
def __init__ (self , completions ):
50
- self . CR_init ( self )
50
+ super ( CmdReader , self ). __init__ ( )
51
51
self .completions = completions
52
52
53
53
def get_completions (self , stem ):
54
54
if len (stem ) != self .pos :
55
55
return []
56
- return sorted (set (s for s in self .completions
57
- if s .startswith (stem )))
56
+ return sorted (set (s
57
+ for s in self .completions
58
+ if s .startswith (stem )))
59
+
58
60
59
61
def replize (klass , history_across_invocations = 1 ):
60
62
@@ -71,26 +73,25 @@ def replize(klass, history_across_invocations=1):
71
73
for s in completer .get_class_members (klass )
72
74
if s .startswith ("do_" )]
73
75
74
- if not issubclass (klass , cmd .Cmd ):
75
- raise Exception
76
+ assert issubclass (klass , cmd .Cmd )
76
77
# if klass.cmdloop.im_class is not cmd.Cmd:
77
78
# print "this may not work"
78
79
79
- class CmdRepl ( klass ):
80
- k_init = klass . __init__
81
-
82
- if history_across_invocations :
83
- _CmdRepl__history = []
84
- def __init__ ( self , * args , ** kw ):
85
- self .k_init ( * args , ** kw )
86
- self .__reader = CmdReader ( completions )
87
- self . __reader . history = CmdRepl . _CmdRepl__history
88
- self . __reader . historyi = len ( CmdRepl . _CmdRepl__history )
89
- else :
90
- def __init__ ( self , * args , ** kw ):
91
- self .k_init ( * args , ** kw )
92
- self . __reader = CmdReader ( completions )
93
-
80
+ class MultiHist ( object ):
81
+ __history = []
82
+
83
+ def __init__ ( self , * args , ** kw ) :
84
+ super ( MultiHist , self ). __init__ ( * args , ** kw )
85
+ self . __reader = CmdReader ( completions )
86
+ self . __reader . history = self .__history
87
+ self .__reader . historyi = len ( self . __history )
88
+
89
+ class SimpleHist ( object ):
90
+ def __init__ ( self , * args , ** kw ) :
91
+ super ( SimpleHist , self ). __init__ ( * args , ** kw )
92
+ self .__reader = CmdReader ( completions )
93
+
94
+ class CmdLoopMixin ( object ):
94
95
def cmdloop (self , intro = None ):
95
96
self .preloop ()
96
97
if intro is not None :
@@ -113,6 +114,8 @@ def cmdloop(self, intro=None):
113
114
stop = self .postcmd (stop , line )
114
115
self .postloop ()
115
116
116
- CmdRepl .__name__ = "replize(%s.%s)" % (klass .__module__ , klass .__name__ )
117
- return CmdRepl
117
+ hist = MultiHist if history_across_invocations else SimpleHist
118
118
119
+ class CmdRepl (hist , CmdLoopMixin , klass ):
120
+ __name__ = "replize(%s.%s)" % (klass .__module__ , klass .__name__ )
121
+ return CmdRepl
0 commit comments