better_fold
This commit is contained in:
parent
63a93518f2
commit
d503e3e346
41
init.lua
41
init.lua
@ -2,4 +2,43 @@ require("config.options")
|
||||
require("config.keymaps")
|
||||
require("config.lazy")
|
||||
require("custom.functions")
|
||||
-- require("custom.chatgpt")
|
||||
local viewgroup = vim.api.nvim_create_augroup("RememberFolds", { clear = true })
|
||||
|
||||
local allowed_rem_filetypes = {
|
||||
lua = true,
|
||||
python = true,
|
||||
r = true,
|
||||
bash = true,
|
||||
c = true,
|
||||
sql = true,
|
||||
["c++"] = true, -- in case filetype is "c++"
|
||||
cpp = true, -- sometimes C++ is "cpp"
|
||||
java = true,
|
||||
rust = true,
|
||||
go = true,
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWinLeave", {
|
||||
group = viewgroup,
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
-- Exclude terminal and Telescope buffers from mkview
|
||||
local ft = vim.bo.filetype:lower()
|
||||
if not allowed_rem_filetypes[ft] then
|
||||
return
|
||||
end
|
||||
vim.cmd("mkview")
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufWinEnter", {
|
||||
group = viewgroup,
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
-- Exclude terminal and Telescope buffers from loadview
|
||||
local ft = vim.bo.filetype:lower()
|
||||
if not allowed_rem_filetypes[ft] then
|
||||
return
|
||||
end
|
||||
vim.cmd("silent! loadview")
|
||||
end,
|
||||
})
|
||||
|
||||
@ -20,3 +20,9 @@ vim.keymap.set('n', 'z7', '<cmd>Telescope spell_suggest<cr>', { noremap = true,
|
||||
vim.keymap.set('n', '<F5>', ':set ignorecase!<CR>', { noremap = true, silent = true })
|
||||
vim.keymap.set('n', '<F6>',':set spell! spelllang=hu<CR>', { noremap = true, silent = true })
|
||||
vim.keymap.set('n', '<F7>',':set spell! spelllang=en<CR>', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap(
|
||||
"n",
|
||||
"<space>lf",
|
||||
"<cmd>lua require('custom.fold_telescope').jump_to_fold_starts()<CR>",
|
||||
{ noremap = true, silent = true }
|
||||
)
|
||||
|
||||
69
lua/custom/fold_telescope.lua
Normal file
69
lua/custom/fold_telescope.lua
Normal file
@ -0,0 +1,69 @@
|
||||
local pickers = require("telescope.pickers")
|
||||
local finders = require("telescope.finders")
|
||||
local conf = require("telescope.config").values
|
||||
local actions = require("telescope.actions")
|
||||
local action_state = require("telescope.actions.state")
|
||||
|
||||
-- Utility: Given a line number, returns the fold's starting line.
|
||||
local function get_fold_start(l)
|
||||
local closed = vim.fn.foldclosed(l)
|
||||
if closed ~= -1 then
|
||||
return closed
|
||||
else
|
||||
local level = vim.fn.foldlevel(l)
|
||||
if level == 0 then
|
||||
return l
|
||||
end
|
||||
local start = l
|
||||
while start > 1 and vim.fn.foldlevel(start - 1) >= level do
|
||||
start = start - 1
|
||||
end
|
||||
return start
|
||||
end
|
||||
end
|
||||
|
||||
local function jump_to_fold_starts()
|
||||
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||
local entries = {}
|
||||
local prev_level = 0
|
||||
|
||||
-- Detect fold-start lines by checking if foldlevel increases.
|
||||
for i, line in ipairs(lines) do
|
||||
local current_level = vim.fn.foldlevel(i)
|
||||
if current_level > prev_level then
|
||||
table.insert(entries, {
|
||||
value = line,
|
||||
display = string.format("%d: %s", i, line),
|
||||
ordinal = line,
|
||||
file_line = i, -- Save the actual file line number.
|
||||
})
|
||||
end
|
||||
prev_level = current_level
|
||||
end
|
||||
|
||||
pickers.new({}, {
|
||||
prompt_title = "Fold Starts",
|
||||
finder = finders.new_table {
|
||||
results = entries,
|
||||
entry_maker = function(entry)
|
||||
return entry -- Already in the expected shape.
|
||||
end,
|
||||
},
|
||||
sorter = conf.generic_sorter({}),
|
||||
attach_mappings = function(prompt_bufnr, _)
|
||||
actions.select_default:replace(function()
|
||||
actions.close(prompt_bufnr)
|
||||
local selection = action_state.get_selected_entry()
|
||||
if selection then
|
||||
local target_line = get_fold_start(selection.file_line)
|
||||
vim.cmd(string.format("normal! %dG", target_line))
|
||||
vim.cmd("normal! zv")
|
||||
end
|
||||
end)
|
||||
return true
|
||||
end,
|
||||
}):find()
|
||||
end
|
||||
|
||||
-- Expose the function so you can require it.
|
||||
return { jump_to_fold_starts = jump_to_fold_starts }
|
||||
@ -4,7 +4,6 @@ local function lines_with_preview()
|
||||
local fzf_command = string.format("call fzf#vim#grep('%s', 1, fzf#vim#with_preview({'options': '--delimiter : --nth 4.. --no-sort'}, 'up:50%%', '?'), 1)", rg_command)
|
||||
vim.cmd(fzf_command)
|
||||
end
|
||||
|
||||
function DevtoolsPath()
|
||||
local devPath = vim.fn.trim(vim.fn.system('ls ' .. vim.fn.expand("%:p:h") .. ' | grep DESCRIPTION'))
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user