A modern version of cmd.Cmd using rl readline bindings
Project description
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:
Instead of Python’s readline module, kmd.Kmd uses the alternative rl readline bindings.
Setup and tear-down of the readline completer have been moved to preloop and postloop respectively. Subclasses must now make sure to call their parent’s implementations.
Lines starting with ‘#’ are treated as comments. The new comment method is invoked, passing the line as argument. By default this method clears the lastcmd.
Incomplete command names are automatically expanded given they are unique.
It is now possible to configure the shell_escape_characters. The default set is ‘!’.
If a history_file is configured, kmd.Kmd loads and saves the history during preloop and postloop.
The new run method encapsulates execution of a kmd.Kmd.
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 file and directory names.
- UsernameCompletion
Complete user names.
- EnvironmentCompletion
Complete environment variables.
- CommandCompletion
Complete system commands.
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_echo(self, args): os.system('echo ' + args) def complete_echo(self, text, line, begidx, endidx): return self.completeenviron(text) def do_cat(self, args): os.system('cat ' + args) def complete_cat(self, text, line, begidx, endidx): return self.completefilename(text) def main(): MyShell().run()
Also see gpgkeys, a front-end for GnuPG built entirely around tab completion.
Repository Access
kmd development is hosted on github.
Installation
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
Changelog
1.0 - 2011-07-14
Initial release.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.