mirror of
https://github.com/mistricky/codesnap.nvim.git
synced 2024-12-31 22:17:29 -08:00
08f0b24cf4
* [Update] apply template * [Feat] update assets files (#35) * [Update] README add packer install config * [Feat] take snapshot via skia engine * [Feat] title component * [Feat] add watermark * [Feat] update padding of code panel * [Remove] pack ci script * [Release] v1.0.0 * [Update] apply template * [Chore] remove unused code * [Update] readme * [Release] v1.0.1 * [Update] apply template * [Update] readme * Update README.md * [Feat] compile nvim-0.9 FFI * [Release] v1.0.2 * [Update] apply template * [Update] README.md * [Feat] add multi platform support * [Feat] add workflow for build target binary package * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Update] files based on generated files by template generator * [Feat] build plugin after released * [Delete] build.yml * [Update] README * [Release] v1.0.3 * [Update] README * [Refactor] editor frame size calculation logic * [Refactor] update margin of watermark * [Feat] preset font family * [Refactor] update component interface * [Update] change theme to onedark * [Refactor] redefine render_error and throw it to lua scope * [Perf] build script * [Refactor] abstract component concept & implement it for all widgets * [Update] README.md --------- Co-authored-by: mistricky <mistricky@users.noreply.github.com>
58 lines
1.8 KiB
Lua
58 lines
1.8 KiB
Lua
local visual_utils = {}
|
|
|
|
-- Get all the lines from "from" to "to" and return them as a single string
|
|
-- If "from" and "to" are the same, return the line at "from"
|
|
|
|
local function get_whole_lines(from, to)
|
|
local lines = {}
|
|
if from == to then
|
|
table.insert(lines, vim.api.nvim_buf_get_lines(0, from - 1, from, false)[1])
|
|
else
|
|
for i = from, to do
|
|
table.insert(lines, vim.api.nvim_buf_get_lines(0, i - 1, i, false)[1])
|
|
end
|
|
end
|
|
return table.concat(lines, "\n")
|
|
end
|
|
|
|
function visual_utils.get_selected_text()
|
|
local selected_text = vim.fn.getline("'<", "'>")
|
|
|
|
return table.concat(selected_text, "\n")
|
|
end
|
|
|
|
function visual_utils.get_selected_text_realtime()
|
|
local start_pos = vim.fn.getpos("v")
|
|
local end_pos = vim.fn.getpos(".")
|
|
|
|
-- We switch the start and end positions if the start is after the end line or character
|
|
-- This way we can always select from the top down and from left to right
|
|
if start_pos[2] > end_pos[2] or start_pos[3] > end_pos[3] then
|
|
start_pos, end_pos = end_pos, start_pos
|
|
end
|
|
|
|
if vim.api.nvim_get_mode().mode == "V" then
|
|
return get_whole_lines(start_pos[2], end_pos[2])
|
|
end
|
|
|
|
if start_pos[2] == end_pos[2] then
|
|
return vim.api.nvim_buf_get_lines(0, start_pos[2] - 1, start_pos[2], false)[1]:sub(start_pos[3], end_pos[3] - 1)
|
|
end
|
|
|
|
local selected_text = {}
|
|
for i = start_pos[2], end_pos[2] do
|
|
local line_text = vim.api.nvim_buf_get_lines(0, i - 1, i, false)[1]
|
|
if i == start_pos[2] then
|
|
line_text = line_text:sub(start_pos[3])
|
|
end
|
|
-- If select last line, there need to get column of current cursor
|
|
if i == end_pos[2] then
|
|
line_text = line_text:sub(1, end_pos[3] - 1)
|
|
end
|
|
table.insert(selected_text, line_text)
|
|
end
|
|
|
|
return table.concat(selected_text, "\n")
|
|
end
|
|
|
|
return visual_utils
|