mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	patch 8.0.1232: MS-Windows users are confused about default mappings
Problem:    MS-Windows users are confused about default mappings.
Solution:   Don't map keys in the console where they don't work.  Add a choice
            in the installer to use MS-Windows key bindings or not. (Christian
            Brabandt, Ken Takata, closes #2093)
			
			
This commit is contained in:
		
							
								
								
									
										1
									
								
								Filelist
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Filelist
									
									
									
									
									
								
							| @@ -451,6 +451,7 @@ SRC_DOS =	\ | ||||
| 		src/xxd/Make_mvc.mak \ | ||||
| 		nsis/gvim.nsi \ | ||||
| 		nsis/gvim_version.nsh \ | ||||
| 		nsis/vimrc.ini \ | ||||
| 		nsis/README.txt \ | ||||
| 		uninstal.txt \ | ||||
| 		src/VisVim/Commands.cpp \ | ||||
|   | ||||
| @@ -83,6 +83,7 @@ SilentInstall normal | ||||
| # These are the pages we use | ||||
| Page license | ||||
| Page components | ||||
| Page custom SetCustom ValidateCustom ": _vimrc setting" | ||||
| Page directory "" "" CheckInstallDir | ||||
| Page instfiles | ||||
| UninstPage uninstConfirm | ||||
| @@ -135,6 +136,10 @@ Function .onInit | ||||
|   StrCpy $1 "-register-OLE" | ||||
|   StrCpy $2 "gvim evim gview gvimdiff vimtutor" | ||||
|  | ||||
|   # Extract InstallOptions files | ||||
|   # $PLUGINSDIR will automatically be removed when the installer closes | ||||
|   InitPluginsDir | ||||
|   File /oname=$PLUGINSDIR\vimrc.ini "vimrc.ini" | ||||
| FunctionEnd | ||||
|  | ||||
| Function .onUserAbort | ||||
| @@ -404,7 +409,7 @@ Section "Add an Edit-with-Vim context menu entry" | ||||
| SectionEnd | ||||
|  | ||||
| ########################################################## | ||||
| Section "Create a _vimrc if it doesn't exist" | ||||
| Section "Create a _vimrc if it doesn't exist" sec_vimrc_id | ||||
| 	SectionIn 1 3 | ||||
|  | ||||
| 	StrCpy $1 "$1 -create-vimrc" | ||||
| @@ -462,6 +467,45 @@ Section -post | ||||
| 	BringToFront | ||||
| SectionEnd | ||||
|  | ||||
| ########################################################## | ||||
| Function SetCustom | ||||
| 	# Display the InstallOptions dialog | ||||
|  | ||||
| 	# Check if a _vimrc should be created | ||||
| 	SectionGetFlags ${sec_vimrc_id} $0 | ||||
| 	IntOp $0 $0 & 1 | ||||
| 	StrCmp $0 "1" +2 0 | ||||
| 	  Abort | ||||
|  | ||||
| 	Push $3 | ||||
| 	  InstallOptions::dialog "$PLUGINSDIR\vimrc.ini" | ||||
| 	  Pop $3 | ||||
| 	Pop $3 | ||||
| FunctionEnd | ||||
|  | ||||
| Function ValidateCustom | ||||
| 	ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 2" "State" | ||||
| 	StrCmp $3 "1" 0 +3 | ||||
| 	  StrCpy $1 "$1 -vimrc-remap no" | ||||
| 	  Goto behave | ||||
|  | ||||
| 	  StrCpy $1 "$1 -vimrc-remap win" | ||||
|  | ||||
| 	behave: | ||||
| 	ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 5" "State" | ||||
| 	StrCmp $3 "1" 0 +3 | ||||
| 	  StrCpy $1 "$1 -vimrc-behave unix" | ||||
| 	  Goto done | ||||
|  | ||||
| 	ReadINIStr $3 "$PLUGINSDIR\vimrc.ini" "Field 6" "State" | ||||
| 	StrCmp $3 "1" 0 +3 | ||||
| 	  StrCpy $1 "$1 -vimrc-behave mswin" | ||||
| 	  Goto done | ||||
|  | ||||
| 	  StrCpy $1 "$1 -vimrc-behave default" | ||||
| 	done: | ||||
| FunctionEnd | ||||
|  | ||||
| ########################################################## | ||||
| Section Uninstall | ||||
| 	# Apparently $INSTDIR is set to the directory where the uninstaller is | ||||
|   | ||||
							
								
								
									
										68
									
								
								nsis/vimrc.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								nsis/vimrc.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| [Settings] | ||||
| NumFields=7 | ||||
|  | ||||
| [Field 1] | ||||
| Type=GroupBox | ||||
| Left=0 | ||||
| Right=-1 | ||||
| Top=0 | ||||
| Bottom=53 | ||||
| Text=" Key remapping " | ||||
|  | ||||
| [Field 2] | ||||
| Type=radiobutton | ||||
| Text=Do not remap keys for Windows behavior (Default) | ||||
| Left=10 | ||||
| Right=-10 | ||||
| Top=17 | ||||
| Bottom=25 | ||||
| State=1 | ||||
| Flags=GROUP | ||||
|  | ||||
| [Field 3] | ||||
| Type=radiobutton | ||||
| Text=Remap a few keys for Windows behavior (<C-V>, <C-C>, <C-A>, <C-S>, <C-F>, etc) | ||||
| Left=10 | ||||
| Right=-10 | ||||
| Top=30 | ||||
| Bottom=47 | ||||
| State=0 | ||||
| Flags=NOTABSTOP | ||||
|  | ||||
| [Field 4] | ||||
| Type=GroupBox | ||||
| Left=0 | ||||
| Right=-1 | ||||
| Top=55 | ||||
| Bottom=-5 | ||||
| Text=" Mouse behavior " | ||||
|  | ||||
| [Field 5] | ||||
| Type=radiobutton | ||||
| Text=Right button extends selection, left button starts visual mode (Unix) | ||||
| Left=10 | ||||
| Right=-5 | ||||
| Top=72 | ||||
| Bottom=80 | ||||
| State=0 | ||||
| Flags=GROUP | ||||
|  | ||||
| [Field 6] | ||||
| Type=radiobutton | ||||
| Text=Right button has a popup menu, left button starts select mode (Windows) | ||||
| Left=10 | ||||
| Right=-5 | ||||
| Top=85 | ||||
| Bottom=93 | ||||
| State=0 | ||||
| Flags=NOTABSTOP | ||||
|  | ||||
| [Field 7] | ||||
| Type=radiobutton | ||||
| Text=Right button has a popup menu, left button starts visual mode (Default) | ||||
| Left=10 | ||||
| Right=-5 | ||||
| Top=98 | ||||
| Bottom=106 | ||||
| State=1 | ||||
| Flags=NOTABSTOP | ||||
| @@ -1,7 +1,7 @@ | ||||
| " Set options and add mapping such that Vim behaves a lot like MS-Windows | ||||
| " | ||||
| " Maintainer:	Bram Moolenaar <Bram@vim.org> | ||||
| " Last change:	2017 Feb 09 | ||||
| " Last change:	2017 Oct 28 | ||||
|  | ||||
| " bail out if this isn't wanted (mrsvim.vim uses this). | ||||
| if exists("g:skip_loading_mswin") && g:skip_loading_mswin | ||||
| @@ -105,14 +105,15 @@ onoremap <C-F4> <C-C><C-W>c | ||||
|  | ||||
| if has("gui") | ||||
|   " CTRL-F is the search dialog | ||||
|   noremap <C-F> :promptfind<CR> | ||||
|   inoremap <C-F> <C-\><C-O>:promptfind<CR> | ||||
|   cnoremap <C-F> <C-\><C-C>:promptfind<CR> | ||||
|   noremap  <expr> <C-F> has("gui_running") ? ":promptfind\<CR>" : "/" | ||||
|   inoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-O>:promptfind\<CR>" : "\<C-\>\<C-O>/" | ||||
|   cnoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-C>:promptfind\<CR>" : "\<C-\>\<C-O>/" | ||||
|  | ||||
|   " CTRL-H is the replace dialog | ||||
|   noremap <C-H> :promptrepl<CR> | ||||
|   inoremap <C-H> <C-\><C-O>:promptrepl<CR> | ||||
|   cnoremap <C-H> <C-\><C-C>:promptrepl<CR> | ||||
|   " CTRL-H is the replace dialog, | ||||
|   " but in console, it might be backspace, so don't map it there | ||||
|   nnoremap <expr> <C-H> has("gui_running") ? ":promptrepl\<CR>" : "\<C-H>" | ||||
|   inoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-O>:promptrepl\<CR>" : "\<C-H>" | ||||
|   cnoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-C>:promptrepl\<CR>" : "\<C-H>" | ||||
| endif | ||||
|  | ||||
| " restore 'cpoptions' | ||||
|   | ||||
| @@ -80,21 +80,23 @@ char	*(remap_choices[]) = | ||||
|     "Do not remap keys for Windows behavior", | ||||
|     "Remap a few keys for Windows behavior (CTRL-V, CTRL-C, CTRL-F, etc)", | ||||
| }; | ||||
| int	remap_choice = (int)remap_win; | ||||
| int	remap_choice = (int)remap_no; | ||||
| char	*remap_text = "- %s"; | ||||
|  | ||||
| enum | ||||
| { | ||||
|     mouse_xterm = 1, | ||||
|     mouse_mswin | ||||
|     mouse_mswin,, | ||||
|     mouse_default | ||||
| }; | ||||
| char	*(mouse_choices[]) = | ||||
| { | ||||
|     "\nChoose the way how Vim uses the mouse:", | ||||
|     "right button extends selection (the Unix way)", | ||||
|     "right button has a popup menu (the Windows way)", | ||||
|     "right button has a popup menu, left button starts select mode (the Windows way)", | ||||
|     "right button has a popup menu, left button starts visual mode", | ||||
| }; | ||||
| int	mouse_choice = (int)mouse_mswin; | ||||
| int	mouse_choice = (int)mouse_default; | ||||
| char	*mouse_text = "- The mouse %s"; | ||||
|  | ||||
| enum | ||||
| @@ -155,8 +157,7 @@ get_choice(char **table, int entries) | ||||
| 	{ | ||||
| 	    if (idx) | ||||
| 		printf("%2d  ", idx); | ||||
| 	    printf(table[idx]); | ||||
| 	    printf("\n"); | ||||
| 	    puts(table[idx]); | ||||
| 	} | ||||
| 	printf("Choice: "); | ||||
| 	if (scanf("%d", &answer) != 1) | ||||
| @@ -1176,6 +1177,8 @@ install_vimrc(int idx) | ||||
| 	case mouse_mswin: | ||||
| 		    fprintf(fd, "behave mswin\n"); | ||||
| 		    break; | ||||
| 	case mouse_default: | ||||
| 		    break; | ||||
|     } | ||||
|     if ((tfd = fopen("diff.exe", "r")) != NULL) | ||||
|     { | ||||
| @@ -2205,6 +2208,10 @@ print_cmd_line_help(void) | ||||
|     printf("    Create .bat files for Vim variants in the Windows directory.\n"); | ||||
|     printf("-create-vimrc\n"); | ||||
|     printf("    Create a default _vimrc file if one does not already exist.\n"); | ||||
|     printf("-vimrc-remap [no|win]\n"); | ||||
|     printf("    Remap keys when creating a default _vimrc file.\n"); | ||||
|     printf("-vimrc-behave [unix|mswin|default]\n"); | ||||
|     printf("    Set mouse behavior when creating a default _vimrc file.\n"); | ||||
|     printf("-install-popup\n"); | ||||
|     printf("    Install the Edit-with-Vim context menu entry\n"); | ||||
|     printf("-install-openwith\n"); | ||||
| @@ -2260,6 +2267,28 @@ command_line_setup_choices(int argc, char **argv) | ||||
| 	     */ | ||||
| 	    init_vimrc_choices(); | ||||
| 	} | ||||
| 	else if (strcmp(argv[i], "-vimrc-remap") == 0) | ||||
| 	{ | ||||
| 	    if (i + 1 == argc) | ||||
| 		break; | ||||
| 	    i++; | ||||
| 	    if (strcmp(argv[i], "no") == 0) | ||||
| 		remap_choice = remap_no; | ||||
| 	    else if (strcmp(argv[i], "win") == 0) | ||||
| 		remap_choice = remap_win; | ||||
| 	} | ||||
| 	else if (strcmp(argv[i], "-vimrc-behave") == 0) | ||||
| 	{ | ||||
| 	    if (i + 1 == argc) | ||||
| 		break; | ||||
| 	    i++; | ||||
| 	    if (strcmp(argv[i], "unix") == 0) | ||||
| 		mouse_choice = mouse_xterm; | ||||
| 	    else if (strcmp(argv[i], "mswin") == 0) | ||||
| 		mouse_choice = mouse_mswin; | ||||
| 	    else if (strcmp(argv[i], "default") == 0) | ||||
| 		mouse_choice = mouse_default; | ||||
| 	} | ||||
| 	else if (strcmp(argv[i], "-install-popup") == 0) | ||||
| 	{ | ||||
| 	    init_popup_choice(); | ||||
| @@ -2424,8 +2453,7 @@ NULL | ||||
|     printf("\n"); | ||||
|     for (i = 0; items[i] != NULL; ++i) | ||||
|     { | ||||
| 	printf(items[i]); | ||||
| 	printf("\n"); | ||||
| 	puts(items[i]); | ||||
| 	printf("Hit Enter to continue, b (back) or q (quit help): "); | ||||
| 	c = getchar(); | ||||
| 	rewind(stdin); | ||||
|   | ||||
| @@ -761,6 +761,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     1232, | ||||
| /**/ | ||||
|     1231, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user