From 2191d8ee016b17b5ee2a53c55e031f86badc735a Mon Sep 17 00:00:00 2001 From: max397574 Date: Sat, 6 Nov 2021 10:26:18 +0100 Subject: =?UTF-8?q?fix(utils):=20=F0=9F=90=9Bfixed=20cursor=20movement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/startup/utils.lua | 154 +++++++++++++++++++++----------------------------- 1 file changed, 65 insertions(+), 89 deletions(-) diff --git a/lua/startup/utils.lua b/lua/startup/utils.lua index acb91bd..253f08e 100644 --- a/lua/startup/utils.lua +++ b/lua/startup/utils.lua @@ -1,11 +1,20 @@ U = {} local flag = false local settings = require "startup.config" -local function start_timeout() - flag = true - vim.defer_fn(function() - flag = false - end, 150) +local new_cursor_pos +-- local startup = require"startup" + +local function set_cursor(cursor) + vim.api.nvim_win_set_cursor(0,cursor) +end + +local function bad_line() + for _, line in ipairs(require"startup".good_lines) do + if line == vim.trim(vim.api.nvim_get_current_line()) and line ~= "" then + return false + end + end + return true end -- local colors = require("startup.config").colors @@ -113,98 +122,64 @@ function U.get_oldfiles_directory(amount) return oldfiles_aligned end --- BUG: weird behavior when displaywidth != strlen -function U.reposition_cursor() - if vim.o.filetype ~= "startup" or flag then - return - end - local column = math.floor(vim.o.columns / 2) - local new_cursor_pos = vim.api.nvim_win_get_cursor(0) - if - -- current line is not empty and cursor is on correct column - -- moved straight up or down - vim.trim(vim.api.nvim_get_current_line()) - ~= "" - and new_cursor_pos[2] == column - then - start_timeout() - return - elseif - -- moved to the right - vim.trim(vim.api.nvim_get_current_line()) - ~= "" - and new_cursor_pos[2] > column - and new_cursor_pos[1] == U.cursor_pos[1] - then - if new_cursor_pos[1] == vim.api.nvim_buf_line_count(0) then - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1], column }) - start_timeout() +local column = function() + return(math.floor(vim.o.columns / 2)) +end + +local function move_up() + flag = true + set_cursor(U.cursor_pos) + local i = 1 + while true do + set_cursor({U.cursor_pos[1]-i,column()}) + if not bad_line() then + flag = false return end - local i = 1 - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] + i, column }) - while vim.trim(vim.api.nvim_get_current_line()) == "" do - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] + i, column }) - i = i + 1 - end - start_timeout() - elseif - -- moved to the left - vim.trim(vim.api.nvim_get_current_line()) - ~= "" - and new_cursor_pos[2] < column - and new_cursor_pos[1] == U.cursor_pos[1] - then - local i = 1 - if new_cursor_pos[1] == 1 then - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1], column }) - start_timeout() + i = i + 1 + if U.cursor_pos[1]-i == 1 then + set_cursor(U.cursor_pos) + flag = false return end - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] - i, column }) - while vim.trim(vim.api.nvim_get_current_line()) == "" do - if new_cursor_pos[1] - i == 1 then - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1], column }) - start_timeout() - return - end - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] - i, column }) - i = i + 1 - end - start_timeout() - elseif - -- moved up to empty line - vim.trim(vim.api.nvim_get_current_line()) - == "" - and new_cursor_pos[1] < U.cursor_pos[1] - then - if new_cursor_pos[1] == 1 then - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1], column }) - start_timeout() + end + flag = false + return +end + +local function move_down() + flag = true + set_cursor(U.cursor_pos) + local i = 1 + while true do + set_cursor({U.cursor_pos[1]+i,column()}) + if not bad_line() then + flag = false return end - local i = 1 - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] - i, column }) - while vim.trim(vim.api.nvim_get_current_line()) == "" do - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] - i, column }) - i = i + 1 - end - start_timeout() - elseif - -- moved down to empty line - vim.trim(vim.api.nvim_get_current_line()) - == "" - and new_cursor_pos[1] > U.cursor_pos[1] - then - local i = 1 - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] + i, column }) - while vim.trim(vim.api.nvim_get_current_line()) == "" do - vim.api.nvim_win_set_cursor(0, { new_cursor_pos[1] + i, column }) - i = i + 1 + i = i + 1 + if U.cursor_pos[1]+i == vim.api.nvim_buf_line_count(0) then + set_cursor(U.cursor_pos) + flag = false + return end - start_timeout() end + flag = false + return +end +function U.reposition_cursor() + if vim.o.filetype ~= "startup" or flag then + return + end + new_cursor_pos = vim.api.nvim_win_get_cursor(0) + if new_cursor_pos[1] > U.cursor_pos[1] then + move_down() + elseif (new_cursor_pos[1] < U.cursor_pos[1]) or new_cursor_pos[2] < U.cursor_pos[2] then + move_up() + elseif (new_cursor_pos[1] > U.cursor_pos[1]) or new_cursor_pos[2] > U.cursor_pos[2] then + move_down() + end U.cursor_pos = vim.api.nvim_win_get_cursor(0) end @@ -226,7 +201,8 @@ end function U.set_buf_options() vim.api.nvim_buf_set_option(0, "bufhidden", "wipe") vim.api.nvim_buf_set_option(0, "buftype", "nofile") - vim.cmd [[set nowrap]] + vim.cmd [[set wrap]] + vim.cmd [[set laststatus=0]] vim.api.nvim_buf_set_option(0, "filetype", "startup") vim.api.nvim_buf_set_option(0, "swapfile", false) vim.cmd [[setlocal nonu nornu]] -- cgit v1.2.3