Windows Command Line

Saturday September 10, 2005

For various reasons, I find myself spending more and more time in win32 these days.  Blech.

Luckily lots of useful programs have been ported to Windows lately so I am not entirely without tools.  However, there is one glaring problem which I can't seem to work around.

Rumour has it that the command-line interface to Windows isn't a program at all, but some kind of awful kernel service.  cmd.exe is also some kind of horrid abomination.  Here are some things that are wrong with it:

  • Command Window
    • It doesn't draw the same style of window borders as every other window.
    • You can't resize it horizontally, interactively.
      • You can't maximize it horizontally
      • On a system with multiple desktops, you can only maximize it on one desktop
    • There is no keyboard shortcut for pasting text.
    • "QuickEdit mode" isn't the default, so the window is unresponsive to the mouse
      • and even when it is turned on, it behaves extremely bizarrely, unlike xterm or any other Windows program
    • The scrollback is unbelievably pathetic - only 999 lines?
    • You can't select monospaced fonts such as ProFont, only Lucida Console and the default VGA font
    • Regular window keyboard shortcuts don't work: you can't close it with Alt-F4.
    • It ... conflicts ... with some video card drivers.  I had to update my nvidia drivers just so I could drag command windows around!! How is that even possible!??
  • CMD.EXE
    • no tab-completion of commands
    • no tab-completion of commands
    • you can't tab-complete commands
    • history behaves weirdly: you seem to maintain a global position in it, except... you don't
    • going back to your home directory is harder than starting a new terminal, seriously:
      X:\>%HOMEDRIVE%
      X:\>cd %HOMEPATH%
    • there is no shortcut like ~ to refer to your home path in other commands, either
    • there is no shell-startup file
    • .bat language is almost perversely crippled
    • the shell doesn't do expansion, so tricks like 'echo *' don't work.
    • the whole idea of %PATHEXT% is weird; how do I make this compatible with scripts for any other platform?
    • did I mention that tab-completion is broken?

Now, I realize that you can use cygwin's bash.exe to correct some of the deficiencies of the shell, but it has its own issues.  Is there anything that can replace the command window, so that I can use cywin's bash, Python, and other command-line tools without cringing constantly?  In particular the horizontal resize and maximize issues are the worst.  I have already tried xterm under cygwin as well as local SSH with PuTTY - both of these don't work very well with actual Windows command-line programs (such as Python) so I'd like something designed specifically for Windows.