mirror of
				https://github.com/vim/vim.git
				synced 2025-10-25 09:04:09 -04:00 
			
		
		
		
	patch 9.0.0511: unnecessary scrolling for message of only one line
Problem: Unnecessary scrolling for message of only one line. Solution: Only set msg_scroll when needed. (closes #11178)
This commit is contained in:
		| @@ -535,11 +535,11 @@ msg_source(int attr) | |||||||
| 	return; | 	return; | ||||||
|     recursive = TRUE; |     recursive = TRUE; | ||||||
|  |  | ||||||
|     msg_scroll = TRUE;  // this will take more than one line |  | ||||||
|     ++no_wait_return; |     ++no_wait_return; | ||||||
|     p = get_emsg_source(); |     p = get_emsg_source(); | ||||||
|     if (p != NULL) |     if (p != NULL) | ||||||
|     { |     { | ||||||
|  | 	msg_scroll = TRUE;  // this will take more than one line | ||||||
| 	msg_attr((char *)p, attr); | 	msg_attr((char *)p, attr); | ||||||
| 	vim_free(p); | 	vim_free(p); | ||||||
|     } |     } | ||||||
| @@ -767,8 +767,8 @@ emsg_core(char_u *s) | |||||||
| #endif | #endif | ||||||
|     /* |     /* | ||||||
|      * Display name and line number for the source of the error. |      * Display name and line number for the source of the error. | ||||||
|      * Sets "msg_scroll". |  | ||||||
|      */ |      */ | ||||||
|  |     msg_scroll = TRUE; | ||||||
|     msg_source(attr); |     msg_source(attr); | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|   | |||||||
| @@ -166,6 +166,38 @@ func Test_echospace() | |||||||
|   set ruler& showcmd& |   set ruler& showcmd& | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_warning_scroll() | ||||||
|  |   CheckRunVimInTerminal | ||||||
|  |   let lines =<< trim END | ||||||
|  |       call test_override('ui_delay', 50) | ||||||
|  |       set noruler | ||||||
|  |       set readonly | ||||||
|  |       undo | ||||||
|  |   END | ||||||
|  |   call writefile(lines, 'XTestWarningScroll', 'D') | ||||||
|  |   let buf = RunVimInTerminal('', #{rows: 8}) | ||||||
|  |  | ||||||
|  |   " When the warning comes from a script, messages are scrolled so that the | ||||||
|  |   " stacktrace is visible. | ||||||
|  |   call term_sendkeys(buf, ":source XTestWarningScroll\n") | ||||||
|  |   " only match the final colon in the line that shows the source | ||||||
|  |   call WaitForAssert({-> assert_match(':$', term_getline(buf, 5))}) | ||||||
|  |   call WaitForAssert({-> assert_equal('line    4:W10: Warning: Changing a readonly file', term_getline(buf, 6))}) | ||||||
|  |   call WaitForAssert({-> assert_equal('Already at oldest change', term_getline(buf, 7))}) | ||||||
|  |   call WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 8))}) | ||||||
|  |   call term_sendkeys(buf, "\n") | ||||||
|  |  | ||||||
|  |   " When the warning does not come from a script, messages are not scrolled. | ||||||
|  |   call term_sendkeys(buf, ":enew\n") | ||||||
|  |   call term_sendkeys(buf, ":set readonly\n") | ||||||
|  |   call term_sendkeys(buf, 'u') | ||||||
|  |   call WaitForAssert({-> assert_equal('W10: Warning: Changing a readonly file', term_getline(buf, 8))}) | ||||||
|  |   call WaitForAssert({-> assert_equal('Already at oldest change', term_getline(buf, 8))}) | ||||||
|  |  | ||||||
|  |   " clean up | ||||||
|  |   call StopVimInTerminal(buf) | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| " Test more-prompt (see :help more-prompt). | " Test more-prompt (see :help more-prompt). | ||||||
| func Test_message_more() | func Test_message_more() | ||||||
|   CheckRunVimInTerminal |   CheckRunVimInTerminal | ||||||
|   | |||||||
| @@ -699,6 +699,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 */ | ||||||
|  | /**/ | ||||||
|  |     511, | ||||||
| /**/ | /**/ | ||||||
|     510, |     510, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user