horeah / PyCmd

Improved interactive experience for Windows' cmd.exe
GNU Lesser General Public License v3.0
23 stars 6 forks source link
cmd completion history prompt
  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.)

[Experimental] PyCmd now also runs on Linux, acting as a front-end for bash

  1. What are some important features?

    a. Tab completion

    • when several completions are possible, list them (plain/bash- or interactive/zsh-style)
    • 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 suggestions

    • automatically suggest commands from history or from available completions:
      • accept with Right/End
      • accept partially with "forward-word" (Ctrl-Right etc.)
      • accept & run with Ctrl-Enter

    b. Command history

    • the history is persistent across PyCmd sessions
    • direct history search (type a few filter characters/words, then Up/Down)
    • incremental history search (Ctrl-R)
    • remove command from history (Ctrl-Alt-K)
    • history ordering 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)
    • search string ([Shift-]F3)
    • smart word-by-word navigation
    • lexical selection (Shift-Up/Down)

    d. Navigation

    • history of recently visited directories (Alt-Left/Right/D on empty line)
    • cd to parent (Alt-Up)

    e. Other

    • smart prompt:
      • highlighted for readability
      • abbreviates path to save space
      • displays git and svn status
      • displays ERRORLEVEL (if > 0)
      • customizable
    • configuration file (init.py) for customizing colors, prompt etc.
    • Shift-PgUp/PgDn to scroll the buffer
    • expand/abbreviate ~ as %HOME% or %USERPROFILE%
    • Ctrl-D on an empty line closes PyCmd
    • show the current working directory in the window title
  2. Known problems

    • when DelayedExpansion is disabled (PyCmd.exe /V:OFF), %ERRORLEVEL% is not properly processed
    • DOSKEY macros are not supported
    • can NOT be used to fully replace cmd.exe as default shell (e.g. via %COMSPEC%)
  3. Future plans

    • custom TAB-completion for the arguments of common commands
    • clean-up the mechanism that dispatches commands to cmd.exe (currently kind of hacky)
  4. How do I download/install/run it?


    a. Download a binary distribution (created with cx_freeze, see https://pypi.org/project/cx-Freeze/) from https://github.com/horeah/PyCmd/releases Then, unpack and start PyCmd.exe. No installation is necessary.

    b. Clone the repository, then: (1) python run_tests.py to run tests (2) python PyCmd.py to start the application You will need:

    • Python 3.10+ from http://www.python.org/download/
    • The pywin32 package (pip install pywin32)
    • The pefile package (pip install pefile) (3) make to to build a binary distribution You will also need:
    • cx_freeze (pip install cx_freeze)
    • MinGW from http://www.mingw.org/
  5. How do I report a crash/problem?

    For bugs or feature requests, please use the bug tracker provided by GitHub at https://github.com/horeah/PyCmd/issues

When reporting crashes, please try to locate and attach a crash log (look in %APPDATA%\PyCmd for files named crash-yyyymmdd_hhmmss.log).

  1. Credits


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