mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
Compare commits
3 Commits
89ce365a9e
...
1e3b657924
Author | SHA1 | Date | |
---|---|---|---|
|
1e3b657924 | ||
|
3db3947b0e | ||
|
d952c976ba |
@ -3042,6 +3042,9 @@ vim.fs.find({names}, {opts}) *vim.fs.find()*
|
||||
• {limit}? (`number`, default: `1`) Stop the search after
|
||||
finding this many matches. Use `math.huge` to place no
|
||||
limit on the number of matches.
|
||||
• {skip}? (`fun(dir: string): boolean`) Do not traverse
|
||||
matching directories. If omitted, all directories are
|
||||
searched recursively.
|
||||
|
||||
Return: ~
|
||||
(`string[]`) Normalized paths |vim.fs.normalize()| of all matching
|
||||
|
@ -202,6 +202,10 @@ end
|
||||
--- Use `math.huge` to place no limit on the number of matches.
|
||||
--- (default: `1`)
|
||||
--- @field limit? number
|
||||
---
|
||||
--- Do not traverse matching directories.
|
||||
--- If omitted, all directories are searched recursively.
|
||||
--- @field skip? (fun(dir: string): boolean)
|
||||
|
||||
--- Find files or directories (or other items as specified by `opts.type`) in the given path.
|
||||
---
|
||||
@ -247,6 +251,7 @@ function M.find(names, opts)
|
||||
vim.validate('stop', opts.stop, 'string', true)
|
||||
vim.validate('type', opts.type, 'string', true)
|
||||
vim.validate('limit', opts.limit, 'number', true)
|
||||
vim.validate('skip', opts.skip, 'function', true)
|
||||
|
||||
if type(names) == 'string' then
|
||||
names = { names }
|
||||
@ -336,7 +341,7 @@ function M.find(names, opts)
|
||||
end
|
||||
end
|
||||
|
||||
if type_ == 'directory' then
|
||||
if (type_ == 'directory') and (not opts.skip or opts.skip(f) ~= false) then
|
||||
dirs[#dirs + 1] = f
|
||||
end
|
||||
end
|
||||
|
@ -641,9 +641,6 @@ bool terminal_enter(void)
|
||||
curwin->w_p_so = 0;
|
||||
curwin->w_p_siso = 0;
|
||||
|
||||
// Save the existing cursor entry since it may be modified by the application
|
||||
cursorentry_T save_cursorentry = shape_table[SHAPE_IDX_TERM];
|
||||
|
||||
// Update the cursor shape table and flush changes to the UI
|
||||
s->term->pending.cursor = true;
|
||||
refresh_cursor(s->term);
|
||||
@ -674,8 +671,8 @@ bool terminal_enter(void)
|
||||
RedrawingDisabled = s->save_rd;
|
||||
apply_autocmds(EVENT_TERMLEAVE, NULL, NULL, false, curbuf);
|
||||
|
||||
shape_table[SHAPE_IDX_TERM] = save_cursorentry;
|
||||
ui_mode_info_set();
|
||||
// Restore the terminal cursor to what is set in 'guicursor'
|
||||
(void)parse_shape_opt(SHAPE_CURSOR);
|
||||
|
||||
if (save_curwin == curwin->handle) { // Else: window was closed.
|
||||
curwin->w_p_cul = save_w_p_cul;
|
||||
|
@ -224,6 +224,17 @@ describe('vim.fs', function()
|
||||
)
|
||||
eq({ nvim_prog }, vim.fs.find(nvim_prog_basename, { path = test_build_dir, type = 'file' }))
|
||||
|
||||
eq(
|
||||
{},
|
||||
vim.fs.find(nvim_prog_basename, {
|
||||
path = vim.fs.dirname(test_build_dir),
|
||||
type = 'file',
|
||||
skip = function(dir)
|
||||
return not (vim.fs.basename(dir):match('^build'))
|
||||
end,
|
||||
})
|
||||
)
|
||||
|
||||
local parent, name = nvim_dir:match('^(.*/)([^/]+)$')
|
||||
eq({ nvim_dir }, vim.fs.find(name, { path = parent, upward = true, type = 'directory' }))
|
||||
end)
|
||||
|
@ -15,9 +15,20 @@ local skip = t.skip
|
||||
describe(':terminal cursor', function()
|
||||
local screen
|
||||
|
||||
local terminal_mode_idx ---@type number
|
||||
|
||||
before_each(function()
|
||||
clear()
|
||||
screen = tt.setup_screen()
|
||||
|
||||
if terminal_mode_idx == nil then
|
||||
for i, v in ipairs(screen._mode_info) do
|
||||
if v.name == 'terminal' then
|
||||
terminal_mode_idx = i
|
||||
end
|
||||
end
|
||||
assert(terminal_mode_idx)
|
||||
end
|
||||
end)
|
||||
|
||||
it('moves the screen cursor when focused', function()
|
||||
@ -143,13 +154,6 @@ describe(':terminal cursor', function()
|
||||
|
||||
it('can be modified by application #3681', function()
|
||||
skip(is_os('win'), '#31587')
|
||||
local idx ---@type number
|
||||
for i, v in ipairs(screen._mode_info) do
|
||||
if v.name == 'terminal' then
|
||||
idx = i
|
||||
end
|
||||
end
|
||||
assert(idx)
|
||||
|
||||
local states = {
|
||||
[1] = { blink = true, shape = 'block' },
|
||||
@ -171,13 +175,13 @@ describe(':terminal cursor', function()
|
||||
]],
|
||||
condition = function()
|
||||
if v.blink then
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
else
|
||||
eq(0, screen._mode_info[idx].blinkon)
|
||||
eq(0, screen._mode_info[idx].blinkoff)
|
||||
eq(0, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(0, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
end
|
||||
eq(v.shape, screen._mode_info[idx].cursor_shape)
|
||||
eq(v.shape, screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
end
|
||||
@ -191,20 +195,13 @@ describe(':terminal cursor', function()
|
||||
]])
|
||||
|
||||
-- Cursor returns to default on TermLeave
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq('block', screen._mode_info[idx].cursor_shape)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('block', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end)
|
||||
|
||||
it('can be modified per terminal', function()
|
||||
skip(is_os('win'), '#31587')
|
||||
local idx ---@type number
|
||||
for i, v in ipairs(screen._mode_info) do
|
||||
if v.name == 'terminal' then
|
||||
idx = i
|
||||
end
|
||||
end
|
||||
assert(idx)
|
||||
|
||||
-- Set cursor to vertical bar with blink
|
||||
tt.feed_csi('5 q')
|
||||
@ -216,9 +213,9 @@ describe(':terminal cursor', function()
|
||||
{3:-- TERMINAL --} |
|
||||
]],
|
||||
condition = function()
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[idx].cursor_shape)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
|
||||
@ -231,9 +228,9 @@ describe(':terminal cursor', function()
|
||||
{3:-- TERMINAL --} |
|
||||
]],
|
||||
condition = function()
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[idx].cursor_shape)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
|
||||
@ -256,9 +253,9 @@ describe(':terminal cursor', function()
|
||||
]],
|
||||
condition = function()
|
||||
-- New terminal, cursor resets to defaults
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq('block', screen._mode_info[idx].cursor_shape)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('block', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
|
||||
@ -275,9 +272,9 @@ describe(':terminal cursor', function()
|
||||
{3:-- TERMINAL --} |
|
||||
]],
|
||||
condition = function()
|
||||
eq(0, screen._mode_info[idx].blinkon)
|
||||
eq(0, screen._mode_info[idx].blinkoff)
|
||||
eq('horizontal', screen._mode_info[idx].cursor_shape)
|
||||
eq(0, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(0, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('horizontal', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
|
||||
@ -294,9 +291,9 @@ describe(':terminal cursor', function()
|
||||
{3:-- TERMINAL --} |
|
||||
]],
|
||||
condition = function()
|
||||
eq(500, screen._mode_info[idx].blinkon)
|
||||
eq(500, screen._mode_info[idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[idx].cursor_shape)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkon)
|
||||
eq(500, screen._mode_info[terminal_mode_idx].blinkoff)
|
||||
eq('vertical', screen._mode_info[terminal_mode_idx].cursor_shape)
|
||||
end,
|
||||
})
|
||||
end)
|
||||
@ -326,6 +323,32 @@ describe(':terminal cursor', function()
|
||||
{3:-- TERMINAL --} |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('preserves guicursor value on TermLeave #31612', function()
|
||||
eq(3, screen._mode_info[terminal_mode_idx].hl_id)
|
||||
|
||||
-- Change 'guicursor' while terminal mode is active
|
||||
command('set guicursor+=t:Error')
|
||||
|
||||
local error_hl_id = call('hlID', 'Error')
|
||||
|
||||
screen:expect({
|
||||
condition = function()
|
||||
eq(error_hl_id, screen._mode_info[terminal_mode_idx].hl_id)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Exit terminal mode
|
||||
feed([[<C-\><C-N>]])
|
||||
|
||||
screen:expect([[
|
||||
tty ready |
|
||||
^ |
|
||||
|*5
|
||||
]])
|
||||
|
||||
eq(error_hl_id, screen._mode_info[terminal_mode_idx].hl_id)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('buffer cursor position is correct in terminal without number column', function()
|
||||
|
Loading…
Reference in New Issue
Block a user