summaryrefslogtreecommitdiff
path: root/config/nvim
diff options
context:
space:
mode:
authorSuleyman Farajli <suleyman@farajli.net>2025-08-28 02:02:26 +0400
committerSuleyman Farajli <suleyman@farajli.net>2025-08-28 02:02:26 +0400
commit85fd7692af3842bf9a835fede8744edafe923237 (patch)
treec950e86b474f4b5978832ca6c9a321a8a461143b /config/nvim
parent733eb5dc93c81289ff1a1a73562903f9eeed3e13 (diff)
feat(nvim): remove toggleterm.nvim and add custom full-screen toggle terminal
- Removed toggleterm.nvim plugin and all related configuration - Added custom full-screen terminal toggle with <C-f> - Preserves session and closes on TermClose - Automatically enters insert mode when opened - Made netrw buffers read-only, unlisted, and buftype=nofile to prevent writing - Added autocmds to prevent accidental :w/:w! in netrw - Cleaned up indentation and autocmd formatting
Diffstat (limited to 'config/nvim')
-rw-r--r--config/nvim/init.lua169
-rw-r--r--config/nvim/lua/plugins.lua15
2 files changed, 111 insertions, 73 deletions
diff --git a/config/nvim/init.lua b/config/nvim/init.lua
index 46ee066..6dbd3a5 100644
--- a/config/nvim/init.lua
+++ b/config/nvim/init.lua
@@ -21,83 +21,134 @@ vim.g.netrw_winsize = 25 -- Width of netrw window
vim.g.netrw_keepdir = 0 -- Don't keep cwd synced with netrw
vim.opt.fillchars = {
- vert = "|",
- fold = " ",
- eob = " ",
- diff = "/",
- msgsep = "-",
- foldopen = "▾",
- foldsep = "|",
- foldclose = ">",
+ vert = "|",
+ fold = " ",
+ eob = " ",
+ diff = "/",
+ msgsep = "-",
+ foldopen = "▾",
+ foldsep = "|",
+ foldclose = ">",
}
-- Open Vexplore if the first argument is a directory
if vim.fn.argc() == 1 and vim.fn.isdirectory(vim.fn.argv(0)) == 1 then
- -- Delete the default empty buffer
- vim.cmd("enew") -- create a new empty buffer
- vim.cmd("bdelete #") -- delete the previous buffer (the auto Ex buffer)
- -- Open vertical explorer for the directory
- vim.cmd("Vexplore " .. vim.fn.fnameescape(vim.fn.argv(0)))
+ -- Delete the default empty buffer
+ vim.cmd("enew") -- create a new empty buffer
+ vim.cmd("bdelete #") -- delete the previous buffer (the auto Ex buffer)
+ -- Open vertical explorer for the directory
+ vim.cmd("Vexplore " .. vim.fn.fnameescape(vim.fn.argv(0)))
+end
+
+--[[ FIXME: Sometime crashes ]]
+-- Store terminal buffer
+local term_buf = nil
+
+local function toggle_terminal()
+ local current_buf = vim.api.nvim_get_current_buf()
+
+ -- If we're in the terminal, toggle to previous buffer
+ if term_buf and vim.api.nvim_buf_is_valid(term_buf) and current_buf == term_buf then
+ vim.cmd("b#") -- switch to previous buffer
+ return
+ end
+
+ -- If the terminal buffer doesn't exist or was closed, create a new one
+ if not term_buf or not vim.api.nvim_buf_is_valid(term_buf) then
+ vim.cmd("enew") -- create a new empty buffer
+ vim.cmd("terminal")
+ term_buf = vim.api.nvim_get_current_buf()
+
+ -- Automatically close buffer when the terminal exits
+ vim.api.nvim_create_autocmd("TermClose", {
+ buffer = term_buf,
+ once = true,
+ callback = function()
+ if vim.api.nvim_buf_is_valid(term_buf) then
+ vim.api.nvim_buf_delete(term_buf, { force = true })
+ term_buf = nil
+ end
+ end,
+ })
+ else
+ -- Otherwise, switch to the existing terminal buffer
+ vim.cmd("buffer " .. term_buf)
+ end
+
+ vim.cmd("startinsert") -- automatically enter insert mode
end
-- Function to toggle vertical netrw explorer
local function toggle_vexplore()
- -- Check if a netrw buffer already exists
- for _, buf in ipairs(vim.api.nvim_list_bufs()) do
- if vim.api.nvim_buf_is_loaded(buf) then
- local ft = vim.api.nvim_buf_get_option(buf, "filetype")
- if ft == "netrw" then
- -- If found, close the window
- for _, win in ipairs(vim.api.nvim_list_wins()) do
- if vim.api.nvim_win_get_buf(win) == buf then
- vim.api.nvim_win_close(win, true)
- return
- end
- end
- end
- end
- end
- -- If no netrw buffer found, open vertical explorer
- vim.cmd("Vexplore")
+ -- Check if a netrw buffer already exists
+ for _, buf in ipairs(vim.api.nvim_list_bufs()) do
+ if vim.api.nvim_buf_is_loaded(buf) then
+ local ft = vim.api.nvim_buf_get_option(buf, "filetype")
+ if ft == "netrw" then
+ -- If found, close the window
+ for _, win in ipairs(vim.api.nvim_list_wins()) do
+ if vim.api.nvim_win_get_buf(win) == buf then
+ vim.api.nvim_win_close(win, true)
+ return
+ end
+ end
+ end
+ end
+ end
+ -- If no netrw buffer found, open vertical explorer
+ vim.cmd("Vexplore")
end
-- Map 'l' and 'l' to open file/dir in netrw buffers
vim.api.nvim_create_autocmd("FileType", {
- pattern = "netrw",
- callback = function()
- vim.api.nvim_buf_set_keymap(0, "n", "l", "<CR>", { silent = true })
- vim.api.nvim_buf_set_keymap(0, "n", "h", "<CR>", { silent = true })
- end,
+ pattern = "netrw",
+ callback = function()
+ vim.api.nvim_buf_set_keymap(0, "n", "l", "<CR>", { silent = true })
+ vim.api.nvim_buf_set_keymap(0, "n", "h", "<CR>", { silent = true })
+ end,
+})
+
+-- Make netrw buffers read-only and unlisted
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = "netrw",
+ callback = function()
+ -- Prevent any writing
+ vim.bo.buflisted = false -- hide from buffer list
+ vim.bo.readonly = true -- normal :w prevented
+ vim.bo.modifiable = false -- prevent edits
+ vim.bo.buftype = "nofile" -- treat as scratch buffer
+ vim.bo.swapfile = false -- no swap
+ end,
})
-- Remove trailing whitespace on all lines before saving, excluding markdown files
vim.api.nvim_create_autocmd("BufWritePre", {
- pattern = "*",
- callback = function()
- if vim.bo.filetype == "markdown" then
- return
- end
- vim.cmd([[%s/\s\+$//e]])
- end,
+ pattern = "*",
+ callback = function()
+ if vim.bo.filetype == "markdown" then
+ return
+ end
+ vim.cmd([[%s/\s\+$//e]])
+ end,
})
-- Disable auto-comment
vim.api.nvim_create_autocmd("FileType", {
- pattern = "*",
- callback = function()
- vim.opt_local.formatoptions:remove({ "c", "r", "o" })
- end,
+ pattern = "*",
+ callback = function()
+ vim.opt_local.formatoptions:remove({ "c", "r", "o" })
+ end,
})
-- Enable spellcheck for certain file types
vim.api.nvim_create_autocmd("FileType", {
- pattern = {
- "gitcommit", "markdown", "text", "rst",
- "asciidoc", "org", "norg", "latex", "tex", "mail", "pandoc"
- },
- callback = function()
- vim.opt_local.spell = true
- end,
+ pattern = {
+ "gitcommit", "markdown", "text", "rst",
+ "asciidoc", "org", "norg", "latex", "tex", "mail", "pandoc"
+ },
+ callback = function()
+ vim.opt_local.spell = true
+ end,
})
-- NOTE: On some terminal emulators, the keybinds
@@ -127,10 +178,12 @@ vim.keymap.set('i', '<C-k>' , '<Up>' , { noremap = true })
vim.keymap.set('i', '<C-space>', '<ESC>' , { noremap = true })
-- Plugins
-vim.keymap.set('n', '<leader>w', '<cmd>MdEval<CR>' , opts)
-vim.keymap.set('n', '<leader>c', '<cmd>MdEvalClean<CR>', opts)
+vim.keymap.set('n', '<leader>w', '<cmd>MdEval<CR>' , opts)
+vim.keymap.set('n', '<leader>c', '<cmd>MdEvalClean<CR>' , opts)
-- Other
-vim.keymap.set('n', '<leader><leader>', '<cmd>w!<CR>' , opts)
-vim.keymap.set('n', '<leader>q' , '<cmd>wq!<CR>', opts)
-vim.keymap.set("n", "<leader>e", toggle_vexplore , opts)
+vim.keymap.set('n', '<leader><leader>', '<cmd>w!<CR>' , opts)
+vim.keymap.set('n', '<leader>q' , '<cmd>wq!<CR>' , opts)
+vim.keymap.set("n", "<leader>e" , toggle_vexplore , opts)
+vim.keymap.set('n', '<C-f>' , toggle_terminal , opts)
+vim.keymap.set('t', '<C-f>' , function() vim.cmd("stopinsert") toggle_terminal() end, opts)
diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua
index e2454a1..8b08e4b 100644
--- a/config/nvim/lua/plugins.lua
+++ b/config/nvim/lua/plugins.lua
@@ -19,14 +19,12 @@ vim.opt.rtp:prepend(lazypath)
-- Setups
require("lazy").setup({
spec = {
- "akinsho/toggleterm.nvim",
"numToStr/Comment.nvim",
"windwp/nvim-autopairs",
"EdenEast/nightfox.nvim",
"nvim-orgmode/orgmode",
"jubnzv/mdeval.nvim",
},
-
})
require("Comment").setup{
@@ -45,19 +43,6 @@ require("Comment").setup{
},
}
-require("toggleterm").setup{
- size = 10,
- open_mapping = [[<c-f>]],
- hide_numbers = true,
- shade_terminals = true,
- direction = "float",
- float_opts = {
- -- border = 'curved',
- winblend = 0, --transparency
- }
-
-}
-
require("nvim-autopairs").setup({
disable_filetype = { "TelescopePrompt", "spectre_panel", "neo-tree-popup", "conf"},
disable_in_macro = true,