Mercurial > cpython-lru_cache-weakref
annotate Lib/cmd.py @ 17581:c1937faabb23 2.1
Added support for optional explanation parameter to the \versionadded
macro.
Refactored do_cmd_versionadded() and do_cmd_versionchanged() to do most
of the work in a helper function, with the do_cmd_*() wrappers just supplying
a portion of the replacement text.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Wed, 18 Apr 2001 17:29:14 +0000 |
| parents | 1550872249e9 |
| children | 01ae962df885 |
| rev | line source |
|---|---|
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
1 """A generic class to build line-oriented command interpreters. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
2 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
3 Interpreters constructed with this class obey the following conventions: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
4 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
5 1. End of file on input is processed as the command 'EOF'. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
6 2. A command is parsed out of each line by collecting the prefix composed |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
7 of characters in the identchars member. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
8 3. A command `foo' is dispatched to a method 'do_foo()'; the do_ method |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
9 is passed a single argument consisting of the remainder of the line. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
10 4. Typing an empty line repeats the last command. (Actually, it calls the |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
11 method `emptyline', which may be overridden in a subclass.) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
12 5. There is a predefined `help' method. Given an argument `topic', it |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
13 calls the command `help_topic'. With no arguments, it lists all topics |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
14 with defined help_ functions, broken into up to three topics; documented |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
15 commands, miscellaneous help topics, and undocumented commands. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
16 6. The command '?' is a synonym for `help'. The command '!' is a synonym |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
17 for `shell', if a do_shell method exists. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
18 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
19 The `default' method may be overridden to intercept commands for which there |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
20 is no do_ method. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
21 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
22 The data member `self.ruler' sets the character used to draw separator lines |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
23 in the help messages. If empty, no ruler line is drawn. It defaults to "=". |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
24 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
25 If the value of `self.intro' is nonempty when the cmdloop method is called, |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
26 it is printed out on interpreter startup. This value may be overridden |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
27 via an optional argument to the cmdloop() method. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
28 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
29 The data members `self.doc_header', `self.misc_header', and |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
30 `self.undoc_header' set the headers used for the help function's |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
31 listings of documented functions, miscellaneous topics, and undocumented |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
32 functions respectively. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
33 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
34 These interpreters use raw_input; thus, if the readline module is loaded, |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
35 they automatically support Emacs-like command history and editing features. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
36 """ |
| 624 | 37 |
|
17155
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
38 import string, sys |
| 624 | 39 |
|
16070
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15543
diff
changeset
|
40 __all__ = ["Cmd"] |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15543
diff
changeset
|
41 |
| 624 | 42 PROMPT = '(Cmd) ' |
| 43 IDENTCHARS = string.letters + string.digits + '_' | |
| 44 | |
| 45 class Cmd: | |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
46 prompt = PROMPT |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
47 identchars = IDENTCHARS |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
48 ruler = '=' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
49 lastcmd = '' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
50 cmdqueue = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
51 intro = None |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
52 doc_leader = "" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
53 doc_header = "Documented commands (type help <topic>):" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
54 misc_header = "Miscellaneous help topics:" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
55 undoc_header = "Undocumented commands:" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
56 nohelp = "*** No help on %s" |
|
17155
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
57 use_rawinput = 1 |
|
1315
acdc0b9a6c78
* aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents:
1086
diff
changeset
|
58 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
59 def __init__(self): pass |
|
8615
e7822b64a33d
Gotta have an __init__() method -- pdb.py calls it!
Guido van Rossum <guido@python.org>
parents:
8584
diff
changeset
|
60 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
61 def cmdloop(self, intro=None): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
62 self.preloop() |
|
15543
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
13533
diff
changeset
|
63 if intro is not None: |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
64 self.intro = intro |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
65 if self.intro: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
66 print self.intro |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
67 stop = None |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
68 while not stop: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
69 if self.cmdqueue: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
70 line = self.cmdqueue[0] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
71 del self.cmdqueue[0] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
72 else: |
|
17155
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
73 if self.use_rawinput: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
74 try: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
75 line = raw_input(self.prompt) |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
76 except EOFError: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
77 line = 'EOF' |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
78 else: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
79 sys.stdout.write(self.prompt) |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
80 line = sys.stdin.readline() |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
81 if not len(line): |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
82 line = 'EOF' |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
83 else: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
84 line = line[:-1] # chop \n |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
85 line = self.precmd(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
86 stop = self.onecmd(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
87 stop = self.postcmd(stop, line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
88 self.postloop() |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
89 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
90 def precmd(self, line): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
91 return line |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
92 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
93 def postcmd(self, stop, line): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
94 return stop |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
95 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
96 def preloop(self): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
97 pass |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
98 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
99 def postloop(self): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
100 pass |
| 624 | 101 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
102 def onecmd(self, line): |
|
16478
edc0c99a69d6
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16280
diff
changeset
|
103 line = line.strip() |
|
13533
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
104 if not line: |
|
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
105 return self.emptyline() |
|
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
106 elif line[0] == '?': |
|
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
107 line = 'help ' + line[1:] |
|
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
108 elif line[0] == '!': |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
109 if hasattr(self, 'do_shell'): |
|
13533
1e7c32bddb8f
Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents:
11691
diff
changeset
|
110 line = 'shell ' + line[1:] |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
111 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
112 return self.default(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
113 self.lastcmd = line |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
114 i, n = 0, len(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
115 while i < n and line[i] in self.identchars: i = i+1 |
|
16478
edc0c99a69d6
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16280
diff
changeset
|
116 cmd, arg = line[:i], line[i:].strip() |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
117 if cmd == '': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
118 return self.default(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
119 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
120 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
121 func = getattr(self, 'do_' + cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
122 except AttributeError: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
123 return self.default(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
124 return func(arg) |
| 624 | 125 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
126 def emptyline(self): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
127 if self.lastcmd: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
128 return self.onecmd(self.lastcmd) |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
129 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
130 def default(self, line): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
131 print '*** Unknown syntax:', line |
| 624 | 132 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
133 def do_help(self, arg): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
134 if arg: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
135 # XXX check arg syntax |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
136 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
137 func = getattr(self, 'help_' + arg) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
138 except: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
139 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
140 doc=getattr(self, 'do_' + arg).__doc__ |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
141 if doc: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
142 print doc |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
143 return |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
144 except: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
145 pass |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
146 print self.nohelp % (arg,) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
147 return |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
148 func() |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
149 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
150 # Inheritance says we have to look in class and |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
151 # base classes; order is not important. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
152 names = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
153 classes = [self.__class__] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
154 while classes: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
155 aclass = classes[0] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
156 if aclass.__bases__: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
157 classes = classes + list(aclass.__bases__) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
158 names = names + dir(aclass) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
159 del classes[0] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
160 cmds_doc = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
161 cmds_undoc = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
162 help = {} |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
163 for name in names: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
164 if name[:5] == 'help_': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
165 help[name[5:]]=1 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
166 names.sort() |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
167 # There can be duplicates if routines overridden |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
168 prevname = '' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
169 for name in names: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
170 if name[:3] == 'do_': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
171 if name == prevname: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
172 continue |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
173 prevname = name |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
174 cmd=name[3:] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
175 if help.has_key(cmd): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
176 cmds_doc.append(cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
177 del help[cmd] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
178 elif getattr(self, name).__doc__: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
179 cmds_doc.append(cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
180 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
181 cmds_undoc.append(cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
182 print self.doc_leader |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
183 self.print_topics(self.doc_header, cmds_doc, 15,80) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
184 self.print_topics(self.misc_header, help.keys(),15,80) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
185 self.print_topics(self.undoc_header, cmds_undoc, 15,80) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
186 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
187 def print_topics(self, header, cmds, cmdlen, maxcol): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
188 if cmds: |
|
16280
8b81a7e58a1d
unnecessary semicolon
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16070
diff
changeset
|
189 print header |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
190 if self.ruler: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
191 print self.ruler * len(header) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
192 (cmds_per_line,junk)=divmod(maxcol,cmdlen) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
193 col=cmds_per_line |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
194 for cmd in cmds: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
195 if col==0: print |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
196 print (("%-"+`cmdlen`+"s") % cmd), |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
197 col = (col+1) % cmds_per_line |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
198 print "\n" |
