mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	fix(spell): splice extmarks on :spellrepall
(cherry picked from commit 22241639eb)
			
			
This commit is contained in:
		 zeertzjq
					zeertzjq
				
			
				
					committed by
					
						![github-actions[bot]](/assets/img/avatar_default.png) github-actions[bot]
						github-actions[bot]
					
				
			
			
				
	
			
			
			![github-actions[bot]](/assets/img/avatar_default.png) github-actions[bot]
						github-actions[bot]
					
				
			
						parent
						
							6937075304
						
					
				
				
					commit
					79c8df7e97
				
			| @@ -2597,9 +2597,11 @@ void ex_spellrepall(exarg_T *eap) | ||||
|     emsg(_("E752: No previous spell replacement")); | ||||
|     return; | ||||
|   } | ||||
|   int addlen = (int)(strlen(repl_to) - strlen(repl_from)); | ||||
|   const size_t repl_from_len = strlen(repl_from); | ||||
|   const size_t repl_to_len = strlen(repl_to); | ||||
|   int addlen = (int)(repl_to_len - repl_from_len); | ||||
|  | ||||
|   size_t frompatlen = strlen(repl_from) + 7; | ||||
|   const size_t frompatlen = repl_from_len + 7; | ||||
|   char *frompat = xmalloc(frompatlen); | ||||
|   snprintf(frompat, frompatlen, "\\V\\<%s\\>", repl_from); | ||||
|   p_ws = false; | ||||
| @@ -2616,14 +2618,15 @@ void ex_spellrepall(exarg_T *eap) | ||||
|     // Only replace when the right word isn't there yet.  This happens | ||||
|     // when changing "etc" to "etc.". | ||||
|     char *line = get_cursor_line_ptr(); | ||||
|     if (addlen <= 0 || strncmp(line + curwin->w_cursor.col, | ||||
|                                repl_to, strlen(repl_to)) != 0) { | ||||
|     if (addlen <= 0 | ||||
|         || strncmp(line + curwin->w_cursor.col, repl_to, repl_to_len) != 0) { | ||||
|       char *p = xmalloc(strlen(line) + (size_t)addlen + 1); | ||||
|       memmove(p, line, (size_t)curwin->w_cursor.col); | ||||
|       STRCPY(p + curwin->w_cursor.col, repl_to); | ||||
|       STRCAT(p, line + curwin->w_cursor.col + strlen(repl_from)); | ||||
|       STRCAT(p, line + curwin->w_cursor.col + repl_from_len); | ||||
|       ml_replace(curwin->w_cursor.lnum, p, false); | ||||
|       changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); | ||||
|       inserted_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col, | ||||
|                      (int)repl_from_len, (int)repl_to_len); | ||||
|  | ||||
|       if (curwin->w_cursor.lnum != prev_lnum) { | ||||
|         sub_nlines++; | ||||
| @@ -2631,7 +2634,7 @@ void ex_spellrepall(exarg_T *eap) | ||||
|       } | ||||
|       sub_nsubs++; | ||||
|     } | ||||
|     curwin->w_cursor.col += (colnr_T)strlen(repl_to); | ||||
|     curwin->w_cursor.col += (colnr_T)repl_to_len; | ||||
|   } | ||||
|  | ||||
|   p_ws = save_ws; | ||||
|   | ||||
| @@ -1164,12 +1164,17 @@ describe('lua: nvim_buf_attach on_bytes', function() | ||||
|     end) | ||||
|  | ||||
|     it("works with accepting spell suggestions", function() | ||||
|       local check_events = setup_eventcheck(verify, {"hallo"}) | ||||
|       local check_events = setup_eventcheck(verify, {"hallo world", "hallo world"}) | ||||
|  | ||||
|       feed("gg0z=4<cr><cr>") -- accepts 'Hello' | ||||
|       check_events { | ||||
|         { "test1", "bytes", 1, 3, 0, 0, 0, 0, 2, 2, 0, 2, 2 }; | ||||
|       } | ||||
|  | ||||
|       command("spellrepall") -- replaces whole words | ||||
|       check_events { | ||||
|         { "test1", "bytes", 1, 4, 1, 0, 12, 0, 5, 5, 0, 5, 5 }; | ||||
|       } | ||||
|     end) | ||||
|  | ||||
|     it('works with :diffput and :diffget', function() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user