PyCmd
PyCmd copied to clipboard
Improved interactive experience for Windows' cmd.exe
- 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
- 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 or partially with Ctrl-Right; or Emacs-style)
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
- 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%)
- 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)
- 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/
- 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).
- Credits
- The fish shell is an endless source of good ideas: https://fishshell.com/
- fsm.py is a nice package for implementing a Finite State Machine: http://code.activestate.com/recipes/146262
Horea Haitonic (h o r e a h at g m a i l . c o m)