先列一下.reg 文件内容:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\启动HTTP Server]
[HKEY_CLASSES_ROOT\Directory\shell\启动HTTP Server\command]
@="cmd.exe /k cd %1 & python -m SimpleHTTPServer"
[HKEY_CLASSES_ROOT\Directory\shell\打开命令行]
[HKEY_CLASSES_ROOT\Directory\shell\打开命令行\command]
@="cmd.exe /k cd %1"
[HKEY_CLASSES_ROOT\Directory\shell\启动 Cygwin\]
[HKEY_CLASSES_ROOT\Directory\shell\启动 Cygwin\command]
@="cmd.exe /k "cd %1 && cd> D:\cygwin\dir.tmp && D:\cygwin\cygwin.bat"
其中 D:\cygwin 是我的 Cygwin 安装目录。
原理很简单,就是启动一个命令行然后运行一下自定义命令。因为 HTTP Server 使用的是 python 的临时 HTTP 服务命令,所以依赖于 python。
解释一下最后一条命令:
cmd.exe /k "cd %1 && cd> D:\cygwin\dir.tmp && D:\cygwin\cygwin.bat
其中的 cd> D:\cygwin\dir.tmp 是把当前路径写到硬盘的一个临时文件里。我在网上找了几个 cmd 和 Cygwin 共享当前目录的解决方案,这个最好懂,虽然不太优雅。
还没完,还要在 D:\cygwin\etc\bash.bashrc 文件里增加以下内容:
if [ -f /dir.tmp ]
then dir=$((sed 's/\\/\//g' /dir.tmp|sed 's/\ /?/g')|sed 's/://g')
cd /cygdrive/$dir
rm /dir.tmp
fi
因为 Cygwin 访问 Windows 目录使用的是一个虚拟路径,所以假设你要访问的是 C:\foobar,你要先转换为 /cygdrive/c/foobar,再调用 cd 命令。