Mercurial > cpython-lru_cache-weakref
annotate Lib/cmd.py @ 27998:e27f58a50737 legacy-trunk
SF bug #690377: Dud footnote reference in distutils docs
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Fri, 21 Feb 2003 02:47:09 +0000 |
| parents | 226463445697 |
| children | 4d79e8490c76 |
| 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. |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
18 7. If completion is enabled, completing commands will be done automatically, |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
19 and completing of commands args is done by calling complete_foo() with |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
20 arguments text, line, begidx, endidx. text is string we are matching |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
21 against, all returned matches must begin with it. line is the current |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
22 input line (lstripped), begidx and endidx are the beginning and end |
|
19119
600a9a2b7a18
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
18855
diff
changeset
|
23 indexes of the text being matched, which could be used to provide |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
24 different completion depending upon which position the argument is in. |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
25 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
26 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
|
27 is no do_ method. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
28 |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
29 The `completedefault' method may be overridden to intercept completions for |
|
19119
600a9a2b7a18
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
18855
diff
changeset
|
30 commands that have no complete_ method. |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
31 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
32 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
|
33 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
|
34 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
35 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
|
36 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
|
37 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
|
38 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
39 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
|
40 `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
|
41 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
|
42 functions respectively. |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
43 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
44 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
|
45 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
|
46 """ |
| 624 | 47 |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
48 import string |
| 624 | 49 |
|
16070
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15543
diff
changeset
|
50 __all__ = ["Cmd"] |
|
b5345e99596b
added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents:
15543
diff
changeset
|
51 |
| 624 | 52 PROMPT = '(Cmd) ' |
|
18781
01ae962df885
Use string.ascii_letters instead of string.letters (SF bug #226706).
Fred Drake <fdrake@acm.org>
parents:
17155
diff
changeset
|
53 IDENTCHARS = string.ascii_letters + string.digits + '_' |
| 624 | 54 |
| 55 class Cmd: | |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
56 """A simple framework for writing line-oriented command interpreters. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
57 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
58 These are often useful for test harnesses, administrative tools, and |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
59 prototypes that will later be wrapped in a more sophisticated interface. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
60 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
61 A Cmd instance or subclass instance is a line-oriented interpreter |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
62 framework. There is no good reason to instantiate Cmd itself; rather, |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
63 it's useful as a superclass of an interpreter class you define yourself |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
64 in order to inherit Cmd's methods and encapsulate action methods. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
65 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
66 """ |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
67 prompt = PROMPT |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
68 identchars = IDENTCHARS |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
69 ruler = '=' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
70 lastcmd = '' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
71 intro = None |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
72 doc_leader = "" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
73 doc_header = "Documented commands (type help <topic>):" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
74 misc_header = "Miscellaneous help topics:" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
75 undoc_header = "Undocumented commands:" |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
76 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
|
77 use_rawinput = 1 |
|
1315
acdc0b9a6c78
* aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents:
1086
diff
changeset
|
78 |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
79 def __init__(self, completekey='tab', stdin=None, stdout=None): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
80 """Instantiate a line-oriented interpreter framework. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
81 |
|
27963
226463445697
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
27713
diff
changeset
|
82 The optional argument 'completekey' is the readline name of a |
|
226463445697
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
27713
diff
changeset
|
83 completion key; it defaults to the Tab key. If completekey is |
|
226463445697
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
27713
diff
changeset
|
84 not None and the readline module is available, command completion |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
85 is done automatically. The optional arguments stdin and stdout |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
86 specify alternate input and output file objects; if not specified, |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
87 sys.stdin and sys.stdout are used. |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
88 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
89 """ |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
90 import sys |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
91 if stdin is not None: |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
92 self.stdin = stdin |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
93 else: |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
94 self.stdin = sys.stdin |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
95 if stdout is not None: |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
96 self.stdout = stdout |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
97 else: |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
98 self.stdout = sys.stdout |
|
27238
3bfdbc3dfbce
Duh. cmdqueue should be an instance variable, not a class variable.
Guido van Rossum <guido@python.org>
parents:
26494
diff
changeset
|
99 self.cmdqueue = [] |
| 27627 | 100 self.completekey = completekey |
|
8615
e7822b64a33d
Gotta have an __init__() method -- pdb.py calls it!
Guido van Rossum <guido@python.org>
parents:
8584
diff
changeset
|
101 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
102 def cmdloop(self, intro=None): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
103 """Repeatedly issue a prompt, accept input, parse an initial prefix |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
104 off the received input, and dispatch to action methods, passing them |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
105 the remainder of the line as argument. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
106 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
107 """ |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
108 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
109 self.preloop() |
|
15543
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
13533
diff
changeset
|
110 if intro is not None: |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
111 self.intro = intro |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
112 if self.intro: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
113 self.stdout.write(str(self.intro)+"\n") |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
114 stop = None |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
115 while not stop: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
116 if self.cmdqueue: |
|
24058
37ffce2d9c3c
Code modernization. Replace v=s[i]; del s[i] with single lookup v=s.pop(i)
Raymond Hettinger <python@rcn.com>
parents:
23620
diff
changeset
|
117 line = self.cmdqueue.pop(0) |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
118 else: |
|
17155
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
119 if self.use_rawinput: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
120 try: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
121 line = raw_input(self.prompt) |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
122 except EOFError: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
123 line = 'EOF' |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
124 else: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
125 self.stdout.write(self.prompt) |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
126 self.stdout.flush() |
|
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
127 line = self.stdin.readline() |
|
17155
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
128 if not len(line): |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
129 line = 'EOF' |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
130 else: |
|
1550872249e9
This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents:
16478
diff
changeset
|
131 line = line[:-1] # chop \n |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
132 line = self.precmd(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
133 stop = self.onecmd(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
134 stop = self.postcmd(stop, line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
135 self.postloop() |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
136 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
137 def precmd(self, line): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
138 """Hook method executed just before the command line is |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
139 interpreted, but after the input prompt is generated and issued. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
140 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
141 """ |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
142 return line |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
143 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
144 def postcmd(self, stop, line): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
145 """Hook method executed just after a command dispatch is finished.""" |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
146 return stop |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
147 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
148 def preloop(self): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
149 """Hook method executed once when the cmdloop() method is called.""" |
| 27627 | 150 if self.completekey: |
| 151 try: | |
| 152 import readline | |
| 153 self.old_completer = readline.get_completer() | |
| 154 readline.set_completer(self.complete) | |
| 155 readline.parse_and_bind(self.completekey+": complete") | |
| 156 except ImportError: | |
| 157 pass | |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
158 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
159 def postloop(self): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
160 """Hook method executed once when the cmdloop() method is about to |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
161 return. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
162 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
163 """ |
| 27627 | 164 if self.completekey: |
| 165 try: | |
| 166 import readline | |
| 167 readline.set_completer(self.old_completer) | |
| 168 except ImportError: | |
| 169 pass | |
| 624 | 170 |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
171 def parseline(self, line): |
|
16478
edc0c99a69d6
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16280
diff
changeset
|
172 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
|
173 if not line: |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
174 return None, None, line |
|
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
|
175 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
|
176 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
|
177 elif line[0] == '!': |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
178 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
|
179 line = 'shell ' + line[1:] |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
180 else: |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
181 return None, None, line |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
182 i, n = 0, len(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
183 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
|
184 cmd, arg = line[:i], line[i:].strip() |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
185 return cmd, arg, line |
|
19119
600a9a2b7a18
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
18855
diff
changeset
|
186 |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
187 def onecmd(self, line): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
188 """Interpret the argument as though it had been typed in response |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
189 to the prompt. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
190 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
191 This may be overridden, but should not normally need to be; |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
192 see the precmd() and postcmd() methods for useful execution hooks. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
193 The return value is a flag indicating whether interpretation of |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
194 commands by the interpreter should stop. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
195 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
196 """ |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
197 cmd, arg, line = self.parseline(line) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
198 if not line: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
199 return self.emptyline() |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
200 if cmd is None: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
201 return self.default(line) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
202 self.lastcmd = line |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
203 if cmd == '': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
204 return self.default(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
205 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
206 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
207 func = getattr(self, 'do_' + cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
208 except AttributeError: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
209 return self.default(line) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
210 return func(arg) |
| 624 | 211 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
212 def emptyline(self): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
213 """Called when an empty line is entered in response to the prompt. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
214 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
215 If this method is not overridden, it repeats the last nonempty |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
216 command entered. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
217 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
218 """ |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
219 if self.lastcmd: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
220 return self.onecmd(self.lastcmd) |
|
8584
cb7fcfb56275
Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents:
8410
diff
changeset
|
221 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
222 def default(self, line): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
223 """Called on an input line when the command prefix is not recognized. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
224 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
225 If this method is not overridden, it prints an error message and |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
226 returns. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
227 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
228 """ |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
229 self.stdout.write('*** Unknown syntax: %s\n'%line) |
| 624 | 230 |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
231 def completedefault(self, *ignored): |
|
23565
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
232 """Method called to complete an input line when no command-specific |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
233 complete_*() method is available. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
234 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
235 By default, it returns an empty list. |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
236 |
|
1a67fbc7a066
Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were not updated after 2.2).
Raymond Hettinger <python@rcn.com>
parents:
22493
diff
changeset
|
237 """ |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
238 return [] |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
239 |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
240 def completenames(self, text, *ignored): |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
241 dotext = 'do_'+text |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
242 return [a[3:] for a in self.get_names() if a.startswith(dotext)] |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
243 |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
244 def complete(self, text, state): |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
245 """Return the next possible completion for 'text'. |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
246 |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
247 If a command has not been entered, then complete against command list. |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
248 Otherwise try to call complete_<command> to get list of completions. |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
249 """ |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
250 if state == 0: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
251 import readline |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
252 origline = readline.get_line_buffer() |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
253 line = origline.lstrip() |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
254 stripped = len(origline) - len(line) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
255 begidx = readline.get_begidx() - stripped |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
256 endidx = readline.get_endidx() - stripped |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
257 if begidx>0: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
258 cmd, args, foo = self.parseline(line) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
259 if cmd == '': |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
260 compfunc = self.completedefault |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
261 else: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
262 try: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
263 compfunc = getattr(self, 'complete_' + cmd) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
264 except AttributeError: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
265 compfunc = self.completedefault |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
266 else: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
267 compfunc = self.completenames |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
268 self.completion_matches = compfunc(text, line, begidx, endidx) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
269 try: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
270 return self.completion_matches[state] |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
271 except IndexError: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
272 return None |
|
19119
600a9a2b7a18
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
18855
diff
changeset
|
273 |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
274 def get_names(self): |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
275 # Inheritance says we have to look in class and |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
276 # base classes; order is not important. |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
277 names = [] |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
278 classes = [self.__class__] |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
279 while classes: |
|
24058
37ffce2d9c3c
Code modernization. Replace v=s[i]; del s[i] with single lookup v=s.pop(i)
Raymond Hettinger <python@rcn.com>
parents:
23620
diff
changeset
|
280 aclass = classes.pop(0) |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
281 if aclass.__bases__: |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
282 classes = classes + list(aclass.__bases__) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
283 names = names + dir(aclass) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
284 return names |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
285 |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
286 def complete_help(self, *args): |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
287 return self.completenames(*args) |
|
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
288 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
289 def do_help(self, arg): |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
290 if arg: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
291 # XXX check arg syntax |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
292 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
293 func = getattr(self, 'help_' + arg) |
|
22493
66adb551cd38
tighten up except - in this context, AttributeError is the only exception
Skip Montanaro <skip@pobox.com>
parents:
22532
diff
changeset
|
294 except AttributeError: |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
295 try: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
296 doc=getattr(self, 'do_' + arg).__doc__ |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
297 if doc: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
298 self.stdout.write("%s\n"%str(doc)) |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
299 return |
|
22493
66adb551cd38
tighten up except - in this context, AttributeError is the only exception
Skip Montanaro <skip@pobox.com>
parents:
22532
diff
changeset
|
300 except AttributeError: |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
301 pass |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
302 self.stdout.write("%s\n"%str(self.nohelp % (arg,))) |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
303 return |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
304 func() |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
305 else: |
|
18855
6f301b3cf323
Patch #416224: add readline completion to cmd.Cmd.
Martin v. Löwis <martin@v.loewis.de>
parents:
18781
diff
changeset
|
306 names = self.get_names() |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
307 cmds_doc = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
308 cmds_undoc = [] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
309 help = {} |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
310 for name in names: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
311 if name[:5] == 'help_': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
312 help[name[5:]]=1 |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
313 names.sort() |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
314 # There can be duplicates if routines overridden |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
315 prevname = '' |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
316 for name in names: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
317 if name[:3] == 'do_': |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
318 if name == prevname: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
319 continue |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
320 prevname = name |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
321 cmd=name[3:] |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23565
diff
changeset
|
322 if cmd in help: |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
323 cmds_doc.append(cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
324 del help[cmd] |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
325 elif getattr(self, name).__doc__: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
326 cmds_doc.append(cmd) |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
327 else: |
|
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
328 cmds_undoc.append(cmd) |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
329 self.stdout.write("%s\n"%str(self.doc_leader)) |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
334 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
|
335 if cmds: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
336 self.stdout.write("%s\n"%str(header)) |
|
11691
e34991022571
Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents:
10820
diff
changeset
|
337 if self.ruler: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
338 self.stdout.write("%s\n"%str(self.ruler * len(header))) |
|
26494
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
339 self.columnize(cmds, maxcol-1) |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
340 self.stdout.write("\n") |
|
26494
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
341 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
342 def columnize(self, list, displaywidth=80): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
343 """Display a list of strings as a compact set of columns. |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
344 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
345 Each column is only as wide as necessary. |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
346 Columns are separated by two spaces (one was not legible enough). |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
347 """ |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
348 if not list: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
349 self.stdout.write("<empty>\n") |
|
26494
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
350 return |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
351 nonstrings = [i for i in range(len(list)) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
352 if not isinstance(list[i], str)] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
353 if nonstrings: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
354 raise TypeError, ("list[i] not a string for i in %s" % |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
355 ", ".join(map(str, nonstrings))) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
356 size = len(list) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
357 if size == 1: |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
358 self.stdout.write('%s\n'%str(list[0])) |
|
26494
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
359 return |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
360 # Try every row count from 1 upwards |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
361 for nrows in range(1, len(list)): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
362 ncols = (size+nrows-1) // nrows |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
363 colwidths = [] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
364 totwidth = -2 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
365 for col in range(ncols): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
366 colwidth = 0 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
367 for row in range(nrows): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
368 i = row + nrows*col |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
369 if i >= size: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
370 break |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
371 x = list[i] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
372 colwidth = max(colwidth, len(x)) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
373 colwidths.append(colwidth) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
374 totwidth += colwidth + 2 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
375 if totwidth > displaywidth: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
376 break |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
377 if totwidth <= displaywidth: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
378 break |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
379 else: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
380 nrows = len(list) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
381 ncols = 1 |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
382 colwidths = [0] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
383 for row in range(nrows): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
384 texts = [] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
385 for col in range(ncols): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
386 i = row + nrows*col |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
387 if i >= size: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
388 x = "" |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
389 else: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
390 x = list[i] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
391 texts.append(x) |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
392 while texts and not texts[-1]: |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
393 del texts[-1] |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
394 for col in range(len(texts)): |
|
3f8019273549
Add a better columnizer to print_topics().
Guido van Rossum <guido@python.org>
parents:
24058
diff
changeset
|
395 texts[col] = texts[col].ljust(colwidths[col]) |
|
27713
aade4bc125f8
Updated version of [ 558544 ] cmd.py: add instance-specific stdin/out
Anthony Baxter <anthonybaxter@gmail.com>
parents:
27627
diff
changeset
|
396 self.stdout.write("%s\n"%str(" ".join(texts))) |
