To:
[email protected]
Subject: Patch 5.6a.027 (extra)
Fcc: outbox
From: Bram Moolenaar <
[email protected]>
------------
Note: This is just the source code, please compile yourself.
Note2: You need to create the "GvimExt" directory first.
Patch 5.6a.027 (extra)
Problem: Win32 GUI: The "Edit with Vim" popup menu entry causes problems
for the Office toolbar.
Solution: Use a shell extension dll. (Tianmiao Hu)
Added it to the install and uninstal programs, replaces the old
"Edit with Vim" menu registry entries.
Files: src/dosinst.c, src/uninstal.c, gvimext/*, runtime/doc/gui_w32.txt
*** ../vim-5.6a.26/src/dosinst.c Mon Dec 20 09:59:09 1999
--- src/dosinst.c Fri Jan 14 22:38:22 2000
***************
*** 48,53 ****
--- 48,54 ----
/*
* Return TRUE if the user types a 'y' or 'Y', FALSE otherwise.
+ * Eats white space first.
*/
int
confirm(void)
***************
*** 250,256 ****
# define VER_PLATFORM_WIN32_WINDOWS 1
#endif
- static void PlatformId(void);
static DWORD g_PlatformId;
/*
--- 251,256 ----
***************
*** 507,512 ****
--- 507,513 ----
int vimdirend;
int need_vimvar = 1; /* need to set $VIM */
int has_gvim = 0; /* gvim.exe exists */
+ struct stat st;
#ifdef DJGPP
/*
***************
*** 748,756 ****
/*
* Add some entries to the registry to add "Edit with Vim" to the context
* menu.
! * Only do this when gvim.exe was found and regedit.exe exists.
*/
if (has_gvim
#ifndef WIN32
&& searchpath("regedit.exe") != NULL
#endif
--- 749,759 ----
/*
* Add some entries to the registry to add "Edit with Vim" to the context
* menu.
! * Only do this when gvim.exe was found and both gvimext.dll and
! * regedit.exe exist.
*/
if (has_gvim
+ && stat("gvimext.dll", &st) >= 0
#ifndef WIN32
&& searchpath("regedit.exe") != NULL
#endif
***************
*** 758,767 ****
{
printf("\nI can install an entry in the popup menu for the right\n");
printf("mouse button, so that you can edit any file with Vim.\n");
- printf("(NOTE: The MS-Office toolbar has a problem with this!)\n");
printf("Do you want me to do this? (Y/N) ");
if (!confirm())
! printf("didn't change popup menu\n");
else
{
fd = fopen("vim.reg", "w");
--- 761,769 ----
{
printf("\nI can install an entry in the popup menu for the right\n");
printf("mouse button, so that you can edit any file with Vim.\n");
printf("Do you want me to do this? (Y/N) ");
if (!confirm())
! printf("didn't add Vim popup menu entry\n");
else
{
fd = fopen("vim.reg", "w");
***************
*** 771,786 ****
{
char buf[BUFSIZE];
! /* The registry entries for the "Edit with Vim" menu */
! fprintf(fd, "REGEDIT4\n\n");
! fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\shell\\Vim]\n");
! fprintf(fd, "@=\"Edit with &Vim\"\n\n");
! fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\shell\\Vim\\command]\n");
double_bs(exedir, buf); /* double the backslashes */
! fprintf(fd, "@=\"%sgvim.exe \\\"%%L\\\"\"\n\n", buf);
/* The registry entries for uninstalling the menu */
! fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\vim %s]\n", VIM_VERSION_SHORT);
fprintf(fd, "\"DisplayName\"=\"Vim %s: Edit with Vim popup menu entry\"\n", VIM_VERSION_SHORT);
double_bs(vimdir, buf); /* double the backslashes */
fprintf(fd, "\"UninstallString\"=\"%suninstal.exe\"\n", buf);
--- 773,803 ----
{
char buf[BUFSIZE];
! /*
! * Write the registry entries for the "Edit with Vim" menu.
! */
! fprintf(fd, "REGEDIT4\n");
! fprintf(fd, "\n");
! fprintf(fd, "HKEY_CLASSES_ROOT\\CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\n");
! fprintf(fd, "@=\"Vim Shell Extension\"\n");
! fprintf(fd, "[HKEY_CLASSES_ROOT\\CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32]\n");
! double_bs(vimdir, buf); /* double the backslashes */
! fprintf(fd, "@=\"%sgvimext.dll\"\n", buf);
! fprintf(fd, "\"ThreadingModel\"=\"Apartment\"\n");
! fprintf(fd, "\n");
! fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\shellex\\ContextMenuHandlers\\gvim]\n");
! fprintf(fd, "@=\"{51EEE242-AD87-11d3-9C1E-0090278BBD99}\"\n");
! fprintf(fd, "\n");
! fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved]\n");
! fprintf(fd, "\"{51EEE242-AD87-11d3-9C1E-0090278BBD99}\"=\"Vim Shell Extension\"\n");
! fprintf(fd, "\n");
! fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Vim\\Gvim]\n");
double_bs(exedir, buf); /* double the backslashes */
! fprintf(fd, "\"path\"=\"%sgvim.exe\"\n", buf);
! fprintf(fd, "\n");
/* The registry entries for uninstalling the menu */
! fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim %s]\n", VIM_VERSION_SHORT);
fprintf(fd, "\"DisplayName\"=\"Vim %s: Edit with Vim popup menu entry\"\n", VIM_VERSION_SHORT);
double_bs(vimdir, buf); /* double the backslashes */
fprintf(fd, "\"UninstallString\"=\"%suninstal.exe\"\n", buf);
*** ../vim-5.6a.26/src/uninstal.c Mon Dec 20 09:59:15 1999
--- src/uninstal.c Fri Jan 14 22:40:47 2000
***************
*** 36,54 ****
main(int argc, char *argv[])
{
int fail = 0;
printf("This program will remove the \"Edit with Vim\" entry from the popup menu\n");
printf("Continue (y/n)? ");
if (confirm())
{
! if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Vim\\command")
! != ERROR_SUCCESS)
++fail;
! if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Vim") != ERROR_SUCCESS)
++fail;
if (RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT) != ERROR_SUCCESS)
++fail;
! if (fail == 3)
printf("No Vim registry entries could be removed\n");
else if (fail)
printf("Some Vim registry entries could not be removed\n");
--- 36,70 ----
main(int argc, char *argv[])
{
int fail = 0;
+ HKEY kh;
printf("This program will remove the \"Edit with Vim\" entry from the popup menu.\n");
+ printf("It will NOT delete the Vim executable or runtime files.\n");
printf("Continue (y/n)? ");
if (confirm())
{
! if (RegDeleteKey(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\\InProcServer32") != ERROR_SUCCESS)
++fail;
! if (RegDeleteKey(HKEY_CLASSES_ROOT, "CLSID\\{51EEE242-AD87-11d3-9C1E-0090278BBD99}") != ERROR_SUCCESS)
! ++fail;
! if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shellex\\ContextMenuHandlers\\gvim") != ERROR_SUCCESS)
! ++fail;
! if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", 0, KEY_ALL_ACCESS, &kh) != ERROR_SUCCESS)
! ++fail;
! else
! {
! if (RegDeleteValue(kh, "{51EEE242-AD87-11d3-9C1E-0090278BBD99}") != ERROR_SUCCESS)
! ++fail;
! RegCloseKey(kh);
! }
! if (RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim") != ERROR_SUCCESS)
! ++fail;
! if (RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\\Vim") != ERROR_SUCCESS)
++fail;
if (RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT) != ERROR_SUCCESS)
++fail;
!
! if (fail == 7)
printf("No Vim registry entries could be removed\n");
else if (fail)
printf("Some Vim registry entries could not be removed\n");
diff -crN ../vim-5.6a.26/GvimExt/GvimExt.reg GvimExt/GvimExt.reg
*** ../vim-5.6a.26/GvimExt/GvimExt.reg Thu Jan 1 01:00:00 1970
--- GvimExt/GvimExt.reg Fri Jan 14 16:01:29 2000
***************
*** 0 ****
--- 1,20 ----
+ REGEDIT4
+
+ [HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}]
+ @="Vim Shell Extension"
+ [HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32]
+ @="gvimext.dll"
+ "ThreadingModel"="Apartment"
+
+ [HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim]
+ @="{51EEE242-AD87-11d3-9C1E-0090278BBD99}"
+
+ [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
+ "{51EEE242-AD87-11d3-9C1E-0090278BBD99}"="Vim Shell Extension"
+
+ [HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
+ "path"="gvim.exe"
+
+ [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 5.6]
+ "DisplayName"="Vim 5.6: Edit with Vim popup menu entry"
+ "UninstallString"="uninstal.exe"
diff -crN ../vim-5.6a.26/GvimExt/Makefile GvimExt/Makefile
*** ../vim-5.6a.26/GvimExt/Makefile Thu Jan 1 01:00:00 1970
--- GvimExt/Makefile Tue Jan 11 20:00:59 2000
***************
*** 0 ****
--- 1,17 ----
+ TARGETOS=BOTH
+ APPVER=4.0
+
+ !include <win32.mak>
+
+ all: gvimext.dll
+
+ gvimext.dll: gvimext.obj \
+ gvimext.res
+ $(implib) -machine:$(CPU) -def:gvimext.def $** -out:gvimext.lib
+ $(link) $(dlllflags) -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib gvimext.lib comctl32.lib gvimext.exp
+
+ .cpp.obj:
+ $(cc) $(cflags) $(cvarsdll) $*.cpp
+
+ gvimext.res: gvimext.rc
+ $(rc) $(rcflags) $(rcvars) gvimext.rc
diff -crN ../vim-5.6a.26/GvimExt/README.txt GvimExt/README.txt
*** ../vim-5.6a.26/GvimExt/README.txt Thu Jan 1 01:00:00 1970
--- GvimExt/README.txt Fri Jan 14 17:13:33 2000
***************
*** 0 ****
--- 1,88 ----
+ README.txt for the gvimext DLL.
+
+ Written by Tianmiao Hu. Edited by Bram Moolenaar.
+
+
+ INSTALLATION
+
+ To install the "Edit with Vim" popup menu entry, it is recommended to use the
+ "install.exe" program. It will ask you a few questions and install the needed
+ registry entries.
+
+ In special situations you might want to make changes by hand.
+ - The gvimext.dll, gvim.exe and uninstal.exe either need to be in the search
+ path, or you have to set the full path in the registry entries. You could
+ move the gvimext.dll to the "windows\system" or "windows\system32"
+ directory, where the other DLL files are.
+ - You can find the names of the used registry entries in the file
+ "GvimExt.reg". You can edit this file to add the paths. To install the
+ registry entries, right-click the gvimext.reg file and choose the "merge"
+ menu option.
+ - The registry key [HKEY_LOCAL_MACHINE\Software\Vim\Gvim] is used by the
+ gvimext.dll. The value "path" specifies the location of "gvim.exe". If
+ gvim.exe is in the search path, the path can be omitted.
+
+
+ UNINSTALLATION
+
+ To uninstall the "Edit with Vim" popup menu entry, it is recommended to use
+ the "uninstal.exe" program.
+
+ In special situations you might want to uninstall by hand.
+ - Open the registry by running regedit.exe.
+ - Delete all the keys listed in GvimExt.reg, except this one:
+ [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
+ For this key, only delete one value:
+ "{51EEE242-AD87-11d3-9C1E-0090278BBD99}"="Vim Shell Extension"
+ - Delete the gvimext.dll, if you want. You might need to reboot the machine
+ in order to remove this file. A quick way is to log off and re-login.
+
+ Another method is by using the uninst.bat script:
+ uninst gvimext.inf
+ This batch file will remove all the registry keys from the system. Then you
+ can remove the gvimext.dll file.
+ Note: In order for this batch file to work, you must have two system files:
+ rundll32.exe and setupapi.dll. I believe you will have rundll32.exe in your
+ system. I know windows nt 4.0 with the service pack 4 has setupapi.dll. My
+ windows 95 has setupapi.dll. I find that the internet explorer 4.0 comes with
+ the setupapi.dll in file Ie4_5.cab.
+
+ If you do encounter problems running this script, then probably you need to
+ modify the uninst.bat to suit to your system. Basically, you must find out
+ where are the locations for your rundll32.exe and setupapi.dll files. In
+ windows nt, both files are under c:\winnt\system32 directory. In my windows 95
+ system, I got setupapi.dll at c:\windows\system and rundll32.exe at
+ c:\windows. So you might want to try something like:
+ rundll32.exe c:\windows\system\setupapi.dll,InstallHinfSection DefaultUninstall 128 %1
+ where %1 can be substitued by gvimext.inf
+
+
+ THE SOURCE CODE
+
+ I have provided the source code here in hope that gvim users around world can
+ further enhance this little dll. I believe the only thing you need to change
+ is gvimext.cpp file. The important two functions you need to look at are
+ QueryContextMenu and InvokeCommand. You can modify righ-click menus in the
+ QueryContextMenu function and invoke gvim in the InvokeCommand function. Note
+ the selected files can be accessed from the DragQueryFile function. I am not
+ familiar with the invoking options for gvim. I believe there are some
+ improvements that can be made on that side.
+
+ I use MS Visual C++ 6.0's nmake to make the gvimext.dll. I don't have a
+ chance to try earlier versions of MSVC. The files that are required for build
+ are:
+ gvimext.cpp
+ gvimext.h
+ gvimext.def
+ gvimext.rc
+ resource.h
+ Makefile
+
+ To compile the DLL from the command line:
+ vcvars32
+ nmake -f Makefile
+
+ If you did something interesting to this dll, please let me know
+ @
[email protected].
+
+ Happy vimming!!!
diff -crN ../vim-5.6a.26/GvimExt/gvimext.cpp GvimExt/gvimext.cpp
*** ../vim-5.6a.26/GvimExt/gvimext.cpp Thu Jan 1 01:00:00 1970
--- GvimExt/gvimext.cpp Wed Jan 12 12:38:21 2000
***************
*** 0 ****
--- 1,509 ----
+ /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved gvimext by Tianmiao Hu
+ *
+ * Do ":help uganda" in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+ /*
+ * gvimext is a DLL which is used for the "Edit with Vim" context menu
+ * extension. It implements a MS defined interface with the Shell.
+ *
+ * If you have any questions or any suggestions concerning gvimext, please
+ * contact Tianmiao Hu:
[email protected].
+ */
+
+ #include "gvimext.h"
+
+ // Always get an error while putting the following stuff to the
+ // gvimext.h file as class protected variables, give up and
+ // declare them as global stuff
+ FORMATETC fmte = {CF_HDROP,
+ (DVTARGETDEVICE FAR *)NULL,
+ DVASPECT_CONTENT,
+ -1,
+ TYMED_HGLOBAL
+ };
+ STGMEDIUM medium;
+ HRESULT hres = 0;
+ UINT cbFiles = 0;
+
+ //
+ // Global variables
+ //
+ UINT g_cRefThisDll = 0; // Reference count of this DLL.
+ HINSTANCE g_hmodThisDll = NULL; // Handle to this DLL itself.
+
+ extern "C" int APIENTRY
+ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+ {
+ if (dwReason == DLL_PROCESS_ATTACH)
+ {
+ // Extension DLL one-time initialization
+ g_hmodThisDll = hInstance;
+ }
+
+ return 1; // ok
+ }
+
+ //---------------------------------------------------------------------------
+ // DllCanUnloadNow
+ //---------------------------------------------------------------------------
+
+ STDAPI DllCanUnloadNow(void)
+ {
+ return (g_cRefThisDll == 0 ? S_OK : S_FALSE);
+ }
+
+ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
+ {
+ *ppvOut = NULL;
+
+ if (IsEqualIID(rclsid, CLSID_ShellExtension))
+ {
+ CShellExtClassFactory *pcf = new CShellExtClassFactory;
+
+ return pcf->QueryInterface(riid, ppvOut);
+ }
+
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ CShellExtClassFactory::CShellExtClassFactory()
+ {
+ m_cRef = 0L;
+
+ g_cRefThisDll++;
+ }
+
+ CShellExtClassFactory::~CShellExtClassFactory()
+ {
+ g_cRefThisDll--;
+ }
+
+ STDMETHODIMP CShellExtClassFactory::QueryInterface(REFIID riid,
+ LPVOID FAR *ppv)
+ {
+ *ppv = NULL;
+
+ // Any interface on this object is the object pointer
+
+ if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppv = (LPCLASSFACTORY)this;
+
+ AddRef();
+
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+ }
+
+ STDMETHODIMP_(ULONG) CShellExtClassFactory::AddRef()
+ {
+ return ++m_cRef;
+ }
+
+ STDMETHODIMP_(ULONG) CShellExtClassFactory::Release()
+ {
+ if (--m_cRef)
+ return m_cRef;
+
+ delete this;
+
+ return 0L;
+ }
+
+ STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObj)
+ {
+ *ppvObj = NULL;
+
+ // Shell extensions typically don't support aggregation (inheritance)
+
+ if (pUnkOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ // Create the main shell extension object. The shell will then call
+ // QueryInterface with IID_IShellExtInit--this is how shell extensions are
+ // initialized.
+
+ LPCSHELLEXT pShellExt = new CShellExt(); //Create the CShellExt object
+
+ if (NULL == pShellExt)
+ return E_OUTOFMEMORY;
+
+ return pShellExt->QueryInterface(riid, ppvObj);
+ }
+
+
+ STDMETHODIMP CShellExtClassFactory::LockServer(BOOL fLock)
+ {
+ return NOERROR;
+ }
+
+ // *********************** CShellExt *************************
+ CShellExt::CShellExt()
+ {
+ m_cRef = 0L;
+ m_pDataObj = NULL;
+
+ g_cRefThisDll++;
+ }
+
+ CShellExt::~CShellExt()
+ {
+ if (m_pDataObj)
+ m_pDataObj->Release();
+
+ g_cRefThisDll--;
+ }
+
+ STDMETHODIMP CShellExt::QueryInterface(REFIID riid, LPVOID FAR *ppv)
+ {
+ *ppv = NULL;
+
+ if (IsEqualIID(riid, IID_IShellExtInit) || IsEqualIID(riid, IID_IUnknown))
+ {
+ *ppv = (LPSHELLEXTINIT)this;
+ }
+ else if (IsEqualIID(riid, IID_IContextMenu))
+ {
+ *ppv = (LPCONTEXTMENU)this;
+ }
+
+ if (*ppv)
+ {
+ AddRef();
+
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+ }
+
+ STDMETHODIMP_(ULONG) CShellExt::AddRef()
+ {
+ return ++m_cRef;
+ }
+
+ STDMETHODIMP_(ULONG) CShellExt::Release()
+ {
+
+ if (--m_cRef)
+ return m_cRef;
+
+ delete this;
+
+ return 0L;
+ }
+
+
+ //
+ // FUNCTION: CShellExt::Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY)
+ //
+ // PURPOSE: Called by the shell when initializing a context menu or property
+ // sheet extension.
+ //
+ // PARAMETERS:
+ // pIDFolder - Specifies the parent folder
+ // pDataObj - Spefifies the set of items selected in that folder.
+ // hRegKey - Specifies the type of the focused item in the selection.
+ //
+ // RETURN VALUE:
+ //
+ // NOERROR in all cases.
+ //
+ // COMMENTS: Note that at the time this function is called, we don't know
+ // (or care) what type of shell extension is being initialized.
+ // It could be a context menu or a property sheet.
+ //
+
+ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
+ LPDATAOBJECT pDataObj,
+ HKEY hRegKey)
+ {
+ // Initialize can be called more than once
+ HRESULT hres = 0;
+
+ if (m_pDataObj)
+ m_pDataObj->Release();
+
+ // duplicate the object pointer and registry handle
+
+ if (pDataObj)
+ {
+ m_pDataObj = pDataObj;
+ pDataObj->AddRef();
+ }
+
+ return NOERROR;
+ }
+
+
+ //
+ // FUNCTION: CShellExt::QueryContextMenu(HMENU, UINT, UINT, UINT, UINT)
+ //
+ // PURPOSE: Called by the shell just before the context menu is displayed.
+ // This is where you add your specific menu items.
+ //
+ // PARAMETERS:
+ // hMenu - Handle to the context menu
+ // indexMenu - Index of where to begin inserting menu items
+ // idCmdFirst - Lowest value for new menu ID's
+ // idCmtLast - Highest value for new menu ID's
+ // uFlags - Specifies the context of the menu event
+ //
+ // RETURN VALUE:
+ //
+ //
+ // COMMENTS:
+ //
+
+ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
+ UINT indexMenu,
+ UINT idCmdFirst,
+ UINT idCmdLast,
+ UINT uFlags)
+ {
+ UINT idCmd = idCmdFirst;
+ BOOL bAppendItems=TRUE;
+
+ hres = m_pDataObj->GetData(&fmte, &medium);
+ if (medium.hGlobal)
+ cbFiles = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, 0, 0);
+
+ // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+ if (cbFiles > 1)
+ {
+ InsertMenu(hMenu,
+ indexMenu++,
+ MF_STRING|MF_BYPOSITION,
+ idCmd++,
+ "Edit with multiple &Vims");
+
+ InsertMenu(hMenu,
+ indexMenu++,
+ MF_STRING|MF_BYPOSITION,
+ idCmd++,
+ "Edit with single &Vim");
+ }
+ else
+ {
+ InsertMenu(hMenu,
+ indexMenu++,
+ MF_STRING|MF_BYPOSITION,
+ idCmd++,
+ "Edit with &Vim");
+ }
+
+ // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+ // Must return number of menu items we added.
+ return ResultFromShort(idCmd-idCmdFirst);
+ }
+
+ //
+ // FUNCTION: CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO)
+ //
+ // PURPOSE: Called by the shell after the user has selected on of the
+ // menu items that was added in QueryContextMenu().
+ //
+ // PARAMETERS:
+ // lpcmi - Pointer to an CMINVOKECOMMANDINFO structure
+ //
+ // RETURN VALUE:
+ //
+ //
+ // COMMENTS:
+ //
+
+ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
+ {
+ HRESULT hr = E_INVALIDARG;
+
+ // If HIWORD(lpcmi->lpVerb) then we have been called programmatically
+ // and lpVerb is a command that should be invoked. Otherwise, the shell
+ // has called us, and LOWORD(lpcmi->lpVerb) is the menu ID the user has
+ // selected. Actually, it's (menu ID - idCmdFirst) from QueryContextMenu().
+ if (!HIWORD(lpcmi->lpVerb))
+ {
+ UINT idCmd = LOWORD(lpcmi->lpVerb);
+
+ switch(idCmd)
+ {
+ case 0:
+ hr = InvokeGvim(lpcmi->hwnd,
+ lpcmi->lpDirectory,
+ lpcmi->lpVerb,
+ lpcmi->lpParameters,
+ lpcmi->nShow);
+ break;
+ case 1:
+ hr = InvokeSingleGvim(lpcmi->hwnd,
+ lpcmi->lpDirectory,
+ lpcmi->lpVerb,
+ lpcmi->lpParameters,
+ lpcmi->nShow);
+ break;
+ }
+ }
+ return hr;
+ }
+
+ STDMETHODIMP CShellExt::GetCommandString(UINT idCmd,
+ UINT uFlags,
+ UINT FAR *reserved,
+ LPSTR pszName,
+ UINT cchMax)
+ {
+ switch (idCmd)
+ {
+ case 0:
+ lstrcpy(pszName, "Edits the selected file(s) with Vim");
+ break;
+ }
+
+ return NOERROR;
+ }
+
+ static void
+ getGvimName(char *name)
+ {
+ HKEY keyhandle;
+ DWORD hlen;
+
+ /* Get the location of gvim.exe from the registry. */
+ name[0] = 0;
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+ KEY_READ, &keyhandle) == ERROR_SUCCESS)
+ {
+ hlen = MAX_PATH;
+ if (RegQueryValueEx(keyhandle, "path", 0, NULL, (BYTE *)name, &hlen)
+ != ERROR_SUCCESS)
+ name[0] = 0;
+ else
+ name[hlen] = 0;
+ RegCloseKey(keyhandle);
+ }
+ if (name[0] == 0)
+ strcpy(name, "gvim.exe");
+ }
+
+ STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
+ LPCSTR pszWorkingDir,
+ LPCSTR pszCmd,
+ LPCSTR pszParam,
+ int iShowCmd)
+ {
+ char m_szFileUserClickedOn[MAX_PATH];
+ char cmdStr[MAX_PATH];
+
+ UINT i;
+ for (i = 0; i < cbFiles; i++)
+ {
+ DragQueryFile((HDROP)medium.hGlobal,
+ i,
+ m_szFileUserClickedOn,
+ sizeof(m_szFileUserClickedOn));
+
+ getGvimName(cmdStr);
+ strcat(cmdStr, " \"");
+
+ if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < MAX_PATH)
+ {
+ strcat(cmdStr, m_szFileUserClickedOn);
+ strcat(cmdStr, "\"");
+
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+
+ // Start the child process.
+ if (!CreateProcess(NULL, // No module name (use command line).
+ cmdStr, // Command line.
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+ 0, // No creation flags.
+ NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+ )
+ {
+ MessageBox(hParent, "Error creating process: Check if gvim.exe is in your path!", "gvimext.dll error", MB_OK);
+ }
+ }
+ else
+ {
+ MessageBox(hParent, "Path length too long!", "gvimext.dll error", MB_OK);
+ }
+ }
+
+ return NOERROR;
+ }
+
+
+ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
+ LPCSTR pszWorkingDir,
+ LPCSTR pszCmd,
+ LPCSTR pszParam,
+ int iShowCmd)
+ {
+ char m_szFileUserClickedOn[MAX_PATH];
+ char cmdStr[MAX_PATH];
+ UINT i;
+
+ getGvimName(cmdStr);
+ for (i = 0; i < cbFiles; i++)
+ {
+ DragQueryFile((HDROP)medium.hGlobal,
+ i,
+ m_szFileUserClickedOn,
+ sizeof(m_szFileUserClickedOn));
+
+ if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4) < MAX_PATH)
+ {
+ strcat(cmdStr, " \"");
+ strcat(cmdStr, m_szFileUserClickedOn);
+ strcat(cmdStr, "\"");
+ }
+ else
+ {
+ MessageBox(hParent, "Path length too long or too many files selected!", "gvimext.dll error", MB_OK);
+
+ return NOERROR;
+ }
+ }
+
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+
+ // Start the child process.
+ if (!CreateProcess(NULL, // No module name (use command line).
+ cmdStr, // Command line.
+ NULL, // Process handle not inheritable.
+ NULL, // Thread handle not inheritable.
+ FALSE, // Set handle inheritance to FALSE.
+ 0, // No creation flags.
+ NULL, // Use parent's environment block.
+ NULL, // Use parent's starting directory.
+ &si, // Pointer to STARTUPINFO structure.
+ &pi) // Pointer to PROCESS_INFORMATION structure.
+ )
+ {
+ MessageBox(hParent, "Error creating process: Check if gvim.exe is in your path!", "gvimext.dll error", MB_OK);
+ }
+
+ return NOERROR;
+ }
diff -crN ../vim-5.6a.26/GvimExt/gvimext.def GvimExt/gvimext.def
*** ../vim-5.6a.26/GvimExt/gvimext.def Thu Jan 1 01:00:00 1970
--- GvimExt/gvimext.def Fri Jan 14 17:03:08 2000
***************
*** 0 ****
--- 1,8 ----
+ ;gvimdef.def : Declares the module parameters for the DLL.
+
+ LIBRARY gvimext
+ DESCRIPTION 'Vim Shell Extension'
+
+ EXPORTS
+ DllCanUnloadNow private
+ DllGetClassObject private
diff -crN ../vim-5.6a.26/GvimExt/gvimext.h GvimExt/gvimext.h
*** ../vim-5.6a.26/GvimExt/gvimext.h Thu Jan 1 01:00:00 1970
--- GvimExt/gvimext.h Wed Jan 12 12:13:56 2000
***************
*** 0 ****
--- 1,152 ----
+ /* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved gvimext by Tianmiao Hu
+ *
+ * Do ":help uganda" in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+ /*
+ * If you have any questions or any suggestions concerning gvimext, please
+ * contact Tianmiao Hu:
[email protected].
+ */
+
+ #if !defined(AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_)
+ #define AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_
+
+ #if _MSC_VER > 1000
+ #pragma once
+ #endif // _MSC_VER > 1000
+
+ // Insert your headers here
+ // #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+ //--------------------------------------------------------------
+ // common user interface routines
+ //
+ //
+ //--------------------------------------------------------------
+
+ #ifndef STRICT
+ #define STRICT
+ #endif
+
+ #define INC_OLE2 // WIN32, get ole2 from windows.h
+
+ #include <windows.h>
+ #include <windowsx.h>
+ #include <shlobj.h>
+
+ #define ResultFromShort(i) ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
+
+ // Initialize GUIDs (should be done only and at-least once per DLL/EXE)
+ //
+ #pragma data_seg(".text")
+ #define INITGUID
+ #include <initguid.h>
+ #include <shlguid.h>
+
+ //
+ // The class ID of this Shell extension class.
+ //
+ // class id: {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ //
+ //
+ // NOTE!!! If you use this shell extension as a starting point,
+ // you MUST change the GUID below. Simply run UUIDGEN.EXE
+ // to generate a new GUID.
+ //
+
+ // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ // static const GUID <<name>> =
+ // { 0x51eee242, 0xad87, 0x11d3, { 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99 } };
+ //
+ //
+
+ // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ // IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
+ // 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
+ //
+
+ // {51EEE242-AD87-11d3-9C1E-0090278BBD99} -- this is the registry format
+ DEFINE_GUID(CLSID_ShellExtension, 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
+
+
+ // this class factory object creates context menu handlers for windows 32 shell
+ class CShellExtClassFactory : public IClassFactory
+ {
+ protected:
+ ULONG m_cRef;
+
+ public:
+ CShellExtClassFactory();
+ ~CShellExtClassFactory();
+
+ //IUnknown members
+ STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
+ STDMETHODIMP_(ULONG) AddRef();
+ STDMETHODIMP_(ULONG) Release();
+
+ //IClassFactory members
+ STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
+ STDMETHODIMP LockServer(BOOL);
+
+ };
+ typedef CShellExtClassFactory *LPCSHELLEXTCLASSFACTORY;
+
+ // this is the actual OLE Shell context menu handler
+ class CShellExt : public IContextMenu,
+ IShellExtInit
+ {
+ public:
+
+ protected:
+ ULONG m_cRef;
+ LPDATAOBJECT m_pDataObj;
+
+ STDMETHODIMP InvokeGvim(HWND hParent,
+ LPCSTR pszWorkingDir,
+ LPCSTR pszCmd,
+ LPCSTR pszParam,
+ int iShowCmd);
+
+ STDMETHODIMP InvokeSingleGvim(HWND hParent,
+ LPCSTR pszWorkingDir,
+ LPCSTR pszCmd,
+ LPCSTR pszParam,
+ int iShowCmd);
+
+ public:
+ CShellExt();
+ ~CShellExt();
+
+ //IUnknown members
+ STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
+ STDMETHODIMP_(ULONG) AddRef();
+ STDMETHODIMP_(ULONG) Release();
+
+ //IShell members
+ STDMETHODIMP QueryContextMenu(HMENU hMenu,
+ UINT indexMenu,
+ UINT idCmdFirst,
+ UINT idCmdLast,
+ UINT uFlags);
+
+ STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
+
+ STDMETHODIMP GetCommandString(UINT idCmd,
+ UINT uFlags,
+ UINT FAR *reserved,
+ LPSTR pszName,
+ UINT cchMax);
+
+ //IShellExtInit methods
+ STDMETHODIMP Initialize(LPCITEMIDLIST pIDFolder,
+ LPDATAOBJECT pDataObj,
+ HKEY hKeyID);
+ };
+
+ typedef CShellExt *LPCSHELLEXT;
+ #pragma data_seg()
+
+ #endif
diff -crN ../vim-5.6a.26/GvimExt/gvimext.inf GvimExt/gvimext.inf
*** ../vim-5.6a.26/GvimExt/gvimext.inf Thu Jan 1 01:00:00 1970
--- GvimExt/gvimext.inf Fri Jan 14 16:46:13 2000
***************
*** 0 ****
--- 1,22 ----
+ [Version]
+ Signature="$Windows NT$""
+ Provider="Tianmiao"
+
+ [Manufacture]
+
+ [DefaultInstall]
+ AddReg=ThisDll.Add.Reg
+
+ [DefaultUninstall]
+ DelReg=ThisDLL.Add.Reg
+
+ [ThisDll.Add.Reg]
+ HKCR,CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ HKCR,CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32
+ HKCR,*\shellex\ContextMenuHandlers\gvim
+ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved",{51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ HKLM,Software\Vim\Gvim
+ HKLM,"Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 5.6"
+
+ [Strings]
+ ThisDll="gvimext.dll"
diff -crN ../vim-5.6a.26/GvimExt/gvimext.rc GvimExt/gvimext.rc
*** ../vim-5.6a.26/GvimExt/gvimext.rc Thu Jan 1 01:00:00 1970
--- GvimExt/gvimext.rc Mon Jan 10 20:02:11 2000
***************
*** 0 ****
--- 1,109 ----
+ //Microsoft Developer Studio generated resource script.
+ //
+ #include "resource.h"
+
+ #define APSTUDIO_READONLY_SYMBOLS
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Generated from the TEXTINCLUDE 2 resource.
+ //
+ #include "afxres.h"
+
+ /////////////////////////////////////////////////////////////////////////////
+ #undef APSTUDIO_READONLY_SYMBOLS
+
+ /////////////////////////////////////////////////////////////////////////////
+ // English (U.S.) resources
+
+ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+ #ifdef _WIN32
+ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+ #pragma code_page(1252)
+ #endif //_WIN32
+
+ #ifndef _MAC
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Version
+ //
+
+ VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+ #ifdef _DEBUG
+ FILEFLAGS 0x3L
+ #else
+ FILEFLAGS 0x2L
+ #endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "Comments", "Developed using COM architecture!\0"
+ VALUE "CompanyName", "Tianmiao Hu's Developer Studio\0"
+ VALUE "FileDescription", "A small project for the context menu of gvim!\0"
+ VALUE "FileVersion", "1, 0, 0, 1\0"
+ VALUE "InternalName", "gvim righ-click menu extension\0"
+ VALUE "LegalCopyright", "Copyright � 1999 Tianmiao Hu\0"
+ VALUE "LegalTrademarks", "Tianmiao Hu's Gvim Context Menu Extension\0"
+ VALUE "OriginalFilename", "gvimext.dll\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "Tianmiao Hu's gvimext context menu extension\0"
+ VALUE "ProductVersion", "1, 0, 0, 1\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+ END
+
+ #endif // !_MAC
+
+
+ #ifdef APSTUDIO_INVOKED
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // TEXTINCLUDE
+ //
+
+ 1 TEXTINCLUDE DISCARDABLE
+ BEGIN
+ "resource.h\0"
+ END
+
+ 2 TEXTINCLUDE DISCARDABLE
+ BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+ END
+
+ 3 TEXTINCLUDE DISCARDABLE
+ BEGIN
+ "\r\n"
+ "\0"
+ END
+
+ #endif // APSTUDIO_INVOKED
+
+ #endif // English (U.S.) resources
+ /////////////////////////////////////////////////////////////////////////////
+
+
+
+ #ifndef APSTUDIO_INVOKED
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Generated from the TEXTINCLUDE 3 resource.
+ //
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ #endif // not APSTUDIO_INVOKED
+
diff -crN ../vim-5.6a.26/GvimExt/resource.h GvimExt/resource.h
*** ../vim-5.6a.26/GvimExt/resource.h Thu Jan 1 01:00:00 1970
--- GvimExt/resource.h Mon Jan 10 20:02:29 2000
***************
*** 0 ****
--- 1,15 ----
+ //{{NO_DEPENDENCIES}}
+ // Microsoft Developer Studio generated include file.
+ // Used by gvimext.rc
+ //
+
+ // Next default values for new objects
+ //
+ #ifdef APSTUDIO_INVOKED
+ #ifndef APSTUDIO_READONLY_SYMBOLS
+ #define _APS_NEXT_RESOURCE_VALUE 101
+ #define _APS_NEXT_COMMAND_VALUE 40001
+ #define _APS_NEXT_CONTROL_VALUE 1000
+ #define _APS_NEXT_SYMED_VALUE 101
+ #endif
+ #endif
diff -crN ../vim-5.6a.26/GvimExt/uninst.bat GvimExt/uninst.bat
*** ../vim-5.6a.26/GvimExt/uninst.bat Thu Jan 1 01:00:00 1970
--- GvimExt/uninst.bat Mon Jan 10 20:02:34 2000
***************
*** 0 ****
--- 1 ----
+ rundll32.exe setupapi,InstallHinfSection DefaultUninstall 128 %1
*** ../vim-5.6a.26/runtime/doc/gui_w32.txt Mon Dec 20 09:59:30 1999
--- runtime/doc/gui_w32.txt Fri Jan 14 16:17:32 2000
***************
*** 1,4 ****
! *gui_w32.txt* For Vim version 5.6a. Last change: 1999 Oct 17
VIM REFERENCE MANUAL by Bram Moolenaar
--- 1,4 ----
! *gui_w32.txt* For Vim version 5.6a. Last change: 2000 Jan 01
VIM REFERENCE MANUAL by Bram Moolenaar
***************
*** 77,88 ****
Another method, which also works When you put Vim in another directory (e.g.,
when you have got a new version):
! 1. Put focus on a file you want Vim to use with
2. <Shift-F10>
! 3. <Open With...>
! 4. <Other...>
! 5. Browse to the (new) location of Vim and click <Open>
! 6. <Always Use this program...> checked
7. <OK>
*send-to-menu* *sendto*
--- 77,88 ----
Another method, which also works When you put Vim in another directory (e.g.,
when you have got a new version):
! 1. select a file you want to use Vim with
2. <Shift-F10>
! 3. select "Open With..." menu entry
! 4. click "Other..."
! 5. browse to the (new) location of Vim and click "Open"
! 6. make "Always Use this program..." checked
7. <OK>
*send-to-menu* *sendto*
***************
*** 103,133 ****
A more drastic approach is to install an "Edit with Vim" entry in the popup
menu for the right mouse button. With this you can edit any file with Vim.
*install-registry*
! You can add this in an easy way by using the "install.exe" program. It will
! add two registry entries for you.
- You can also do this by hand:
1. Start the registry editor with "regedit".
! 2. Add two keys:
! key value ~
! HKEY_CLASSES_ROOT\*\shell\Vim Edit with &Vim
! HKEY_CLASSES_ROOT\*\shell\Vim\command {path}\gvim.exe "%L"
!
! Replace {path} with the path that leads to gvim.exe.
! Don't forget the double quotes around %L, file names with a space won't
! work.
!
! NOTE: Problems have been reported with using this in combination with the
! MS-Office taskbar. This appears to be a problem in MS-Office. Don't
! use this if you want to use the MS-Office taskbar.
To remove "Edit with Vim" from the popup menu, just remove the registry
! entries mentioned above.
! If you notice that this entry overrules other file type associatons, set those
! associations again by hand (using Windows Explorer, see above). This only
! seems to happen on some Windows NT versions (Windows bug?). Procedure:
1. Find the name of the file type. This can be done by starting the registry
editor, and searching for the extension in \\HKEY_CLASSES_ROOT
2. In a Windows Explorer, use View/Options/File Types. Search for the file
--- 103,159 ----
A more drastic approach is to install an "Edit with Vim" entry in the popup
menu for the right mouse button. With this you can edit any file with Vim.
+ This can co-exist with the file associations mentioned above. The difference
+ is that the file associations will make starting Vim the default action. With
+ the "Edit with Vim" menu entry you can keep the existing file association for
+ double clicking on the file, and edit the file with Vim when you want. For
+ example, you can associate "*.mak" with your make program. You can execute
+ the makefile by double clicking it and use the "Edit with Vim" entry to edit
+ the makefile.
+
+ You can select any files and right-click to see a menu option called "Edit
+ with gvim". Chosing this menu option will invoke gvim with the file you have
+ selected. If you select multiple files, you will find two gvim-related menu
+ options:
+ "Edit with multiple gvims" -- one gvim for each file in the selection
+ "Edit with single gvim" -- one gvim for all the files in the selection
+
*install-registry*
! You can add the "Edit with Vim" menu entry in an easy way by using the
! "install.exe" program. It will add several registry entries for you.
!
! You can also do this by hand. This is complicated! Use the install.exe if
! you can.
1. Start the registry editor with "regedit".
! 2. Add these keys:
! key value name value ~
! HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}
! {default} Vim Shell Extension
! HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32
! {default} {path}\gvimext.dll
! ThreadingModel Apartment
! HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim
! {default} {51EEE242-AD87-11d3-9C1E-0090278BBD99}
! HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved
! {51EEE242-AD87-11d3-9C1E-0090278BBD99}
! Vim Shell Extension
! HKEY_LOCAL_MACHINE\Software\Vim\Gvim
! path {path}\gvim.exe
! HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\vim 5.6
! DisplayName Vim 5.6: Edit with Vim popup menu entry
! UninstallString {path}\uninstal.exe
!
! Replace {path} with the path that leads to the executable.
! Don't type {default}, this is the value for the key itself.
To remove "Edit with Vim" from the popup menu, just remove the registry
! entries mentioned above. The "uninstal.exe" program can do this for you. You
! can also use the entry in the Windows standard "Add/Remove Programs" list.
! If you notice that this entry overrules other file type associations, set
! those associations again by hand (using Windows Explorer, see above). This
! only seems to happen on some Windows NT versions (Windows bug?). Procedure:
1. Find the name of the file type. This can be done by starting the registry
editor, and searching for the extension in \\HKEY_CLASSES_ROOT
2. In a Windows Explorer, use View/Options/File Types. Search for the file
*** ../vim-5.6a.26/src/version.c Fri Jan 14 22:30:09 2000
--- src/version.c Fri Jan 14 22:37:01 2000
***************
*** 420,421 ****
--- 420,423 ----
{ /* Add new patch number below this line */
+ /**/
+ 27,
/**/
--
hundred-and-one symptoms of being an internet addict:
174. You know what a listserv is.
--/-/---- Bram Moolenaar ----
[email protected] ----
[email protected] ---\-\--
\ \ www.vim.org/iccf www.moolenaar.net www.vim.org / /