Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

An interpreter framework

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:

  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.

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.

Development

kmd development is hosted on GitHub where it also has an issue tracker.

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

Changelog

2.2 - 2012-05-10

  • String and filename quoting was not respected when Kmd.run was called with arguments. [stefan]
  • Switch to a happier looking Sphinx theme. [stefan]
  • Require rl >= 2.2. [stefan]

2.1.2 - 2012-04-14

  • Update documentation more. [stefan]

2.1.1 - 2012-03-29

  • Update documentation. [stefan]

2.1 - 2011-11-05

  • Add Kmd.input method as extension point for subclasses. [stefan]
  • Make sure hostname completion survives a missing hosts file. [stefan]
  • Require rl >= 2.0.1. [stefan]

2.0 - 2011-10-06

  • Add Kmd.aliases dictionary to define command aliases. [stefan]
  • Refactor Kmd.do_help for easier customization. [stefan]
  • Make sure error messages go to stderr. [stefan]
  • Switch to pretty Sphinx-based docs. [stefan]
  • Require rl >= 2.0. [stefan]

1.0 - 2011-07-14

  • Initial release.
Release History

Release History

This version
History Node

2.2

History Node

2.1.2

History Node

2.1.1

History Node

2.1

History Node

2.0

History Node

1.0

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
kmd-2.2.zip (35.6 kB) Copy SHA256 Checksum SHA256 Source May 10, 2012

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting