home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 6.2.524 (extra)
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=ISO-8859-1
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 6.2.524 (extra, after 6.2.520)
- Problem: Win32: (un)installing gvimext.dll may fail if it was used.
- The desktop and start menu links are created for the current user
- instead of all users.
- Using the home directory as working directory for the links is a
- bad idea for multi-user systems.
- Cannot use Vim from the "Open With..." menu.
- Solution: Force a reboot if necessary. (Alejandro Lopez-Valencia) Also use
- macros for the directory of the source and runtime files. Use
- "CSIDL_COMMON_*" instead of "CSIDL_*" when possible.
- Do not specify a working directory in the links.
- Add Vim to the "Open With..." menu. (Giuseppe Bilotta)
- Files: nsis/gvim.nsi, src/dosinst.c, src/dosinst.h, src/uninstal.c
-
-
- *** ../vim-6.2.523/nsis/gvim.nsi Sun May 2 16:57:24 2004
- --- nsis/gvim.nsi Tue May 4 15:49:21 2004
- ***************
- *** 3,11 ****
- # Last change: 2004 May 02
-
- # WARNING: if you make changes to this script, look out for $0 to be valid,
- ! # because this line is very dangerous: RMDir /r $0
-
- ! # comment next line if you don't have UPX.
- # Get it at http://upx.sourceforge.net
- !define HAVE_UPX
-
- --- 3,20 ----
- # Last change: 2004 May 02
-
- # WARNING: if you make changes to this script, look out for $0 to be valid,
- ! # because uninstall deletes most files in $0.
-
- ! # Location of gvim_ole.exe, vimd32.exe, GvimExt/*, etc.
- ! !define VIMSRC "..\src"
- !
- ! # Location of runtime files
- ! !define VIMRT ".."
- !
- ! # Location of extra tools: diff.exe
- ! !define VIMTOOLS ..\..
- !
- ! # Comment the next line if you don't have UPX.
- # Get it at http://upx.sourceforge.net
- !define HAVE_UPX
-
- ***************
- *** 15,20 ****
- --- 24,33 ----
- !define VER_MINOR 2
- !define VER_MAJOR 6
-
- + # ----------- No configurable settings below this line -----------
- +
- + !include UpgradeDLL.nsh # for VisVim.dll
- +
- Name "Vim ${VER_MAJOR}.${VER_MINOR}"
- OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
- CRCCheck force
- ***************
- *** 31,44 ****
- UninstallIcon icons\vim_uninst_16c.ico
- BGGradient 004000 008200 FFFFFF
- LicenseText "You should read the following before installing:"
- ! LicenseData ..\doc\uganda.nsis.txt
-
- !ifdef HAVE_UPX
- !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
- !endif
-
- # This adds '\vim' to the user choice automagically.
- ! InstallDir $PROGRAMFILES\Vim
-
- # Types of installs we can perform:
- InstType Typical
- --- 44,57 ----
- UninstallIcon icons\vim_uninst_16c.ico
- BGGradient 004000 008200 FFFFFF
- LicenseText "You should read the following before installing:"
- ! LicenseData ${VIMRT}\doc\uganda.nsis.txt
-
- !ifdef HAVE_UPX
- !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
- !endif
-
- # This adds '\vim' to the user choice automagically.
- ! InstallDir "$PROGRAMFILES\Vim"
-
- # Types of installs we can perform:
- InstType Typical
- ***************
- *** 59,65 ****
-
- # run the install program to check for already installed versions
- SetOutPath $TEMP
- ! File /oname=install.exe ..\src\installw32.exe
- ExecWait "$TEMP\install.exe -uninstall-check"
- Delete $TEMP\install.exe
-
- --- 72,78 ----
-
- # run the install program to check for already installed versions
- SetOutPath $TEMP
- ! File /oname=install.exe ${VIMSRC}\installw32.exe
- ExecWait "$TEMP\install.exe -uninstall-check"
- Delete $TEMP\install.exe
-
- ***************
- *** 153,200 ****
- StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
-
- SetOutPath $0
- ! File /oname=gvim.exe ..\src\gvim_ole.exe
- ! File /oname=install.exe ..\src\installw32.exe
- ! File /oname=uninstal.exe ..\src\uninstalw32.exe
- ! File ..\src\vimrun.exe
- ! File /oname=xxd.exe ..\src\xxdw32.exe
- ! File ..\..\diff.exe
- ! File ..\vimtutor.bat
- ! File ..\README.txt
- File ..\uninstal.txt
- ! File ..\*.vim
- ! File ..\rgb.txt
-
- SetOutPath $0\colors
- ! File ..\colors\*.*
-
- SetOutPath $0\compiler
- ! File ..\compiler\*.*
-
- SetOutPath $0\doc
- ! File ..\doc\*.txt
- ! File ..\doc\tags
-
- SetOutPath $0\ftplugin
- ! File ..\ftplugin\*.*
-
- SetOutPath $0\indent
- ! File ..\indent\*.*
-
- SetOutPath $0\macros
- ! File ..\macros\*.*
-
- SetOutPath $0\plugin
- ! File ..\plugin\*.*
-
- SetOutPath $0\syntax
- ! File ..\syntax\*.*
-
- SetOutPath $0\tools
- ! File ..\tools\*.*
-
- SetOutPath $0\tutor
- ! File ..\tutor\*.*
- SectionEnd
-
- ##########################################################
- --- 166,213 ----
- StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
-
- SetOutPath $0
- ! File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
- ! File /oname=install.exe ${VIMSRC}\installw32.exe
- ! File /oname=uninstal.exe ${VIMSRC}\uninstalw32.exe
- ! File ${VIMSRC}\vimrun.exe
- ! File /oname=xxd.exe ${VIMSRC}\xxdw32.exe
- ! File ${VIMTOOLS}\diff.exe
- ! File ${VIMRT}\vimtutor.bat
- ! File ${VIMRT}\README.txt
- File ..\uninstal.txt
- ! File ${VIMRT}\*.vim
- ! File ${VIMRT}\rgb.txt
-
- SetOutPath $0\colors
- ! File ${VIMRT}\colors\*.*
-
- SetOutPath $0\compiler
- ! File ${VIMRT}\compiler\*.*
-
- SetOutPath $0\doc
- ! File ${VIMRT}\doc\*.txt
- ! File ${VIMRT}\doc\tags
-
- SetOutPath $0\ftplugin
- ! File ${VIMRT}\ftplugin\*.*
-
- SetOutPath $0\indent
- ! File ${VIMRT}\indent\*.*
-
- SetOutPath $0\macros
- ! File ${VIMRT}\macros\*.*
-
- SetOutPath $0\plugin
- ! File ${VIMRT}\plugin\*.*
-
- SetOutPath $0\syntax
- ! File ${VIMRT}\syntax\*.*
-
- SetOutPath $0\tools
- ! File ${VIMRT}\tools\*.*
-
- SetOutPath $0\tutor
- ! File ${VIMRT}\tutor\*.*
- SectionEnd
-
- ##########################################################
- ***************
- *** 206,221 ****
- "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
- IfErrors 0 lbl_winnt
- # Windows 95/98/ME
- ! File /oname=vim.exe ..\src\vimd32.exe
- Goto lbl_done
- lbl_winnt:
- # Windows NT/2000/XT
- ! File /oname=vim.exe ..\src\vimw32.exe
- lbl_done:
- StrCpy $2 "$2 vim view vimdiff"
- SectionEnd
-
- ##########################################################
- Section "Create icons on the Desktop"
- SectionIn 1 3
-
- --- 219,241 ----
- "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
- IfErrors 0 lbl_winnt
- # Windows 95/98/ME
- ! File /oname=vim.exe ${VIMSRC}\vimd32.exe
- Goto lbl_done
- lbl_winnt:
- # Windows NT/2000/XT
- ! File /oname=vim.exe ${VIMSRC}\vimw32.exe
- lbl_done:
- StrCpy $2 "$2 vim view vimdiff"
- SectionEnd
-
- ##########################################################
- + Section "Create .bat files for command line use"
- + SectionIn 3
- +
- + StrCpy $1 "$1 -create-batfiles $2"
- + SectionEnd
- +
- + ##########################################################
- Section "Create icons on the Desktop"
- SectionIn 1 3
-
- ***************
- *** 233,241 ****
- Section "Add an Edit-with-Vim context menu entry"
- SectionIn 1 3
-
- SetOutPath $0
- ! File ..\src\GvimExt\gvimext.dll
- ! StrCpy $1 "$1 -install-popup"
- SectionEnd
-
- ##########################################################
- --- 253,284 ----
- Section "Add an Edit-with-Vim context menu entry"
- SectionIn 1 3
-
- + # Be aware of this sequence of events:
- + # - user uninstalls Vim, gvimext.dll can't be removed (it's in use) and
- + # is scheduled to be removed at next reboot.
- + # - user installs Vim in same directory, gvimext.dll still exists.
- + # If we now skip installing gvimext.dll, it will disappear at the next
- + # reboot. Thus when copying gvimext.dll fails always schedule it to be
- + # installed at the next reboot. Can't use UpgradeDLL!
- + # We don't ask the user to reboot, the old dll will keep on working.
- SetOutPath $0
- ! ClearErrors
- ! SetOverwrite try
- ! File /oname=gvimext.dll ${VIMSRC}\GvimExt\gvimext.dll
- ! IfErrors 0 GvimExtDone
- !
- ! # Can't copy gvimext.dll, create it under another name and rename it on
- ! # next reboot.
- ! GetTempFileName $3 $0
- ! File /oname=$3 ${VIMSRC}\GvimExt\gvimext.dll
- ! Rename /REBOOTOK $3 $0\gvimext.dll
- !
- ! GvimExtDone:
- ! SetOverwrite lastused
- !
- ! # We don't have a separate entry for the "Open With..." menu, assume
- ! # the user wants either both or none.
- ! StrCpy $1 "$1 -install-popup -install-openwith"
- SectionEnd
-
- ##########################################################
- ***************
- *** 246,258 ****
- SectionEnd
-
- ##########################################################
- - Section "Create .bat files for command line use"
- - SectionIn 3
- -
- - StrCpy $1 "$1 -create-batfiles $2"
- - SectionEnd
- -
- - ##########################################################
- Section "Create plugin directories in HOME or VIM"
- SectionIn 1 3
-
- --- 289,294 ----
- ***************
- *** 271,279 ****
- SectionIn 3
-
- SetOutPath $0
- ! File ..\src\VisVim\VisVim.dll
- ! File ..\src\VisVim\README_VisVim.txt
- ! ExecWait "regsvr32.exe /s $0\VisVim.dll"
- SectionEnd
-
- ##########################################################
- --- 307,314 ----
- SectionIn 3
-
- SetOutPath $0
- ! !insertmacro UpgradeDLL "${VIMSRC}\VisVim\VisVim.dll" "$0\VisVim.dll" "$0"
- ! File ${VIMSRC}\VisVim\README_VisVim.txt
- SectionEnd
-
- ##########################################################
- ***************
- *** 282,293 ****
- SectionIn 1 3
-
- SetOutPath $0\lang
- ! File /r ..\lang\*.*
- SetOutPath $0\keymap
- ! File ..\keymap\README.txt
- ! File ..\keymap\*.vim
- SetOutPath $0
- ! File ..\libintl.dll
- SectionEnd
- !endif
-
- --- 317,328 ----
- SectionIn 1 3
-
- SetOutPath $0\lang
- ! File /r ${VIMRT}\lang\*.*
- SetOutPath $0\keymap
- ! File ${VIMRT}\keymap\README.txt
- ! File ${VIMRT}\keymap\*.vim
- SetOutPath $0
- ! File ${VIMRT}\libintl.dll
- SectionEnd
- !endif
-
- ***************
- *** 308,314 ****
- # created. Thus the "vim61" directory is included in it.
- StrCpy $0 "$INSTDIR"
-
- ! # If VisVim was installed, unregister the DLL
- IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
- Has_VisVim:
- ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
- --- 343,349 ----
- # created. Thus the "vim61" directory is included in it.
- StrCpy $0 "$INSTDIR"
-
- ! # If VisVim was installed, unregister the DLL.
- IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
- Has_VisVim:
- ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
- ***************
- *** 326,340 ****
- "Would you like to delete $0?$\n \
- $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
-
- ! Delete /REBOOTOK $0\gvimext.dll
- ClearErrors
- ! RMDir /r $0
-
- IfErrors ErrorMess NoErrorMess
- ErrorMess:
- MessageBox MB_OK|MB_ICONEXCLAMATION \
- "Some files in $0 have not been deleted!$\nYou must do it manually."
- NoErrorMess:
-
- NoRemoveExes:
- # get the parent dir of the installation
- --- 361,397 ----
- "Would you like to delete $0?$\n \
- $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
-
- ! Delete /REBOOTOK $0\*.dll
- ClearErrors
- ! # Remove everything but *.dll files. Avoids that
- ! # a lot remains when gvimext.dll cannot be deleted.
- ! RMDir /r $0\colors
- ! RMDir /r $0\compiler
- ! RMDir /r $0\doc
- ! RMDir /r $0\ftplugin
- ! RMDir /r $0\indent
- ! RMDir /r $0\macros
- ! RMDir /r $0\plugin
- ! RMDir /r $0\syntax
- ! RMDir /r $0\tools
- ! RMDir /r $0\tutor
- ! RMDir /r $0\VisVim
- ! RMDir /r $0\lang
- ! RMDir /r $0\keymap
- ! Delete $0\*.exe
- ! Delete $0\*.bat
- ! Delete $0\*.vim
- ! Delete $0\*.txt
-
- IfErrors ErrorMess NoErrorMess
- ErrorMess:
- MessageBox MB_OK|MB_ICONEXCLAMATION \
- "Some files in $0 have not been deleted!$\nYou must do it manually."
- NoErrorMess:
- +
- + # No error message if the "vim62" directory can't be removed, the
- + # gvimext.dll may still be there.
- + RMDir $0
-
- NoRemoveExes:
- # get the parent dir of the installation
- *** ../vim-6.2.523/src/dosinst.c Sun Apr 25 16:29:55 2004
- --- src/dosinst.c Mon May 3 22:24:47 2004
- ***************
- *** 32,38 ****
- --- 32,40 ----
- directory to write .bat files in */
- char *default_vim_dir = NULL; /* when not NULL, use this as the default
- install dir for NSIS */
- + #if 0
- char homedir[BUFSIZE]; /* home directory or "" */
- + #endif
-
- /*
- * Structure used for each choice the user can make.
- ***************
- *** 113,118 ****
- --- 115,123 ----
- /* non-zero when selected to install the popup menu entry. */
- static int install_popup = 0;
-
- + /* non-zero when selected to install the "Open with" entry. */
- + static int install_openwith = 0;
- +
- /* non-zero when need to add an uninstall entry in the registry */
- static int need_uninstall_entry = 0;
-
- ***************
- *** 679,684 ****
- --- 684,690 ----
- else
- *oldvimrc = NUL;
-
- + #if 0 /* currently not used */
- /*
- * Get default home directory.
- * Prefer $HOME if it's set. For Win NT use $HOMEDRIVE and $HOMEPATH.
- ***************
- *** 709,714 ****
- --- 715,721 ----
- *homedir = NUL;
- }
- }
- + #endif
- }
-
- /*
- ***************
- *** 1311,1316 ****
- --- 1318,1324 ----
- /*
- * Add some entries to the registry:
- * - to add "Edit with Vim" to the context * menu
- + * - to add Vim to the "Open with..." list
- * - to uninstall Vim
- */
- /*ARGSUSED*/
- ***************
- *** 1367,1372 ****
- --- 1375,1396 ----
- fprintf(fd, "\n");
- }
-
- + if (install_openwith)
- + {
- + char bufg[BUFSIZE];
- + struct stat st;
- +
- + printf("Creating \"Open with ...\" list entry\n");
- +
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe]\n\n");
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell]\n\n");
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell\\edit]\n\n");
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell\\edit\\command]\n");
- + fprintf(fd, "@=\"%sgvim.exe \\\"%%1\\\"\"\n\n", buf);
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\.htm\\OpenWithList\\gvim.exe]\n\n");
- + fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\OpenWithList\\gvim.exe]\n\n");
- + }
- +
- printf("Creating an uninstall entry\n");
-
- /* The registry entries for uninstalling the menu */
- ***************
- *** 1435,1440 ****
- --- 1459,1502 ----
- add_dummy_choice();
- }
-
- + static void
- + change_openwith_choice(int idx)
- + {
- + if (install_openwith == 0)
- + {
- + choices[idx].text = "Add Vim to the \"Open With...\" list in the popup menu for the right\n mouse button so that you can edit any file with Vim";
- + install_openwith = 1;
- + }
- + else
- + {
- + choices[idx].text = "Do NOT add Vim to the \"Open With...\" list in the popup menu for the\n right mouse button to edit any file with Vim";
- + install_openwith = 0;
- + }
- + }
- +
- + /*
- + * Only add the choice for the open-with menu entry when gvim.exe was found
- + * and and regedit.exe exist.
- + */
- + static void
- + init_openwith_choice(void)
- + {
- + if (has_gvim
- + #ifndef WIN3264
- + && searchpath("regedit.exe") != NULL
- + #endif
- + )
- + {
- + choices[choice_count].changefunc = change_openwith_choice;
- + choices[choice_count].installfunc = NULL;
- + choices[choice_count].active = 1;
- + change_openwith_choice(choice_count); /* set the text */
- + ++choice_count;
- + }
- + else
- + add_dummy_choice();
- + }
- +
- #ifdef WIN3264
- /* create_shortcut
- *
- ***************
- *** 1577,1582 ****
- --- 1639,1650 ----
- }
-
- /*
- + * We used to use "homedir" as the working directory, but that is a bad choice
- + * on multi-user systems. Not specifying a directory appears to work best.
- + */
- + #define WORKDIR ""
- +
- + /*
- * Create shortcut(s) in the Start Menu\Programs\Vim folder.
- */
- static void
- ***************
- *** 1587,1614 ****
- if (has_vim)
- {
- if (build_shortcut("Vim", "vim.exe", "",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- if (build_shortcut("Vim Read-only", "vim.exe", "-R",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- if (build_shortcut("Vim Diff", "vim.exe", "-d",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- }
- if (has_gvim)
- {
- if (build_shortcut("gVim", "gvim.exe", "",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- if (build_shortcut("gVim Easy", "gvim.exe", "-y",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- if (build_shortcut("gVim Read-only", "gvim.exe", "-R",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- if (build_shortcut("gVim Diff", "gvim.exe", "-d",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- }
- if (build_shortcut("Uninstall",
- --- 1655,1682 ----
- if (has_vim)
- {
- if (build_shortcut("Vim", "vim.exe", "",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- if (build_shortcut("Vim Read-only", "vim.exe", "-R",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- if (build_shortcut("Vim Diff", "vim.exe", "-d",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- }
- if (has_gvim)
- {
- if (build_shortcut("gVim", "gvim.exe", "",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- if (build_shortcut("gVim Easy", "gvim.exe", "-y",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- if (build_shortcut("gVim Read-only", "gvim.exe", "-R",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- if (build_shortcut("gVim Diff", "gvim.exe", "-d",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- }
- if (build_shortcut("Uninstall",
- ***************
- *** 1621,1627 ****
- VIM_STARTMENU, installdir) == FAIL)
- return;
- if (build_shortcut("Help", has_gvim ? "gvim.exe" : "vim.exe", "-c h",
- ! VIM_STARTMENU, homedir) == FAIL)
- return;
- {
- char shell_folder_path[BUFSIZE];
- --- 1689,1695 ----
- VIM_STARTMENU, installdir) == FAIL)
- return;
- if (build_shortcut("Help", has_gvim ? "gvim.exe" : "vim.exe", "-c h",
- ! VIM_STARTMENU, WORKDIR) == FAIL)
- return;
- {
- char shell_folder_path[BUFSIZE];
- ***************
- *** 1674,1680 ****
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[0], "gvim.exe",
- ! "", "desktop", homedir);
- need_uninstall_entry = 1;
- }
- }
- --- 1742,1748 ----
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[0], "gvim.exe",
- ! "", "desktop", WORKDIR);
- need_uninstall_entry = 1;
- }
- }
- ***************
- *** 1685,1691 ****
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[1], "gvim.exe",
- ! "-y", "desktop", homedir);
- need_uninstall_entry = 1;
- }
- }
- --- 1753,1759 ----
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[1], "gvim.exe",
- ! "-y", "desktop", WORKDIR);
- need_uninstall_entry = 1;
- }
- }
- ***************
- *** 1696,1702 ****
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[2], "gvim.exe",
- ! "-R", "desktop", homedir);
- need_uninstall_entry = 1;
- }
- }
- --- 1764,1770 ----
- if (choices[idx].arg)
- {
- (void)build_shortcut(icon_names[2], "gvim.exe",
- ! "-R", "desktop", WORKDIR);
- need_uninstall_entry = 1;
- }
- }
- ***************
- *** 1974,1979 ****
- --- 2042,2050 ----
- /* Whether to add Vim to the popup menu */
- init_popup_choice();
-
- + /* Whether to add Vim to the "Open With..." menu */
- + init_openwith_choice();
- +
- /* Whether to add Vim to the Start Menu. */
- init_startmenu_choice();
-
- ***************
- *** 1995,2000 ****
- --- 2066,2073 ----
- printf(" Create a default _vimrc file if one does not already exist.\n");
- printf("-install-popup\n");
- printf(" Install the Edit-with-Vim context menu entry\n");
- + printf("-install-openwith\n");
- + printf(" Add Vim to the \"Open With...\" context menu list\n");
- #ifdef WIN3264
- printf("-add-start-menu");
- printf(" Add Vim to the start menu\n");
- ***************
- *** 2054,2059 ****
- --- 2127,2136 ----
- {
- init_popup_choice();
- }
- + else if (strcmp(argv[i], "-install-openwith") == 0)
- + {
- + init_openwith_choice();
- + }
- else if (strcmp(argv[i], "-add-start-menu") == 0)
- {
- init_startmenu_choice();
- ***************
- *** 2178,2184 ****
- "select each file type.\n"
- "An alternative is the option offered here: Install an \"Edit with Vim\"\n"
- "entry in the popup menu for the right mouse button. This means you can\n"
- ! "edit any file with Vim\n"
- ,
- "Add Vim to the Start menu\n"
- "-------------------------\n"
- --- 2255,2268 ----
- "select each file type.\n"
- "An alternative is the option offered here: Install an \"Edit with Vim\"\n"
- "entry in the popup menu for the right mouse button. This means you can\n"
- ! "edit any file with Vim.\n"
- ! ,
- ! "\"Open With...\" context menu entry\n"
- ! "--------------------------------\n"
- ! "(this choice is only available when gvim.exe is present)\n"
- ! "This option adds Vim to the \"Open With...\" entry in the popup menu for\n"
- ! "the right mouse button. This also makes it possible to edit HTML files\n"
- ! "directly from Internet Explorer.\n"
- ,
- "Add Vim to the Start menu\n"
- "-------------------------\n"
- ***************
- *** 2237,2243 ****
- (choices[i].installfunc)(i);
-
- /* Add some entries to the registry, if needed. */
- ! if (install_popup || (need_uninstall_entry && interactive) || !interactive)
- install_registry();
-
- #ifdef WIN3264
- --- 2321,2330 ----
- (choices[i].installfunc)(i);
-
- /* Add some entries to the registry, if needed. */
- ! if (install_popup
- ! || install_openwith
- ! || (need_uninstall_entry && interactive)
- ! || !interactive)
- install_registry();
-
- #ifdef WIN3264
- *** ../vim-6.2.523/src/dosinst.h Tue May 27 22:00:56 2003
- --- src/dosinst.h Mon May 3 22:56:17 2004
- ***************
- *** 213,228 ****
- /*
- * The following code was successfully built with make_mvc.mak.
- * The resulting executable worked on Windows 95, Millennium Edition, and
- ! * 2000 Professional.
- */
- ! LPITEMIDLIST pidl = 0; /* Pointer to an Item ID list allocated below */
- ! LPMALLOC pMalloc; /* Pointer to an IMalloc interface */
- ! int csidl;
-
- if (strcmp(shell_folder_name, "desktop") == 0)
- ! csidl = CSIDL_DESKTOP;
- else if (strncmp(shell_folder_name, "Programs", 8) == 0)
- ! csidl = CSIDL_PROGRAMS;
- else
- {
- printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
- --- 213,241 ----
- /*
- * The following code was successfully built with make_mvc.mak.
- * The resulting executable worked on Windows 95, Millennium Edition, and
- ! * 2000 Professional. But it was changed after testing...
- */
- ! LPITEMIDLIST pidl = 0; /* Pointer to an Item ID list allocated below */
- ! LPMALLOC pMalloc; /* Pointer to an IMalloc interface */
- ! int csidl;
- ! int alt_csidl = -1;
- ! static int desktop_csidl = -1;
- ! static int programs_csidl = -1;
- ! int *pcsidl;
- ! int r;
-
- if (strcmp(shell_folder_name, "desktop") == 0)
- ! {
- ! pcsidl = &desktop_csidl;
- ! csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
- ! alt_csidl = CSIDL_DESKTOP;
- ! }
- else if (strncmp(shell_folder_name, "Programs", 8) == 0)
- ! {
- ! pcsidl = &programs_csidl;
- ! csidl = CSIDL_COMMON_PROGRAMS;
- ! alt_csidl = CSIDL_PROGRAMS;
- ! }
- else
- {
- printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
- ***************
- *** 230,235 ****
- --- 243,256 ----
- return FAIL;
- }
-
- + /* Did this stuff before, use the same ID again. */
- + if (*pcsidl >= 0)
- + {
- + csidl = *pcsidl;
- + alt_csidl = -1;
- + }
- +
- + retry:
- /* Initialize pointer to IMalloc interface */
- if (NOERROR != SHGetMalloc(&pMalloc))
- {
- ***************
- *** 241,265 ****
- /* Get an ITEMIDLIST corresponding to the folder code */
- if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
- {
- ! printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
- shell_folder_name);
- ! return FAIL;
- }
-
- /* Translate that ITEMIDLIST to a string */
- ! if (!SHGetPathFromIDList(pidl, shell_folder_path))
- {
- printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
- shell_folder_name);
- - pMalloc->lpVtbl->Free(pMalloc, pidl);
- - pMalloc->lpVtbl->Release(pMalloc);
- return FAIL;
- }
-
- ! /* Free the data associated with pidl */
- ! pMalloc->lpVtbl->Free(pMalloc, pidl);
- ! /* Release the IMalloc interface */
- ! pMalloc->lpVtbl->Release(pMalloc);
-
- if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
- strcat(shell_folder_path, shell_folder_name + 8);
- --- 262,328 ----
- /* Get an ITEMIDLIST corresponding to the folder code */
- if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
- {
- ! if (alt_csidl < 0 || NOERROR != SHGetSpecialFolderLocation(0,
- ! alt_csidl, &pidl))
- ! {
- ! printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
- shell_folder_name);
- ! return FAIL;
- ! }
- ! csidl = alt_csidl;
- ! alt_csidl = -1;
- }
-
- /* Translate that ITEMIDLIST to a string */
- ! r = SHGetPathFromIDList(pidl, shell_folder_path);
- !
- ! /* Free the data associated with pidl */
- ! pMalloc->lpVtbl->Free(pMalloc, pidl);
- ! /* Release the IMalloc interface */
- ! pMalloc->lpVtbl->Release(pMalloc);
- !
- ! if (!r)
- {
- + if (alt_csidl >= 0)
- + {
- + /* We probably get here for Windows 95: the "all users"
- + * desktop/start menu entry doesn't exist. */
- + csidl = alt_csidl;
- + alt_csidl = -1;
- + goto retry;
- + }
- printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
- shell_folder_name);
- return FAIL;
- }
-
- ! /* If there is an alternative: verify we can write in this directory.
- ! * This should cause a retry when the "all users" directory exists but we
- ! * are a normal user and can't write there. */
- ! if (alt_csidl >= 0)
- ! {
- ! char tbuf[BUFSIZE];
- ! FILE *fd;
- !
- ! strcpy(tbuf, shell_folder_path);
- ! strcat(tbuf, "\\vim write test");
- ! fd = fopen(tbuf, "w");
- ! if (fd == NULL)
- ! {
- ! csidl = alt_csidl;
- ! alt_csidl = -1;
- ! goto retry;
- ! }
- ! fclose(fd);
- ! unlink(tbuf);
- ! }
- !
- ! /*
- ! * Keep the found csidl for next time, so that we don't have to do the
- ! * write test every time.
- ! */
- ! if (*pcsidl < 0)
- ! *pcsidl = csidl;
-
- if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
- strcat(shell_folder_path, shell_folder_name + 8);
- *** ../vim-6.2.523/src/uninstal.c Tue May 13 20:39:50 2003
- --- src/uninstal.c Mon May 3 22:28:05 2004
- ***************
- *** 11,16 ****
- --- 11,17 ----
- * uninstal.c: Minimalistic uninstall program for Vim on MS-Windows
- * Removes:
- * - the "Edit with Vim" popup menu entry
- + * - the Vim "Open With..." popup menu entry
- * - any Vim Batch files in the path
- * - icons for Vim on the Desktop
- * - the Vim entry in the Start Menu
- ***************
- *** 57,62 ****
- --- 58,88 ----
- return (r == ERROR_SUCCESS);
- }
-
- + /*
- + * Check if the "Open With..." menu entry exists and what gvim it refers to.
- + * Returns non-zero when it's found.
- + */
- + static int
- + openwith_gvim_path(char *buf)
- + {
- + HKEY key_handle;
- + DWORD value_type;
- + DWORD bufsize = BUFSIZE;
- + int r;
- +
- + /* Open the key where the path to gvim.exe is stored. */
- + if (RegOpenKeyEx(HKEY_CLASSES_ROOT,
- + "Applications\\gvim.exe\\shell\\edit\\command", 0, KEY_READ,
- + &key_handle) != ERROR_SUCCESS)
- + return 0;
- +
- + /* get the DisplayName out of it to show the user */
- + r = RegQueryValueEx(key_handle, "", 0, &value_type, (LPBYTE)buf, &bufsize);
- + RegCloseKey(key_handle);
- +
- + return (r == ERROR_SUCCESS);
- + }
- +
- static void
- remove_popup(void)
- {
- ***************
- *** 83,93 ****
- ++fail;
-
- if (fail == 6)
- ! printf("No Vim registry entries could be removed\n");
- else if (fail)
- ! printf("Some Vim registry entries could not be removed\n");
- else
- ! printf("The Vim registry entries have been removed\n");
- }
- #endif
-
- --- 109,146 ----
- ++fail;
-
- if (fail == 6)
- ! printf("No Vim popup registry entries could be removed\n");
- ! else if (fail)
- ! printf("Some Vim popup registry entries could not be removed\n");
- ! else
- ! printf("The Vim popup registry entries have been removed\n");
- ! }
- !
- ! static void
- ! remove_openwith(void)
- ! {
- ! int fail = 0;
- ! HKEY kh;
- !
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command") != ERROR_SUCCESS)
- ! ++fail;
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit") != ERROR_SUCCESS)
- ! ++fail;
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell") != ERROR_SUCCESS)
- ! ++fail;
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe") != ERROR_SUCCESS)
- ! ++fail;
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
- ! ++fail;
- ! if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
- ! ++fail;
- !
- ! if (fail == 6)
- ! printf("No Vim open-with registry entries could be removed\n");
- else if (fail)
- ! printf("Some Vim open-with registry entries could not be removed\n");
- else
- ! printf("The Vim open-with registry entries have been removed\n");
- }
- #endif
-
- ***************
- *** 302,308 ****
- --- 355,374 ----
- printf(" which uses \"%s\"\n", popup_path);
- printf("\nRemove it (y/n)? ");
- if (confirm())
- + {
- remove_popup();
- + /* Assume the "Open With" entry can be removed as well, don't
- + * bother the user with asking him again. */
- + remove_openwith();
- + }
- + }
- + else if (openwith_gvim_path(popup_path))
- + {
- + printf(" - the Vim \"Open With...\" entry in the popup menu\n");
- + printf(" which uses \"%s\"\n", popup_path);
- + printf("\nRemove it (y/n)? ");
- + if (confirm())
- + remove_openwith();
- }
-
- if (get_shell_folder_path(path, "desktop"))
- *** ../vim-6.2.523/src/version.c Mon May 3 21:30:07 2004
- --- src/version.c Tue May 4 15:42:08 2004
- ***************
- *** 639,640 ****
- --- 642,645 ----
- { /* Add new patch number below this line */
- + /**/
- + 524,
- /**/
-
- --
- hundred-and-one symptoms of being an internet addict:
- 99. The hum of a cooling fan and the click of keys is comforting to you.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
- /// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
- \\\ Project leader for A-A-P -- http://www.A-A-P.org ///
- \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
-