mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 8.1.0472: dosinst command has a few flaws
Problem: Dosinst command has a few flaws. Solution: Register DisplayIcon, DisplayVersion and Publisher for the uninstaller. (closes #3485) Don't set 'diffexpr' if internal diff is supported. Allow for using Vi compatible from the command line. Remove needless sleeps. Add comments in the generated _vimrc. (Ken Takata, closes #3525)
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
#define DOSINST
|
#define DOSINST
|
||||||
#include "dosinst.h"
|
#include "dosinst.h"
|
||||||
|
#include <io.h>
|
||||||
|
|
||||||
#define GVIMEXT64_PATH "GvimExt64\\gvimext.dll"
|
#define GVIMEXT64_PATH "GvimExt64\\gvimext.dll"
|
||||||
#define GVIMEXT32_PATH "GvimExt32\\gvimext.dll"
|
#define GVIMEXT32_PATH "GvimExt32\\gvimext.dll"
|
||||||
@@ -63,6 +64,7 @@ int choice_count = 0; /* number of choices available */
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
compat_vi = 1,
|
compat_vi = 1,
|
||||||
|
compat_vim,
|
||||||
compat_some_enhancements,
|
compat_some_enhancements,
|
||||||
compat_all_enhancements
|
compat_all_enhancements
|
||||||
};
|
};
|
||||||
@@ -70,6 +72,7 @@ char *(compat_choices[]) =
|
|||||||
{
|
{
|
||||||
"\nChoose the default way to run Vim:",
|
"\nChoose the default way to run Vim:",
|
||||||
"Vi compatible",
|
"Vi compatible",
|
||||||
|
"Vim default",
|
||||||
"with some Vim enhancements",
|
"with some Vim enhancements",
|
||||||
"with syntax highlighting and other features switched on",
|
"with syntax highlighting and other features switched on",
|
||||||
};
|
};
|
||||||
@@ -567,7 +570,6 @@ uninstall_check(int skip_question)
|
|||||||
sleep(1); /* wait for uninstaller to start up */
|
sleep(1); /* wait for uninstaller to start up */
|
||||||
num_windows = 0;
|
num_windows = 0;
|
||||||
EnumWindows(window_cb, 0);
|
EnumWindows(window_cb, 0);
|
||||||
sleep(1); /* wait for windows to be counted */
|
|
||||||
if (num_windows == 0)
|
if (num_windows == 0)
|
||||||
{
|
{
|
||||||
/* Did not find the uninstaller, ask user to press
|
/* Did not find the uninstaller, ask user to press
|
||||||
@@ -583,9 +585,9 @@ uninstall_check(int skip_question)
|
|||||||
{
|
{
|
||||||
printf(".");
|
printf(".");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
sleep(1); /* wait for the uninstaller to finish */
|
||||||
num_windows = 0;
|
num_windows = 0;
|
||||||
EnumWindows(window_cb, 0);
|
EnumWindows(window_cb, 0);
|
||||||
sleep(1); /* wait for windows to be counted */
|
|
||||||
} while (num_windows > 0);
|
} while (num_windows > 0);
|
||||||
}
|
}
|
||||||
printf("\nDone!\n");
|
printf("\nDone!\n");
|
||||||
@@ -1159,12 +1161,21 @@ install_vimrc(int idx)
|
|||||||
switch (compat_choice)
|
switch (compat_choice)
|
||||||
{
|
{
|
||||||
case compat_vi:
|
case compat_vi:
|
||||||
|
fprintf(fd, "\" Vi compatible\n");
|
||||||
fprintf(fd, "set compatible\n");
|
fprintf(fd, "set compatible\n");
|
||||||
break;
|
break;
|
||||||
|
case compat_vim:
|
||||||
|
fprintf(fd, "\" Vim's default behavior\n");
|
||||||
|
fprintf(fd, "if &compatible\n");
|
||||||
|
fprintf(fd, " set nocompatible\n");
|
||||||
|
fprintf(fd, "endif\n");
|
||||||
|
break;
|
||||||
case compat_some_enhancements:
|
case compat_some_enhancements:
|
||||||
|
fprintf(fd, "\" Vim with some enhancements\n");
|
||||||
fprintf(fd, "source $VIMRUNTIME/defaults.vim\n");
|
fprintf(fd, "source $VIMRUNTIME/defaults.vim\n");
|
||||||
break;
|
break;
|
||||||
case compat_all_enhancements:
|
case compat_all_enhancements:
|
||||||
|
fprintf(fd, "\" Vim with all enhancements\n");
|
||||||
fprintf(fd, "source $VIMRUNTIME/vimrc_example.vim\n");
|
fprintf(fd, "source $VIMRUNTIME/vimrc_example.vim\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1173,15 +1184,21 @@ install_vimrc(int idx)
|
|||||||
case remap_no:
|
case remap_no:
|
||||||
break;
|
break;
|
||||||
case remap_win:
|
case remap_win:
|
||||||
|
fprintf(fd, "\n");
|
||||||
|
fprintf(fd, "\" Remap a few keys for Windows behavior\n");
|
||||||
fprintf(fd, "source $VIMRUNTIME/mswin.vim\n");
|
fprintf(fd, "source $VIMRUNTIME/mswin.vim\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (mouse_choice)
|
switch (mouse_choice)
|
||||||
{
|
{
|
||||||
case mouse_xterm:
|
case mouse_xterm:
|
||||||
|
fprintf(fd, "\n");
|
||||||
|
fprintf(fd, "\" Mouse behavior (the Unix way)\n");
|
||||||
fprintf(fd, "behave xterm\n");
|
fprintf(fd, "behave xterm\n");
|
||||||
break;
|
break;
|
||||||
case mouse_mswin:
|
case mouse_mswin:
|
||||||
|
fprintf(fd, "\n");
|
||||||
|
fprintf(fd, "\" Mouse behavior (the Windows way)\n");
|
||||||
fprintf(fd, "behave mswin\n");
|
fprintf(fd, "behave mswin\n");
|
||||||
break;
|
break;
|
||||||
case mouse_default:
|
case mouse_default:
|
||||||
@@ -1192,7 +1209,11 @@ install_vimrc(int idx)
|
|||||||
/* Use the diff.exe that comes with the self-extracting gvim.exe. */
|
/* Use the diff.exe that comes with the self-extracting gvim.exe. */
|
||||||
fclose(tfd);
|
fclose(tfd);
|
||||||
fprintf(fd, "\n");
|
fprintf(fd, "\n");
|
||||||
fprintf(fd, "set diffexpr=MyDiff()\n");
|
fprintf(fd, "\" Use the internal diff if available.\n");
|
||||||
|
fprintf(fd, "\" Otherwise use the special 'diffexpr' for Windows.\n");
|
||||||
|
fprintf(fd, "if &diffopt !~# 'internal'\n");
|
||||||
|
fprintf(fd, " set diffexpr=MyDiff()\n");
|
||||||
|
fprintf(fd, "endif\n");
|
||||||
fprintf(fd, "function MyDiff()\n");
|
fprintf(fd, "function MyDiff()\n");
|
||||||
fprintf(fd, " let opt = '-a --binary '\n");
|
fprintf(fd, " let opt = '-a --binary '\n");
|
||||||
fprintf(fd, " if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n");
|
fprintf(fd, " if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n");
|
||||||
@@ -1491,7 +1512,10 @@ register_uninstall(
|
|||||||
HKEY hRootKey,
|
HKEY hRootKey,
|
||||||
const char *appname,
|
const char *appname,
|
||||||
const char *display_name,
|
const char *display_name,
|
||||||
const char *uninstall_string)
|
const char *uninstall_string,
|
||||||
|
const char *display_icon,
|
||||||
|
const char *display_version,
|
||||||
|
const char *publisher)
|
||||||
{
|
{
|
||||||
LONG lRet = reg_create_key_and_value(hRootKey, appname,
|
LONG lRet = reg_create_key_and_value(hRootKey, appname,
|
||||||
"DisplayName", display_name, KEY_WOW64_64KEY);
|
"DisplayName", display_name, KEY_WOW64_64KEY);
|
||||||
@@ -1499,6 +1523,15 @@ register_uninstall(
|
|||||||
if (ERROR_SUCCESS == lRet)
|
if (ERROR_SUCCESS == lRet)
|
||||||
lRet = reg_create_key_and_value(hRootKey, appname,
|
lRet = reg_create_key_and_value(hRootKey, appname,
|
||||||
"UninstallString", uninstall_string, KEY_WOW64_64KEY);
|
"UninstallString", uninstall_string, KEY_WOW64_64KEY);
|
||||||
|
if (ERROR_SUCCESS == lRet)
|
||||||
|
lRet = reg_create_key_and_value(hRootKey, appname,
|
||||||
|
"DisplayIcon", display_icon, KEY_WOW64_64KEY);
|
||||||
|
if (ERROR_SUCCESS == lRet)
|
||||||
|
lRet = reg_create_key_and_value(hRootKey, appname,
|
||||||
|
"DisplayVersion", display_version, KEY_WOW64_64KEY);
|
||||||
|
if (ERROR_SUCCESS == lRet)
|
||||||
|
lRet = reg_create_key_and_value(hRootKey, appname,
|
||||||
|
"Publisher", publisher, KEY_WOW64_64KEY);
|
||||||
return lRet;
|
return lRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1519,6 +1552,7 @@ install_registry(void)
|
|||||||
char vim_exe_path[BUFSIZE];
|
char vim_exe_path[BUFSIZE];
|
||||||
char display_name[BUFSIZE];
|
char display_name[BUFSIZE];
|
||||||
char uninstall_string[BUFSIZE];
|
char uninstall_string[BUFSIZE];
|
||||||
|
char icon_string[BUFSIZE];
|
||||||
int i;
|
int i;
|
||||||
int loop_count = is_64bit_os() ? 2 : 1;
|
int loop_count = is_64bit_os() ? 2 : 1;
|
||||||
DWORD flag;
|
DWORD flag;
|
||||||
@@ -1583,11 +1617,16 @@ install_registry(void)
|
|||||||
else
|
else
|
||||||
sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
|
sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
|
||||||
|
|
||||||
|
sprintf(icon_string, "%s\\gvim.exe,0", installdir);
|
||||||
|
|
||||||
lRet = register_uninstall(
|
lRet = register_uninstall(
|
||||||
HKEY_LOCAL_MACHINE,
|
HKEY_LOCAL_MACHINE,
|
||||||
"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
|
||||||
display_name,
|
display_name,
|
||||||
uninstall_string);
|
uninstall_string,
|
||||||
|
icon_string,
|
||||||
|
VIM_VERSION_SHORT,
|
||||||
|
"Bram Moolenaar et al.");
|
||||||
if (ERROR_SUCCESS != lRet)
|
if (ERROR_SUCCESS != lRet)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
@@ -2219,6 +2258,8 @@ print_cmd_line_help(void)
|
|||||||
printf(" Remap keys when creating a default _vimrc file.\n");
|
printf(" Remap keys when creating a default _vimrc file.\n");
|
||||||
printf("-vimrc-behave [unix|mswin|default]\n");
|
printf("-vimrc-behave [unix|mswin|default]\n");
|
||||||
printf(" Set mouse behavior when creating a default _vimrc file.\n");
|
printf(" Set mouse behavior when creating a default _vimrc file.\n");
|
||||||
|
printf("-vimrc-compat [vi|vim|defaults|all]\n");
|
||||||
|
printf(" Set Vi compatibility when creating a default _vimrc file.\n");
|
||||||
printf("-install-popup\n");
|
printf("-install-popup\n");
|
||||||
printf(" Install the Edit-with-Vim context menu entry\n");
|
printf(" Install the Edit-with-Vim context menu entry\n");
|
||||||
printf("-install-openwith\n");
|
printf("-install-openwith\n");
|
||||||
@@ -2296,6 +2337,20 @@ command_line_setup_choices(int argc, char **argv)
|
|||||||
else if (strcmp(argv[i], "default") == 0)
|
else if (strcmp(argv[i], "default") == 0)
|
||||||
mouse_choice = mouse_default;
|
mouse_choice = mouse_default;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "-vimrc-compat") == 0)
|
||||||
|
{
|
||||||
|
if (i + 1 == argc)
|
||||||
|
break;
|
||||||
|
i++;
|
||||||
|
if (strcmp(argv[i], "vi") == 0)
|
||||||
|
compat_choice = compat_vi;
|
||||||
|
else if (strcmp(argv[i], "vim") == 0)
|
||||||
|
compat_choice = compat_vim;
|
||||||
|
else if (strcmp(argv[i], "defaults") == 0)
|
||||||
|
compat_choice = compat_some_enhancements;
|
||||||
|
else if (strcmp(argv[i], "all") == 0)
|
||||||
|
compat_choice = compat_all_enhancements;
|
||||||
|
}
|
||||||
else if (strcmp(argv[i], "-install-popup") == 0)
|
else if (strcmp(argv[i], "-install-popup") == 0)
|
||||||
{
|
{
|
||||||
init_popup_choice();
|
init_popup_choice();
|
||||||
@@ -2546,7 +2601,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
/* When nothing found exit quietly. If something found wait for
|
/* When nothing found exit quietly. If something found wait for
|
||||||
* a little while, so that the user can read the messages. */
|
* a little while, so that the user can read the messages. */
|
||||||
if (i)
|
if (i && _isatty(1))
|
||||||
sleep(3);
|
sleep(3);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
@@ -792,6 +792,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
472,
|
||||||
/**/
|
/**/
|
||||||
471,
|
471,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user