mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
Adjust MS-Windows installer so that it also works for 64 bit systems. (George
Reilly)
This commit is contained in:
parent
e667c95335
commit
ccd9ccfa59
2
Makefile
2
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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
290
src/dosinst.c
290
src/dosinst.c
@ -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");
|
||||
sprintf(vim_exe_path, "%s\\gvim.exe", installdir);
|
||||
|
||||
if (install_popup)
|
||||
{
|
||||
char bufg[BUFSIZE];
|
||||
struct stat st;
|
||||
|
||||
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);
|
||||
|
||||
printf("Creating \"Edit with Vim\" popup menu entry\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;
|
||||
}
|
||||
|
||||
if (install_openwith)
|
||||
{
|
||||
printf("Creating \"Open with ...\" list entry\n");
|
||||
|
||||
lRet = register_openwith(HKEY_CLASSES_ROOT, vim_exe_path);
|
||||
if (ERROR_SUCCESS != lRet)
|
||||
return lRet;
|
||||
}
|
||||
|
||||
printf("Creating an uninstall entry\n");
|
||||
|
||||
/* For the NSIS installer use the generated uninstaller. */
|
||||
if (interactive)
|
||||
{
|
||||
sprintf(display_name, "Vim " VIM_VERSION_SHORT);
|
||||
sprintf(uninstall_string, "%suninstal.exe", buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
double_bs(installdir, buf); /* double the backslashes */
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
printf("Creating \"Edit with Vim\" popup menu entry\n");
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
printf("Creating an uninstall entry\n");
|
||||
|
||||
/* The registry entries for uninstalling the menu */
|
||||
fprintf(fd, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT "]\n");
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
||||
fclose(fd);
|
||||
|
||||
run_command("regedit /s vim.reg");
|
||||
|
||||
remove("vim.reg");
|
||||
sprintf(display_name, "Vim " VIM_VERSION_SHORT " (self-installing)");
|
||||
sprintf(uninstall_string, "%suninstall-gui.exe", buf);
|
||||
}
|
||||
#endif /* if defined(DJGPP) || defined(WIN3264) */
|
||||
|
||||
lRet = register_uninstall(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
|
||||
display_name,
|
||||
uninstall_string);
|
||||
|
||||
#endif /* if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT) */
|
||||
return lRet;
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user