-
Notifications
You must be signed in to change notification settings - Fork 1
/
README.txt
135 lines (93 loc) · 3.84 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
=====
kmd
=====
--------------------------------------------------------
An interpreter framework
--------------------------------------------------------
Introduction
============
**kmd** allows to easily build command line driven shells
with powerful tab-completion capabilities.
The kmd.Kmd class derives from `cmd.Cmd`_ and modifies it in the
following ways:
1. Instead of Python's readline_ module, kmd.Kmd uses the alternative
rl_ readline bindings.
2. Setup and tear-down of the readline completer have been moved to *preloop*
and *postloop* respectively. Subclasses must make sure to call their
parents' implementations.
3. Incomplete command names are automatically expanded if they are unique.
4. Command aliases can be defined by extending the *aliases* dictionary.
Alias names apply to all *do_*, *complete_*, and *help_* attributes.
5. Lines starting with '#' are treated as comments. The new *comment* method
is invoked, receiving the line as argument. By default this method clears
the *lastcmd*.
6. It is now possible to configure the *shell_escape_chars*.
The default is '!'.
7. If a *history_file* is set, kmd.Kmd loads and saves the history
in *preloop* and *postloop*. The history size is controlled by setting
*history_max_entries*.
8. The new *run* method encapsulates the full execution cycle of a Kmd.
.. _`cmd.Cmd`: http://docs.python.org/library/cmd.html
.. _readline: http://docs.python.org/library/readline.html
Package Contents
----------------
kmd.Kmd
Implements the mechanics of a command shell, similar to `cmd.Cmd`_.
kmd.completions
Implements a set of ready-to-use completions.
Completions
-----------
FilenameCompletion
Complete names of files and directories on the filesystem. This is
the real deal, thanks to rl_ providing access to all the necessary readline
features. Includes full quoting support as well as support for decomposed
UTF-8 on HFS Plus!
UsernameCompletion
Complete names of users known to the system.
HostnameCompletion
Complete names of hosts in the system's ``/etc/hosts`` file.
EnvironmentCompletion
Complete names of variables in the process environment.
CommandCompletion
Complete names of executables on the system PATH.
Example Code
------------
::
import os
import kmd
from kmd.completions.filename import FilenameCompletion
from kmd.completions.environment import EnvironmentCompletion
class MyShell(kmd.Kmd):
def preloop(self):
super(MyShell, self).preloop()
self.completefilename = FilenameCompletion()
self.completeenviron = EnvironmentCompletion()
def do_cat(self, args):
os.system('cat ' + args)
def complete_cat(self, text, *ignored):
return self.completefilename(text)
def do_echo(self, args):
os.system('echo ' + args)
def complete_echo(self, text, *ignored):
return self.completeenviron(text)
def main():
MyShell().run()
For further details please refer to the `API Documentation`_.
Also see gpgkeys_, a front-end for GnuPG built entirely around tab completion.
.. _`API Documentation`: http://packages.python.org/kmd
.. _gpgkeys: http://pypi.python.org/pypi/gpgkeys
Development
-----------
kmd development is hosted on GitHub_ where it also has an `issue tracker`_.
.. _GitHub: http://github.com/stefanholek/kmd
.. _`issue tracker`: http://github.com/stefanholek/kmd/issues
Installation
============
Installation requires Python 2.5 or higher.
Note: kmd uses the rl_ library. Since rl contains a C extension, it is a good idea
to review its `installation instructions`_ and make sure all dependencies are
in place.
To install the ``kmd`` package, type::
easy_install kmd
.. _rl: http://pypi.python.org/pypi/rl
.. _`installation instructions`: http://pypi.python.org/pypi/rl#installation