mirror of
https://github.com/neovim/neovim.git
synced 2024-12-21 11:45:01 -07:00
commit
b0769729c8
@ -6505,7 +6505,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
>= 12 Every executed function.
|
||||
>= 13 When an exception is thrown, caught, finished, or discarded.
|
||||
>= 14 Anything pending in a ":finally" clause.
|
||||
>= 15 Every executed Ex command (truncated at 200 characters).
|
||||
>= 15 Every executed Ex command from a script (truncated at 200
|
||||
characters).
|
||||
>= 16 Every executed Ex command
|
||||
|
||||
This option can also be set with the "-V" argument. See |-V|.
|
||||
This option is also set by the |:verbose| command.
|
||||
|
@ -313,7 +313,7 @@ au BufNewFile,BufRead *.css setf css
|
||||
au BufNewFile,BufRead *.con setf cterm
|
||||
|
||||
" Changelog
|
||||
au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch
|
||||
au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch,*/debian/changelog
|
||||
\ setf debchangelog
|
||||
|
||||
au BufNewFile,BufRead [cC]hange[lL]og
|
||||
|
@ -2,12 +2,19 @@
|
||||
" Language: resolver configuration file
|
||||
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
|
||||
" URL: https://raw.github.com/rid9/vim-resolv/master/resolv.vim
|
||||
" Last Change: 2013 May 21
|
||||
" Version: 1.0
|
||||
" Last Change: 2020 Mar 10
|
||||
" Version: 1.4
|
||||
"
|
||||
" Credits:
|
||||
" David Necas (Yeti) <yeti@physics.muni.cz>
|
||||
" Stefano Zacchiroli <zack@debian.org>
|
||||
" DJ Lucas <dj@linuxfromscratch.org>
|
||||
"
|
||||
" Changelog:
|
||||
" - 1.4: Added IPv6 support for sortlist.
|
||||
" - 1.3: Added IPv6 support for IPv4 dot-decimal notation.
|
||||
" - 1.2: Added new options.
|
||||
" - 1.1: Added IPv6 support.
|
||||
|
||||
" quit when a syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@ -29,11 +36,47 @@ syn match resolvIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@resolvIPClu
|
||||
syn match resolvIPNetmask contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?/ contains=resolvOperator,@resolvIPCluster
|
||||
syn match resolvHostname contained /\w\{-}\.[-0-9A-Za-z_\.]*/
|
||||
|
||||
" Particular
|
||||
" Nameserver IPv4
|
||||
syn match resolvIPNameserver contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\s\|$\)\)\+/ contains=@resolvIPCluster
|
||||
|
||||
" Nameserver IPv6
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{6}\%(\x\{1,4}:\x\{1,4}\)\>/
|
||||
syn match resolvIPNameserver contained /\s\@<=::\%(\x\{1,4}:\)\{,6}\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\s\@<=::\%(\x\{1,4}:\)\{,5}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,5}\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,4}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,4}\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,3}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,3}\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,2}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,2}\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,1}\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{5}:\%(\d\{1,4}\.\)\{3}\d\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{6}:\x\{1,4}\>/
|
||||
syn match resolvIPNameserver contained /\<\%(\x\{1,4}:\)\{1,7}:\%(\s\|;\|$\)\@=/
|
||||
|
||||
" Search hostname
|
||||
syn match resolvHostnameSearch contained /\%(\%([-0-9A-Za-z_]\+\.\)*[-0-9A-Za-z_]\+\.\?\%(\s\|$\)\)\+/
|
||||
|
||||
" Sortlist IPv4
|
||||
syn match resolvIPNetmaskSortList contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?\%(\s\|$\)\)\+/ contains=resolvOperator,@resolvIPCluster
|
||||
|
||||
" Sortlist IPv6
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{6}\%(\x\{1,4}:\x\{1,4}\)\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\s\@<=::\%(\x\{1,4}:\)\{,6}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\s\@<=::\%(\x\{1,4}:\)\{,5}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,5}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1}:\%(\x\{1,4}:\)\{,4}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,4}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{2}:\%(\x\{1,4}:\)\{,3}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,3}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{3}:\%(\x\{1,4}:\)\{,2}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,2}\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{4}:\%(\x\{1,4}:\)\{,1}\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{5}:\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{6}:\x\{1,4}\%(\/\d\{1,3}\)\?\>/
|
||||
syn match resolvIPNetmaskSortList contained /\<\%(\x\{1,4}:\)\{1,7}:\%(\s\|;\|$\)\@=\%(\/\d\{1,3}\)\?/
|
||||
|
||||
" Identifiers
|
||||
syn match resolvNameserver /^\s*nameserver\>/ nextgroup=resolvIPNameserver skipwhite
|
||||
syn match resolvLwserver /^\s*lwserver\>/ nextgroup=resolvIPNameserver skipwhite
|
||||
@ -43,13 +86,12 @@ syn match resolvSortList /^\s*sortlist\>/ nextgroup=resolvIPNetmaskSortList skip
|
||||
syn match resolvOptions /^\s*options\>/ nextgroup=resolvOption skipwhite
|
||||
|
||||
" Options
|
||||
syn match resolvOption /\<\%(debug\|no_tld_query\|rotate\|no-check-names\|inet6\)\>/ contained nextgroup=resolvOption skipwhite
|
||||
syn match resolvOption /\<\%(debug\|no_tld_query\|no-tld-query\|rotate\|no-check-names\|inet6\|ip6-bytestring\|\%(no-\)\?ip6-dotint\|edns0\|single-request\%(-reopen\)\?\|use-vc\)\>/ contained nextgroup=resolvOption skipwhite
|
||||
syn match resolvOption /\<\%(ndots\|timeout\|attempts\):\d\+\>/ contained contains=resolvOperator nextgroup=resolvOption skipwhite
|
||||
|
||||
" Additional errors
|
||||
syn match resolvError /^search .\{257,}/
|
||||
|
||||
|
||||
hi def link resolvIP Number
|
||||
hi def link resolvIPNetmask Number
|
||||
hi def link resolvHostname String
|
||||
@ -72,7 +114,6 @@ hi def link resolvError Error
|
||||
hi def link resolvIPError Error
|
||||
hi def link resolvIPSpecial Special
|
||||
|
||||
|
||||
let b:current_syntax = "resolv"
|
||||
|
||||
" vim: ts=8 ft=vim
|
||||
|
@ -1420,7 +1420,7 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id,
|
||||
}
|
||||
|
||||
id = extmark_set(buf, (uint64_t)ns_id, id,
|
||||
(int)line, (colnr_T)col, line2, col2, decor, kExtmarkUndo);
|
||||
(int)line, (colnr_T)col, line2, col2, decor, kExtmarkNoUndo);
|
||||
|
||||
return (Integer)id;
|
||||
|
||||
@ -1534,7 +1534,7 @@ Integer nvim_buf_add_highlight(Buffer buffer,
|
||||
ns_id = extmark_set(buf, ns_id, 0,
|
||||
(int)line, (colnr_T)col_start,
|
||||
end_line, (colnr_T)col_end,
|
||||
decoration_hl(hl_id), kExtmarkUndo);
|
||||
decoration_hl(hl_id), kExtmarkNoUndo);
|
||||
return src_id;
|
||||
}
|
||||
|
||||
@ -1664,7 +1664,7 @@ Integer nvim_buf_set_virtual_text(Buffer buffer,
|
||||
Decoration *decor = xcalloc(1, sizeof(*decor));
|
||||
decor->virt_text = virt_text;
|
||||
|
||||
extmark_set(buf, ns_id, 0, (int)line, 0, -1, -1, decor, kExtmarkUndo);
|
||||
extmark_set(buf, ns_id, 0, (int)line, 0, -1, -1, decor, kExtmarkNoUndo);
|
||||
return src_id;
|
||||
}
|
||||
|
||||
|
@ -258,6 +258,27 @@ void do_exmode(int improved)
|
||||
msg_scroll = save_msg_scroll;
|
||||
}
|
||||
|
||||
// Print the executed command for when 'verbose' is set.
|
||||
// When "lnum" is 0 only print the command.
|
||||
static void msg_verbose_cmd(linenr_T lnum, char_u *cmd)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
no_wait_return++;
|
||||
verbose_enter_scroll();
|
||||
|
||||
if (lnum == 0) {
|
||||
smsg(_("Executing: %s"), cmd);
|
||||
} else {
|
||||
smsg(_("line %" PRIdLINENR ": %s"), lnum, cmd);
|
||||
}
|
||||
if (msg_silent == 0) {
|
||||
msg_puts("\n"); // don't overwrite this
|
||||
}
|
||||
|
||||
verbose_leave_scroll();
|
||||
no_wait_return--;
|
||||
}
|
||||
|
||||
/*
|
||||
* Execute a simple command line. Used for translated commands like "*".
|
||||
*/
|
||||
@ -567,17 +588,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
|
||||
}
|
||||
}
|
||||
|
||||
if (p_verbose >= 15 && sourcing_name != NULL) {
|
||||
++no_wait_return;
|
||||
verbose_enter_scroll();
|
||||
|
||||
smsg(_("line %" PRIdLINENR ": %s"), sourcing_lnum, cmdline_copy);
|
||||
if (msg_silent == 0) {
|
||||
msg_puts("\n"); // don't overwrite this either
|
||||
}
|
||||
|
||||
verbose_leave_scroll();
|
||||
--no_wait_return;
|
||||
if ((p_verbose >= 15 && sourcing_name != NULL) || p_verbose >= 16) {
|
||||
msg_verbose_cmd(sourcing_lnum, cmdline_copy);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -783,7 +783,7 @@ void bufhl_add_hl_pos_offset(buf_T *buf,
|
||||
}
|
||||
(void)extmark_set(buf, (uint64_t)src_id, 0,
|
||||
(int)lnum-1, hl_start, (int)lnum-1+end_off, hl_end,
|
||||
decor, kExtmarkUndo);
|
||||
decor, kExtmarkNoUndo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2822,6 +2822,16 @@ win_line (
|
||||
n_extra = wp->w_p_rl ? (col + 1) : (grid->Columns - col);
|
||||
}
|
||||
|
||||
if (draw_state == WL_LINE
|
||||
&& foldinfo.fi_level != 0
|
||||
&& foldinfo.fi_lines > 0
|
||||
&& col >= grid->Columns
|
||||
&& n_extra != 0
|
||||
&& row == startrow) {
|
||||
// Truncate the folding.
|
||||
n_extra = 0;
|
||||
}
|
||||
|
||||
if (draw_state == WL_LINE && (area_highlighting || has_spell)) {
|
||||
// handle Visual or match highlighting in this line
|
||||
if (vcol == fromcol
|
||||
|
@ -651,6 +651,10 @@ int searchit(
|
||||
colnr_T col = at_first_line && (options & SEARCH_COL) ? pos->col : 0;
|
||||
nmatched = vim_regexec_multi(®match, win, buf,
|
||||
lnum, col, tm, timed_out);
|
||||
// vim_regexec_multi() may clear "regprog"
|
||||
if (regmatch.regprog == NULL) {
|
||||
break;
|
||||
}
|
||||
// Abort searching on an error (e.g., out of stack).
|
||||
if (called_emsg || (timed_out != NULL && *timed_out)) {
|
||||
break;
|
||||
@ -722,6 +726,10 @@ int searchit(
|
||||
match_ok = false;
|
||||
break;
|
||||
}
|
||||
// vim_regexec_multi() may clear "regprog"
|
||||
if (regmatch.regprog == NULL) {
|
||||
break;
|
||||
}
|
||||
matchpos = regmatch.startpos[0];
|
||||
endpos = regmatch.endpos[0];
|
||||
submatch = first_submatch(®match);
|
||||
@ -811,10 +819,13 @@ int searchit(
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Need to get the line pointer again, a
|
||||
* multi-line search may have made it invalid. */
|
||||
ptr = ml_get_buf(buf, lnum + matchpos.lnum, FALSE);
|
||||
// vim_regexec_multi() may clear "regprog"
|
||||
if (regmatch.regprog == NULL) {
|
||||
break;
|
||||
}
|
||||
// Need to get the line pointer again, a
|
||||
// multi-line search may have made it invalid.
|
||||
ptr = ml_get_buf(buf, lnum + matchpos.lnum, false);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -891,6 +902,11 @@ int searchit(
|
||||
}
|
||||
at_first_line = FALSE;
|
||||
|
||||
// vim_regexec_multi() may clear "regprog"
|
||||
if (regmatch.regprog == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Stop the search if wrapscan isn't set, "stop_lnum" is
|
||||
// specified, after an interrupt, after a match and after looping
|
||||
// twice.
|
||||
@ -4243,7 +4259,8 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, Direction direction)
|
||||
if (nmatched != 0) {
|
||||
break;
|
||||
}
|
||||
} while (direction == FORWARD
|
||||
} while (regmatch.regprog != NULL
|
||||
&& direction == FORWARD
|
||||
? regmatch.startpos[0].col < pos.col
|
||||
: regmatch.startpos[0].col > pos.col);
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
" Tests for editing the command line.
|
||||
|
||||
source check.vim
|
||||
source screendump.vim
|
||||
|
||||
func Test_complete_tab()
|
||||
call writefile(['testfile'], 'Xtestfile')
|
||||
call feedkeys(":e Xtestf\t\r", "tx")
|
||||
@ -718,6 +721,27 @@ func Test_verbosefile()
|
||||
call delete('Xlog')
|
||||
endfunc
|
||||
|
||||
func Test_verbose_option()
|
||||
" See test/functional/ui/cmdline_spec.lua
|
||||
CheckScreendump
|
||||
|
||||
let lines =<< trim [SCRIPT]
|
||||
command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v
|
||||
call feedkeys("\r", 't') " for the hit-enter prompt
|
||||
set verbose=20
|
||||
[SCRIPT]
|
||||
call writefile(lines, 'XTest_verbose')
|
||||
|
||||
let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12})
|
||||
call term_wait(buf, 100)
|
||||
call term_sendkeys(buf, ":DoSomething\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_verbose_option_1', {})
|
||||
|
||||
" clean up
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XTest_verbose')
|
||||
endfunc
|
||||
|
||||
func Test_setcmdpos()
|
||||
func InsertTextAtPos(text, pos)
|
||||
call assert_equal(0, setcmdpos(a:pos))
|
||||
|
@ -128,6 +128,7 @@ let s:filename_checks = {
|
||||
\ 'dart': ['file.dart', 'file.drt'],
|
||||
\ 'datascript': ['file.ds'],
|
||||
\ 'dcd': ['file.dcd'],
|
||||
\ 'debchangelog': ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'],
|
||||
\ 'debcontrol': ['/debian/control'],
|
||||
\ 'debsources': ['/etc/apt/sources.list', '/etc/apt/sources.list.d/file.list'],
|
||||
\ 'def': ['file.def'],
|
||||
|
@ -981,6 +981,21 @@ func Test_incsearch_substitute()
|
||||
call Incsearch_cleanup()
|
||||
endfunc
|
||||
|
||||
func Test_incsearch_substitute_long_line()
|
||||
throw 'skipped: Nvim does not support test_override()'
|
||||
new
|
||||
call test_override("char_avail", 1)
|
||||
set incsearch
|
||||
|
||||
call repeat('x', 100000)->setline(1)
|
||||
call feedkeys(':s/\%c', 'xt')
|
||||
redraw
|
||||
call feedkeys("\<Esc>", 'xt')
|
||||
|
||||
call Incsearch_cleanup()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_search_undefined_behaviour()
|
||||
if !has("terminal")
|
||||
return
|
||||
|
@ -412,3 +412,22 @@ func Test_statusline_removed_group()
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XTest_statusline')
|
||||
endfunc
|
||||
|
||||
func Test_statusline_after_split_vsplit()
|
||||
only
|
||||
|
||||
" Make the status line of each window show the window number.
|
||||
set ls=2 stl=%{winnr()}
|
||||
|
||||
split | redraw
|
||||
vsplit | redraw
|
||||
|
||||
" The status line of the third window should read '3' here.
|
||||
call assert_equal('3', nr2char(screenchar(&lines - 1, 1)))
|
||||
|
||||
only
|
||||
set ls& stl&
|
||||
endfunc
|
||||
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@ -1,5 +1,8 @@
|
||||
" Tests for tagjump (tags and special searches)
|
||||
|
||||
source check.vim
|
||||
source screendump.vim
|
||||
|
||||
" SEGV occurs in older versions. (At least 7.4.1748 or older)
|
||||
func Test_ptag_with_notagstack()
|
||||
set notagstack
|
||||
@ -551,6 +554,37 @@ func Test_tag_line_toolong()
|
||||
let &verbose = old_vbs
|
||||
endfunc
|
||||
|
||||
" Check that using :tselect does not run into the hit-enter prompt.
|
||||
" Requires a terminal to trigger that prompt.
|
||||
func Test_tselect()
|
||||
CheckScreendump
|
||||
|
||||
call writefile([
|
||||
\ 'main Xtest.h /^void test();$/;" f',
|
||||
\ 'main Xtest.c /^int main()$/;" f',
|
||||
\ 'main Xtest.x /^void test()$/;" f',
|
||||
\ ], 'Xtags')
|
||||
cal writefile([
|
||||
\ 'int main()',
|
||||
\ 'void test()',
|
||||
\ ], 'Xtest.c')
|
||||
|
||||
let lines =<< trim [SCRIPT]
|
||||
set tags=Xtags
|
||||
[SCRIPT]
|
||||
call writefile(lines, 'XTest_tselect')
|
||||
let buf = RunVimInTerminal('-S XTest_tselect', {'rows': 10, 'cols': 50})
|
||||
|
||||
call term_wait(buf, 100)
|
||||
call term_sendkeys(buf, ":tselect main\<CR>2\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_tselect_1', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xtags')
|
||||
call delete('Xtest.c')
|
||||
call delete('XTest_tselect')
|
||||
endfunc
|
||||
|
||||
func Test_tagline()
|
||||
call writefile([
|
||||
\ 'provision Xtest.py /^ def provision(self, **kwargs):$/;" m line:1 language:Python class:Foo',
|
||||
|
@ -3029,8 +3029,6 @@ u_header_T *u_force_get_undo_header(buf_T *buf)
|
||||
curbuf = buf;
|
||||
// Args are tricky: this means replace empty range by empty range..
|
||||
u_savecommon(0, 1, 1, true);
|
||||
curbuf = save_curbuf;
|
||||
|
||||
uhp = buf->b_u_curhead;
|
||||
if (!uhp) {
|
||||
uhp = buf->b_u_newhead;
|
||||
@ -3038,6 +3036,7 @@ u_header_T *u_force_get_undo_header(buf_T *buf)
|
||||
abort();
|
||||
}
|
||||
}
|
||||
curbuf = save_curbuf;
|
||||
}
|
||||
return uhp;
|
||||
}
|
||||
|
@ -1490,13 +1490,11 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir)
|
||||
if (flags & (WSP_TOP | WSP_BOT))
|
||||
(void)win_comp_pos();
|
||||
|
||||
/*
|
||||
* Both windows need redrawing
|
||||
*/
|
||||
// Both windows need redrawing. Update all status lines, in case they
|
||||
// show something related to the window count or position.
|
||||
redraw_win_later(wp, NOT_VALID);
|
||||
wp->w_redr_status = TRUE;
|
||||
redraw_win_later(oldwin, NOT_VALID);
|
||||
oldwin->w_redr_status = TRUE;
|
||||
status_redraw_all();
|
||||
|
||||
if (need_status) {
|
||||
msg_row = Rows - 1;
|
||||
|
@ -7,6 +7,7 @@ local meths = helpers.meths
|
||||
local funcs = helpers.funcs
|
||||
local pcall_err = helpers.pcall_err
|
||||
local ok = helpers.ok
|
||||
local assert_alive = helpers.assert_alive
|
||||
|
||||
describe('API: highlight',function()
|
||||
local expected_rgb = {
|
||||
@ -145,4 +146,15 @@ describe('API: highlight',function()
|
||||
eq({foreground=tonumber("0x888888"), background=tonumber("0x888888")},
|
||||
meths.get_hl_by_name("Shrubbery", true))
|
||||
end)
|
||||
|
||||
it("nvim_buf_add_highlight to other buffer doesn't crash if undo is disabled #12873", function()
|
||||
command('vsplit file')
|
||||
local err, _ = pcall(meths.buf_set_option, 1, 'undofile', false)
|
||||
eq(true, err)
|
||||
err, _ = pcall(meths.buf_set_option, 1, 'undolevels', -1)
|
||||
eq(true, err)
|
||||
err, _ = pcall(meths.buf_add_highlight, 1, -1, 'Question', 0, 0, -1)
|
||||
eq(true, err)
|
||||
assert_alive()
|
||||
end)
|
||||
end)
|
||||
|
@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen')
|
||||
local clear, feed = helpers.clear, helpers.feed
|
||||
local source = helpers.source
|
||||
local command = helpers.command
|
||||
local feed_command = helpers.feed_command
|
||||
|
||||
local function new_screen(opt)
|
||||
local screen = Screen.new(25, 5)
|
||||
@ -842,3 +843,34 @@ describe('cmdline redraw', function()
|
||||
]], unchanged=true}
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('cmdline', function()
|
||||
before_each(function()
|
||||
clear()
|
||||
end)
|
||||
|
||||
it('prints every executed Ex command if verbose >= 16', function()
|
||||
local screen = Screen.new(50, 12)
|
||||
screen:attach()
|
||||
source([[
|
||||
command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v
|
||||
call feedkeys("\r", 't') " for the hit-enter prompt
|
||||
set verbose=20
|
||||
]])
|
||||
feed_command('DoSomething')
|
||||
screen:expect([[
|
||||
|
|
||||
~ |
|
||||
|
|
||||
Executing: DoSomething |
|
||||
Executing: echo 'hello' |set ts=4 |let v = '123' ||
|
||||
echo v |
|
||||
hello |
|
||||
Executing: set ts=4 |let v = '123' |echo v |
|
||||
Executing: let v = '123' |echo v |
|
||||
Executing: echo v |
|
||||
123 |
|
||||
Press ENTER or type command to continue^ |
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
@ -6,6 +6,8 @@ local feed_command = helpers.feed_command
|
||||
local insert = helpers.insert
|
||||
local funcs = helpers.funcs
|
||||
local meths = helpers.meths
|
||||
local source = helpers.source
|
||||
local assert_alive = helpers.assert_alive
|
||||
|
||||
describe("folded lines", function()
|
||||
local screen
|
||||
@ -357,4 +359,26 @@ describe("folded lines", function()
|
||||
|
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('does not crash when foldtext is longer than columns #12988', function()
|
||||
source([[
|
||||
function! MyFoldText() abort
|
||||
return repeat('-', &columns + 100)
|
||||
endfunction
|
||||
]])
|
||||
command('set foldtext=MyFoldText()')
|
||||
feed("i<cr><esc>")
|
||||
feed("vkzf")
|
||||
screen:expect{grid=[[
|
||||
{5:^---------------------------------------------}|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
assert_alive()
|
||||
end)
|
||||
end)
|
||||
|
@ -2750,6 +2750,26 @@ it(':substitute with inccommand, timer-induced :redraw #9777', function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it(":substitute doesn't crash with inccommand, if undo is empty #12932", function()
|
||||
local screen = Screen.new(10,5)
|
||||
clear()
|
||||
command('set undolevels=-1')
|
||||
common_setup(screen, 'split', 'test')
|
||||
feed(':%s/test')
|
||||
sleep(100)
|
||||
feed('/')
|
||||
sleep(100)
|
||||
feed('f')
|
||||
screen:expect([[
|
||||
{12:f} |
|
||||
{15:~ }|
|
||||
{15:~ }|
|
||||
{15:~ }|
|
||||
:%s/test/f^ |
|
||||
]])
|
||||
assert_alive()
|
||||
end)
|
||||
|
||||
it('long :%s/ with inccommand does not collapse cmdline', function()
|
||||
local screen = Screen.new(10,5)
|
||||
clear()
|
||||
|
Loading…
Reference in New Issue
Block a user