Tree [e43443] master /

File Date Author Commit
 tests 2012-09-11 Horea Haitonic Horea Haitonic [0d0228] The InputState now stores the current match pat...
 .gitignore 2011-11-16 Horea Haitonic Horea Haitonic [7256aa] Added PyCharm's .idea cache directory to the ig... 2015-06-02 Horea Haitonic Horea Haitonic [e43443] Visual bells for text and history search 2013-08-14 Horea Haitonic Horea Haitonic [3e038d] Fixed crash when the DirHist was shorter than 8... 2015-06-02 Horea Haitonic Horea Haitonic [e43443] Visual bells for text and history search
 LICENSE.txt 2009-08-07 Horea Haitonic Horea Haitonic [743881] Added files from the SVN repository (SVN rev: 6...
 Makefile 2013-03-21 Horea Haitonic Horea Haitonic [5f84d7] Improved name for release archives
 NEWS.txt 2013-04-24 Horea Haitonic Horea Haitonic [e6e7a3] Updated README and NEWS for 0.9
 PyCmd.ico 2009-08-07 Horea Haitonic Horea Haitonic [743881] Added files from the SVN repository (SVN rev: 6... 2015-06-02 Horea Haitonic Horea Haitonic [e43443] Visual bells for text and history search
 README.txt 2013-11-06 Horea Haitonic Horea Haitonic [281e48] New limitation added to README (as per Issue #47) 2014-04-07 Horea Haitonic Horea Haitonic [08c5cd] Cleanup pseudo-vars from env also when running ... 2015-05-05 Horea Haitonic Horea Haitonic [812c28] Fix unique env-var completion 2015-02-20 Horea Haitonic Horea Haitonic [80ad1c] Visual bell (screen flash) when completion is n... 2012-05-15 Horea Haitonic Horea Haitonic [68ab04] Re-organized the configuration infrastructure 2009-08-15 Bogdan Dumitriu Bogdan Dumitriu [b54c78] Fixed spelling errors and added README-like inf... 2013-01-14 Horea Haitonic Horea Haitonic [c7b492] Update default console colors after each command 2011-11-23 Horea Haitonic Horea Haitonic [614a97] Revert "Add tests for ERRORLEVEL behavior" 2011-09-28 Horea Haitonic Horea Haitonic [1a7412] Ship the documentation of the pycmd_public module

Read Me

1. What is PyCmd?  
PyCmd is a 'smart' command prompt extension for Windows' cmd.exe; its purpose is
to emulate a few power features of UNIX shells (decent Tab-completion,
persistent history, etc.)

2. What are some important features?
 a. Tab completion 
    - when several completions are possible, list them instead of cycling
      through them
    - insert/remove quotes as needed
    - complete executables from the PATH and internal CMD.exe commands
    - complete names of environment variables, including pseudo-variables
    - complete wildcards
    - expand values of environment variables when completing
    - support both '/' and '\' as path separators

 b. Command history
    - the history is persistent across PyCmd sessions
    - one can search through the history (type a few filter characters/words,
      then Up/Down)
    - reordering is more intuitive than cmd's default strategy

 c. Command editing
    - support emacs key bindings
    - Copy-Paste using the keyboard (Ctrl-C/X/V or Emacs-style)
    - Undo/Redo with Ctrl-(Shift-)Z (regular style) or Ctrl-_ (Emacs-style)
    - dynamic, context-sensitive token expansion with Alt-/ (Emacs-style)
    - smart word-by-word navigation

 d. Other
    - show a highlighted prompt to make the buffer content more readable
    - smart prompt that abbreviates directory names to save screen space
    - configuration file ( for customizing colors, prompt etc.
    - Shift-PgUp/PgDn to scroll the buffer
    - history of recently visited directories (Alt-Left/Right/D on empty line)
    - expand ~ as %HOME% or %USERPROFILE%
    - Ctrl-D on an empty line closes PyCmd
    - show the current working directory in the window title

3. Known problems
    - pushd/popd are not supported
    - %ERRORLEVEL% is always 0 when executing commands interactively
    - DOSKEY macros are not supported
    - can NOT be used to fully replace cmd.exe as default shell (e.g. via 

4. Future plans
    - add some sort of a configuration mechanism (config file)
    - custom TAB-completion for the arguments of common commands
    - clean-up the mechanism that dispatches commands to cmd.exe (currently kind 
      of hacky)

5. How do I download/install/run it?
 a. Download the binary distribution (created with cx_freeze, see from

    Then, unpack and start PyCmd.exe. No installation is necessary.

 b. Fetch the Python sources from the repository at
    then start in Python or run 'make' to build the binary 
    You will need:
        - Python 2.7 from
        - Python for Windows extensions from 
        - pefile from   
    If you want to build (make), you'll also need:
        - cx_freeze from 
        - MinGW from

6. How do I report a crash/problem?
For any kind of bug, please use the bug tracker provided by SourceForge at
When reporting crashes, please try to locate and attach a crash log (look in
%APPDATA%\PyCmd for files named crash-yyyymmdd_hhmmss.log).

7. Credits
   - The fish shell is an endless source of good ideas:
   - is a nice package for implementing a Finite State Machine:

Horea Haitonic (h o r e a h _at_ g m a i l . c o m)