This commit is contained in:
2025-08-08 23:51:52 +02:00
parent f5657d958d
commit 197beff627
6 changed files with 162 additions and 50 deletions

View File

@@ -2,13 +2,13 @@
--
local wk = require 'which-key'
local neotree_utils = require 'custom.plugins.neotree'
local neotree_helper = require 'custom.plugins.neotree-helper'
local bufremove = require 'mini.bufremove'
wk.add {
mode = { 'n', 'v' },
{ '<leader>F', group = 'Fichier' }, -- group
{ '<leader>Fe', neotree_utils.smart_open, desc = 'Parcourir fichiers' },
{ '<leader>Fe', neotree_helper.smart_open, desc = 'Parcourir fichiers' },
{ '<leader>Fc', bufremove.delete, desc = 'Fermer buffer', silent = true },
{ '<leader>Fr', '<CMD>source %<CR>', desc = 'Recharger buffer', silent = true },
{ '<leader>Fs', '<CMD>w<CR>', desc = 'Sauver buffer', silent = true },
@@ -19,7 +19,7 @@ wk.add {
{ '<F5>', '<CMD>source %<CR>', desc = 'Recharger buffer', silent = true, hidden = true },
{ '<C-s>', '<CMD>w<CR>', desc = 'Sauver buffer', silent = true, hidden = true },
{ '<C-c>', bufremove.delete, desc = 'Fermer buffer', silent = true, hidden = true },
{ '<C-o>', neotree_utils.smart_open, desc = 'Parcourir fichiers', silent = true, hidden = true },
{ '<C-o>', neotree_helper.smart_open, desc = 'Parcourir fichiers', silent = true, hidden = true },
}
-- The line beneath this is called `modeline`. See `:help modeline`

View File

@@ -0,0 +1,88 @@
-- Neo-tree helper module
--
local M = {}
-- Function to get confirmation input (compatible with different neo-tree versions)
local function get_confirmation(msg, callback)
-- Try the modern approach first
local ok, inputs = pcall(require, 'neo-tree.ui.inputs')
if ok and inputs and inputs.confirm then
return inputs.confirm(msg, callback)
end
-- Fallback to vim.ui.input for compatibility
vim.ui.input({
prompt = msg .. ' (y/N): ',
}, function(input)
local confirmed = input and (input:lower() == 'y' or input:lower() == 'yes')
callback(confirmed)
end)
end
-- Smart open a neo-tree window
function M.smart_open()
local bufname = vim.api.nvim_buf_get_name(0)
local filetype = vim.bo.filetype
local is_real_file = vim.fn.filereadable(bufname) == 1
-- Si c'est le dashboard ministarter, ouvrir dans le home
if filetype == 'ministarter' then
vim.cmd('Neotree toggle reveal=false position=float dir=' .. vim.fn.expand '~')
-- Si c'est un fichier réel, révéler le fichier dans l'arborescence
elseif is_real_file and bufname ~= '' then
vim.cmd 'Neotree position=left reveal=true'
-- Sinon, ouvrir dans le répertoire de travail courant
else
vim.cmd('Neotree position=left reveal_force_cwd=true dir=' .. vim.fn.getcwd())
end
end
-- Trash the target
function M.trash(state)
local node = state.tree:get_node()
if node.type == 'message' then
return
end
local _, name = require('neo-tree.utils').split_path(node.path)
local msg = string.format("Are you sure you want to trash '%s'?", name)
get_confirmation(msg, function(confirmed)
if not confirmed then
return
end
vim.api.nvim_command('silent !trash-put ' .. vim.fn.shellescape(node.path))
require('neo-tree.sources.manager').refresh(state.name)
end)
end
-- Trash the selections (visual mode)
function M.trash_visual(state, selected_nodes)
local paths_to_trash = {}
for _, node in ipairs(selected_nodes) do
if node.type ~= 'message' then
table.insert(paths_to_trash, node.path)
end
end
if #paths_to_trash == 0 then
return
end
local msg = 'Are you sure you want to trash ' .. #paths_to_trash .. ' items?'
get_confirmation(msg, function(confirmed)
if not confirmed then
return
end
for _, path in ipairs(paths_to_trash) do
vim.api.nvim_command('silent !trash-put ' .. vim.fn.shellescape(path))
end
require('neo-tree.sources.manager').refresh(state.name)
end)
end
return M
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -1,26 +0,0 @@
-- Neo-tree helper module
--
local M = {}
function M.smart_open()
local bufname = vim.api.nvim_buf_get_name(0)
local filetype = vim.bo.filetype
local is_real_file = vim.fn.filereadable(bufname) == 1
-- Si c'est le dashboard ministarter, ouvrir dans le home
if filetype == 'ministarter' then
vim.cmd('Neotree toggle reveal=false position=float dir=' .. vim.fn.expand '~')
-- Si c'est un fichier réel, révéler le fichier dans l'arborescence
elseif is_real_file and bufname ~= '' then
vim.cmd 'Neotree position=left reveal=true'
-- Sinon, ouvrir dans le répertoire de travail courant
else
vim.cmd('Neotree position=float reveal_force_cwd=true dir=' .. vim.fn.getcwd())
end
end
return M
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -81,5 +81,15 @@ vim.o.scrolloff = 10
-- See `:help 'confirm'`
vim.o.confirm = true
-- Indentation : espaces par défaut
vim.opt.expandtab = true -- convertit les tabs en espaces
vim.opt.tabstop = 2 -- largeur visuelle d'un tab
vim.opt.shiftwidth = 2 -- indentation à 2 espaces
vim.opt.softtabstop = 2 -- nombre d'espaces quand tu tapes <Tab>
-- indentation auto intelligente
vim.opt.smartindent = true
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -1,6 +1,8 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
local neotree_helper = require 'custom.plugins.neotree-helper'
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
@@ -8,20 +10,54 @@ return {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
'folke/snacks.nvim', -- optional
'folke/snacks.nvim', -- optional for image preview
'saifulapm/neotree-file-nesting-config', -- optional for VSCode like file nesting
},
lazy = false,
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
-- { '<C-o>', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
opts = {
hide_root_node = true, -- recommanded config for VSCode like file nesting
retain_hidden_root_indent = true, -- recommanded config for VSCode like file nesting
filesystem = {
filtered_items = {
show_hidden_count = false, -- recommanded config for VSCode like file nesting
never_show = { -- recommanded config for VSCode like file nesting
'.DS_Store',
},
},
window = {
mappings = {
['\\'] = 'close_window',
['<C-o>'] = {
'close_window',
desc = 'close neo-tree',
},
['T'] = {
'trash',
desc = 'trash file',
},
},
},
commands = {
trash = neotree_helper.trash,
trash_visual = neotree_helper.trash_visual,
},
},
default_component_configs = {
indent = {
with_expanders = true,
expander_collapsed = '',
expander_expanded = '',
},
},
},
config = function(_, opts)
-- Adding rules from plugin
opts.nesting_rules = require('neotree-file-nesting-config').nesting_rules
require('neo-tree').setup(opts)
end,
}
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -7,22 +7,26 @@ return {
'folke/snacks.nvim',
priority = 1000,
lazy = false,
---@type snacks.Config
-- opts = {
-- -- your configuration comes here
-- -- or leave it empty to use the default settings
-- -- refer to the configuration section below
-- bigfile = { enabled = true },
-- dashboard = { enabled = true },
-- explorer = { enabled = true },
-- indent = { enabled = true },
-- input = { enabled = true },
-- picker = { enabled = true },
-- notifier = { enabled = true },
-- quickfile = { enabled = true },
-- scope = { enabled = true },
-- scroll = { enabled = true },
-- statuscolumn = { enabled = true },
-- words = { enabled = true },
-- -@type snacks.Config
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
bigfile = { enabled = false },
dashboard = { enabled = false },
explorer = { enabled = false },
indent = { enabled = false },
input = { enabled = false },
picker = { enabled = false },
notifier = { enabled = false },
quickfile = { enabled = false },
scope = { enabled = false },
scroll = { enabled = false },
statuscolumn = { enabled = false },
words = { enabled = false },
image = {
enabled = true,
},
},
},
}