From efee522aa5c5b29a19a7c07d4868130089e0fdb8 Mon Sep 17 00:00:00 2001 From: max397574 Date: Sat, 6 Nov 2021 15:30:28 +0100 Subject: =?UTF-8?q?fix(cursor):=20=F0=9F=90=9Bif=20no=20valid=20lines=20go?= =?UTF-8?q?=20to=20first/last=20valid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/startup/utils.lua | 68 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 11 deletions(-) (limited to 'lua/startup/utils.lua') diff --git a/lua/startup/utils.lua b/lua/startup/utils.lua index d4ec7ae..de686c9 100644 --- a/lua/startup/utils.lua +++ b/lua/startup/utils.lua @@ -128,19 +128,45 @@ end local function move_up() flag = true - set_cursor(U.cursor_pos) - local i = 1 + local i + if new_cursor_pos[1] < U.cursor_pos[1] then + if new_cursor_pos[1] == 1 then + set_cursor(new_cursor_pos) + i = 1 + while true do + if not bad_line() then + flag = false + return + end + set_cursor({new_cursor_pos[1]+i,column()}) + i = i + 1 + end + else + set_cursor(new_cursor_pos) + i = 0 + end + else + set_cursor(U.cursor_pos) + i = 1 + end while true do - set_cursor({U.cursor_pos[1]-i,column()}) + set_cursor({new_cursor_pos[1]-i,column()}) if not bad_line() then flag = false return end i = i + 1 - if U.cursor_pos[1]-i == 1 then - set_cursor(U.cursor_pos) - flag = false - return + if new_cursor_pos[1]-i <= 1 then + i = 1 + set_cursor({1,column()}) + while true do + if not bad_line() then + flag = false + return + end + set_cursor({new_cursor_pos[1]+i,column()}) + i = i + 1 + end end end flag = false @@ -149,16 +175,36 @@ end local function move_down() flag = true - set_cursor(U.cursor_pos) - local i = 1 + local i + if new_cursor_pos[1] > U.cursor_pos[1] then + if new_cursor_pos[1] == vim.api.nvim_buf_line_count(0) then + set_cursor(new_cursor_pos) + i = 1 + while true do + if not bad_line() then + flag = false + return + end + set_cursor({new_cursor_pos[1]-i,column()}) + i = i + 1 + end + i = 0 + else + set_cursor(new_cursor_pos) + i = 0 + end + else + set_cursor(U.cursor_pos) + i = 1 + end while true do - set_cursor({U.cursor_pos[1]+i,column()}) + set_cursor({new_cursor_pos[1]+i,column()}) if not bad_line() then flag = false return end i = i + 1 - if U.cursor_pos[1]+i == vim.api.nvim_buf_line_count(0) then + if new_cursor_pos[1]+i >= vim.api.nvim_buf_line_count(0) then set_cursor(U.cursor_pos) flag = false return -- cgit v1.2.3