]> granicus.if.org Git - vim/commitdiff
Adjust MS-Windows installer so that it also works for 64 bit systems. (George
authorBram Moolenaar <Bram@vim.org>
Wed, 7 Jul 2010 11:19:55 +0000 (13:19 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 7 Jul 2010 11:19:55 +0000 (13:19 +0200)
Reilly)

Makefile
runtime/doc/todo.txt
runtime/doc/version7.txt
src/dosinst.c

index bd3912cc4b8cade291e733d99bc772e2c7549471..68a20f2cb02a3171da4559b794aea067ac6f840c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -131,7 +131,7 @@ DOSBIN_S =  dosbin_s
 # - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
 #   "uninstald32.exe".
 # Win32 console version:
-# - Set environment for Visual C++ 2010:
+# - Set environment for Visual C++ 2010, e.g.:
 #   "E:\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat".  Or, for Visual
 #   C++ 2008 Express Edition: "msvc2008.bat".  Or, when using the Visual C++
 #   Toolkit 2003: "msvcsetup.bat" (adjust the paths when necessary).  For
index ea70246f73acd6247a50ccf514901cbd8ce75cb4..536810b38e6bd91b1a19ff1cee59e129d610fe3d 100644 (file)
@@ -1099,7 +1099,7 @@ Vim 7.3:
    Patch from Geoffrey Reilly, 2010 Jun 22
 - in August remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
 - Conceal feature: no update when moving to another window. (Dominique Pelle,
-  2010 Jul 5)
+  2010 Jul 5)  Vince will look into it.
 Patches to include:
 - Patch for Lisp support with ECL (Mikael Jansson, 2008 Oct 25)
 - Gvimext patch to support wide file names. (Szabolcs Horvat 2008 Sep 10)
index 5c9ba2a6e7aa46202964b914b318f6f0325f775b..24ab7327b76f88df29112360231c1f63912ab829 100644 (file)
@@ -7169,6 +7169,9 @@ When Vim is exiting because of a deadly signal, when v:dying is 2 or more,
 VimLeavePre, VimLeave, BufWinLeave and BufUnload autocommands are not
 executed.
 
+Removed support for GTK 1.  It was no longer maintained and required a lot of
+#ifdefs in the source code.  GTK 2 should be available for every system.
+
 
 Added                                                  *added-7.3*
 -----
@@ -7180,7 +7183,10 @@ the file was read, also for unloaded buffers. |undo-persistence|
 Added the 'relativenumber' option. (Markus Heidelberg)
 
 Support for Blowfish encryption.  Added the 'cryptmethod' option.
-Mostly by Moshin Ahmed.
+Mostly by Moshin Ahmed.  Also encrypt the text in the swap file and the undo
+file.
+
+Added the |+conceal| feature.  (Vince Negri)
 
 Added support for NetBeans in a terminal.  Added |:nbstart| and |:nbclose|.
 (Xavier de Gaye)
index 54944a55198d09d9115d534705f656c4cbc171b2..2a31706320d3604a558989e9351517c26fddd9ce 100644 (file)
@@ -1376,6 +1376,157 @@ init_vimrc_choices(void)
     ++choice_count;
 }
 
+#if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT)
+    static LONG
+reg_create_key(
+    HKEY root,
+    const char *subkey,
+    PHKEY phKey)
+{
+    DWORD disp;
+
+    *phKey = NULL;
+    return RegCreateKeyEx(
+                root, subkey,
+                0, NULL, REG_OPTION_NON_VOLATILE,
+                KEY_WOW64_64KEY | KEY_WRITE,
+                NULL, phKey, &disp);
+}
+
+    static LONG
+reg_set_string_value(
+    HKEY hKey,
+    const char *value_name,
+    const char *data)
+{
+    return RegSetValueEx(hKey, value_name, 0, REG_SZ,
+                                    (LPBYTE)data, (DWORD)(1 + strlen(data)));
+}
+
+    static LONG
+reg_create_key_and_value(
+    HKEY hRootKey,
+    const char *subkey,
+    const char *value_name,
+    const char *data)
+{
+    HKEY hKey;
+    LONG lRet = reg_create_key(hRootKey, subkey, &hKey);
+
+    if (ERROR_SUCCESS == lRet)
+    {
+        lRet = reg_set_string_value(hKey, value_name, data);
+        RegCloseKey(hKey);
+    }
+    return lRet;
+}
+
+    static LONG
+register_inproc_server(
+    HKEY hRootKey,
+    const char *clsid,
+    const char *extname,
+    const char *module,
+    const char *threading_model)
+{
+    CHAR subkey[BUFSIZE];
+    LONG lRet;
+
+    sprintf(subkey, "CLSID\\%s", clsid);
+    lRet = reg_create_key_and_value(hRootKey, subkey, NULL, extname);
+    if (ERROR_SUCCESS == lRet)
+    {
+        sprintf(subkey, "CLSID\\%s\\InProcServer32", clsid);
+        lRet = reg_create_key_and_value(hRootKey, subkey, NULL, module);
+        if (ERROR_SUCCESS == lRet)
+        {
+            lRet = reg_create_key_and_value(hRootKey, subkey,
+                                          "ThreadingModel", threading_model);
+        }
+    }
+    return lRet;
+}
+
+    static LONG
+register_shellex(
+    HKEY hRootKey,
+    const char *clsid,
+    const char *name,
+    const char *exe_path)
+{
+    LONG lRet = reg_create_key_and_value(
+            hRootKey,
+            "*\\shellex\\ContextMenuHandlers\\gvim",
+            NULL,
+            clsid);
+
+    if (ERROR_SUCCESS == lRet)
+    {
+        lRet = reg_create_key_and_value(
+                HKEY_LOCAL_MACHINE,
+                "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
+                clsid,
+                name);
+
+        if (ERROR_SUCCESS == lRet)
+        {
+            lRet = reg_create_key_and_value(
+                    HKEY_LOCAL_MACHINE,
+                    "Software\\Vim\\Gvim",
+                    "path",
+                    exe_path);
+        }
+    }
+    return lRet;
+}
+
+    static LONG
+register_openwith(
+    HKEY hRootKey,
+    const char *exe_path)
+{
+    LONG lRet = reg_create_key_and_value(
+            hRootKey,
+            "Applications\\gvim.exe\\shell\\edit\\command",
+            NULL,
+            exe_path);
+
+    if (ERROR_SUCCESS == lRet)
+    {
+        int i;
+        static const char *openwith[] = {
+               ".htm\\OpenWithList\\gvim.exe",
+               ".vim\\OpenWithList\\gvim.exe",
+               "*\\OpenWithList\\gvim.exe",
+        };
+
+        for (i = 0; ERROR_SUCCESS == lRet
+                          && i < sizeof(openwith) / sizeof(openwith[0]); i++)
+        {
+            lRet = reg_create_key_and_value(hRootKey, openwith[i], NULL, "");
+        }
+    }
+
+    return lRet;
+}
+
+    static LONG
+register_uninstall(
+    HKEY hRootKey,
+    const char *appname,
+    const char *display_name,
+    const char *uninstall_string)
+{
+    LONG lRet = reg_create_key_and_value(hRootKey, appname,
+                                                "DisplayName", display_name);
+
+    if (ERROR_SUCCESS == lRet)
+        lRet = reg_create_key_and_value(hRootKey, appname,
+                                        "UninstallString", uninstall_string);
+    return lRet;
+}
+#endif /* if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT) */
+
 /*
  * Add some entries to the registry:
  * - to add "Edit with Vim" to the context * menu
@@ -1383,97 +1534,76 @@ init_vimrc_choices(void)
  * - to uninstall Vim
  */
 /*ARGSUSED*/
-    static void
+    static LONG
 install_registry(void)
 {
+    LONG        lRet = ERROR_SUCCESS;
 #if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT)
-    FILE       *fd;
     const char *vim_ext_ThreadingModel = "Apartment";
     const char *vim_ext_name = "Vim Shell Extension";
     const char *vim_ext_clsid = "{51EEE242-AD87-11d3-9C1E-0090278BBD99}";
     char       buf[BUFSIZE];
+    char       vim_exe_path[BUFSIZE];
+    char        display_name[BUFSIZE];
+    char        uninstall_string[BUFSIZE];
 
-    fd = fopen("vim.reg", "w");
-    if (fd == NULL)
-       printf("ERROR: Could not open vim.reg for writing\n");
-    else
-    {
-       double_bs(installdir, buf); /* double the backslashes */
+    sprintf(vim_exe_path, "%s\\gvim.exe", installdir);
 
-       /*
-        * Write the registry entries for the "Edit with Vim" menu.
-        */
-       fprintf(fd, "REGEDIT4\n");
-       fprintf(fd, "\n");
-       if (install_popup)
-       {
-           char        bufg[BUFSIZE];
-           struct stat st;
-
-           if (stat("gvimext.dll", &st) >= 0)
-               strcpy(bufg, buf);
-           else
-               /* gvimext.dll is in gvimext subdir */
-               sprintf(bufg, "%sgvimext\\\\", buf);
+    if (install_popup)
+    {
+        char       bufg[BUFSIZE];
+        struct stat st;
 
-           printf("Creating \"Edit with Vim\" popup menu entry\n");
+        if (stat("gvimext.dll", &st) >= 0)
+            sprintf(bufg, "%s\\gvimext.dll", installdir);
+        else
+            /* gvimext.dll is in gvimext subdir */
+            sprintf(bufg, "%s\\gvimext\\gvimext.dll", installdir);
 
-           fprintf(fd, "[HKEY_CLASSES_ROOT\\CLSID\\%s]\n", vim_ext_clsid);
-           fprintf(fd, "@=\"%s\"\n", vim_ext_name);
-           fprintf(fd, "[HKEY_CLASSES_ROOT\\CLSID\\%s\\InProcServer32]\n",
-                                                              vim_ext_clsid);
-           fprintf(fd, "@=\"%sgvimext.dll\"\n", bufg);
-           fprintf(fd, "\"ThreadingModel\"=\"%s\"\n", vim_ext_ThreadingModel);
-           fprintf(fd, "\n");
-           fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\shellex\\ContextMenuHandlers\\gvim]\n");
-           fprintf(fd, "@=\"%s\"\n", vim_ext_clsid);
-           fprintf(fd, "\n");
-           fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved]\n");
-           fprintf(fd, "\"%s\"=\"%s\"\n", vim_ext_clsid, vim_ext_name);
-           fprintf(fd, "\n");
-           fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Vim\\Gvim]\n");
-           fprintf(fd, "\"path\"=\"%sgvim.exe\"\n", buf);
-           fprintf(fd, "\n");
-       }
+        printf("Creating \"Edit with Vim\" popup menu entry\n");
 
-       if (install_openwith)
-       {
-           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\\.vim\\OpenWithList\\gvim.exe]\n\n");
-           fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\OpenWithList\\gvim.exe]\n\n");
-       }
+        lRet = register_inproc_server(
+            HKEY_CLASSES_ROOT, vim_ext_clsid, vim_ext_name,
+                                               bufg, vim_ext_ThreadingModel);
+        if (ERROR_SUCCESS != lRet)
+           return lRet;
+        lRet = register_shellex(
+            HKEY_CLASSES_ROOT, vim_ext_clsid, vim_ext_name, vim_exe_path);
+        if (ERROR_SUCCESS != lRet)
+           return lRet;
+    }
 
-       printf("Creating an uninstall entry\n");
+    if (install_openwith)
+    {
+        printf("Creating \"Open with ...\" list entry\n");
 
-       /* The registry entries for uninstalling the menu */
-       fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT "]\n");
+        lRet = register_openwith(HKEY_CLASSES_ROOT, vim_exe_path);
+        if (ERROR_SUCCESS != lRet)
+           return lRet;
+    }
 
-       /* For the NSIS installer use the generated uninstaller. */
-       if (interactive)
-       {
-           fprintf(fd, "\"DisplayName\"=\"Vim " VIM_VERSION_SHORT "\"\n");
-           fprintf(fd, "\"UninstallString\"=\"%suninstal.exe\"\n", buf);
-       }
-       else
-       {
-           fprintf(fd, "\"DisplayName\"=\"Vim " VIM_VERSION_SHORT " (self-installing)\"\n");
-           fprintf(fd, "\"UninstallString\"=\"%suninstall-gui.exe\"\n", buf);
-       }
+    printf("Creating an uninstall entry\n");
 
-       fclose(fd);
+    /* For the NSIS installer use the generated uninstaller. */
+    if (interactive)
+    {
+        sprintf(display_name, "Vim " VIM_VERSION_SHORT);
+        sprintf(uninstall_string, "%suninstal.exe", buf);
+    }
+    else
+    {
+        sprintf(display_name, "Vim " VIM_VERSION_SHORT " (self-installing)");
+        sprintf(uninstall_string, "%suninstall-gui.exe", buf);
+    }
 
-       run_command("regedit /s vim.reg");
+    lRet = register_uninstall(
+        HKEY_LOCAL_MACHINE,
+        "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
+        display_name,
+        uninstall_string);
 
-       remove("vim.reg");
-    }
-#endif /* if defined(DJGPP) || defined(WIN3264) */
+#endif /* if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT) */
+    return lRet;
 }
 
     static void