aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormax397574 <[email protected]>2021-11-06 10:26:18 +0100
committermax397574 <[email protected]>2021-11-06 10:26:18 +0100
commit2191d8ee016b17b5ee2a53c55e031f86badc735a (patch)
tree07d8adfff562d427cd23fcdb7347040add27612c
parentfb7c3aa00d355b6408f09d1a88c8b5850a3c5b7c (diff)
fix(utils): 🐛fixed cursor movement
-rw-r--r--lua/startup/utils.lua154
1 files 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]]