Subject: 24.0.97; Directory tracking and file name completion are confused by names containing spaces in shell-mode running cmdproxy.exe

From: Oleksandr Manzyuk <[email-masked]>
Date: Sat, 2 Jun 2012 16:23:31 +0100

This bug report will be sent to the Bug-GNU-Emacs mailing list
and the GNU bug tracker at debbugs.gnu.org.  Please check that
the From: line contains a valid email address.  After a delay of up
to one day, you should receive an acknowledgement at that address.

Please write in English if possible, as the Emacs maintainers
usually do not have translators for other languages.

Please describe exactly what actions triggered the bug, and
the precise symptoms of the bug.  If you can, give a recipe
starting from `emacs -Q':

This is a Windows-specific bug.  I reproduce it as follows in Emacs
running on Windows XP, which itself is running in a virtual machine.

1. emacs -Q
2. M-x shell
3. cd c:\
   The prompt changes to C:\>
4. M-: default-directory RET displays C:\
5. cd WINDOWS/Connection Wizard/

   Type "cd w", hit TAB, the command should be completed to
   "cd WINDOWS/", then type "conn" and hit TAB again to get
   "cd WINDOW/Connection Wizard/".  Hit RET.

   The prompt changes to C:\WINDOWS\Connection Wizard>, but
   M-: default-directory shows that Emacs still thinks that
   the current directory is C:\.

   From this moment on, file name completion is broken: try
   to type "cd " and hit TAB, and you should get a list of
   files and directories in C:\.

6. An attempt to resync the current directory with the help
   of M-x shell-resync-dirs fails:

   C:\WINDOWS\Connection Wizard>dirs
   dirs
   'dirs' is not recognized as an internal or external command,
   operable program or batch file.

   which is understandable because cmd.exe and cmdproxy.exe
   don't provide "dirs" built-in.

I think this issue only manifests itself with directory names containing
spaces.  A very similar issue was reported 12 years ago:

http://lists.gnu.org/archive/html/bug-gnu-emacs/2000-10/msg00031.html

but I can't figure out if it was ever assigned a bug number.  It doesn't
appear to be fixed either.

It is also somewhat unfortunate that `shell-resync-dirs' doesn't work on
Windows and no sensible default for `shell-dirstack-query' is provided.
Note also that the current method of parsing the directory stack from the
output of "dirs" in `shell-resync-dirs' doesn't work correctly with
directory names containing spaces, even on GNU/Linux.

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
For information about debugging Emacs, please read the file
c:/Program Files/emacs-24.0.97/etc/DEBUG.

In GNU Emacs 24.0.97.1 (i386-mingw-nt5.1.2600)
 of 2012-05-16 on MARVIN
Windowing system distributor `Microsoft Corp.', version 5.1.2600
Configured using:
 `configure --with-gcc (4.6) --no-opt --enable-checking --cflags
 -ID:/devel/emacs/libs/libXpm-3.5.8/include
 -ID:/devel/emacs/libs/libXpm-3.5.8/src
 -ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include
 -ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include
 -ID:/devel/emacs/libs/giflib-4.1.4-1/include
 -ID:/devel/emacs/libs/jpeg-6b-4/include
 -ID:/devel/emacs/libs/tiff-3.8.2-1/include
 -ID:/devel/emacs/libs/gnutls-3.0.9/include'

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: ENU
  value of $XMODIFIERS: nil
  locale-coding-system: cp1252
  default enable-multibyte-characters: t

Major mode: Shell

Minor modes in effect:
  shell-dirtrack-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
M-x s h e l l <return> c d SPC c : \ <return> c d SPC
w i n <tab> c o n n <tab> <return> M-: d e f a u l
t - d i r e c t o r y <return> c d SPC <tab> C-a C-k
M-x r e p o r t - e m <tab> <return>

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
c:/
"c:/"
Making completion list...

Load-path shadows:
None found.

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
mail-prsvr mail-utils help-mode easymenu view pcmpl-unix shell pcomplete
comint regexp-opt ansi-color ring time-date tooltip ediff-hook vc-hooks
lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win w32-vars
tool-bar dnd fontset image fringe lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process multi-tty emacs)