Update: <Tab>q to exit any mode and go back to normal mode. Telescope opens in normal mode by default. Press q to close Telescope windows

This commit is contained in:
psychhim
2025-10-09 23:22:07 +05:30
parent 5d9a69cc5a
commit af4df2f99c
2 changed files with 26 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ return {
-- See `:help telescope` and `:help telescope.setup()` -- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup { require('telescope').setup {
defaults = { defaults = {
initial_mode = 'normal', -- Start in normal mode instead of insert
mappings = { mappings = {
i = { i = {
['<C-u>'] = false, ['<C-u>'] = false,
@@ -130,6 +131,7 @@ return {
vim.keymap.set('n', '<leader>sf', function() vim.keymap.set('n', '<leader>sf', function()
require('telescope.builtin').find_files { require('telescope.builtin').find_files {
attach_mappings = function(_, map) attach_mappings = function(_, map)
map('n', 'q', actions.close)
map('i', '<CR>', function(prompt_bufnr) map('i', '<CR>', function(prompt_bufnr)
smart_open(prompt_bufnr) smart_open(prompt_bufnr)
end) end)
@@ -152,6 +154,7 @@ return {
vim.keymap.set('n', '<leader>?', function() vim.keymap.set('n', '<leader>?', function()
require('telescope.builtin').oldfiles { require('telescope.builtin').oldfiles {
attach_mappings = function(_, map) attach_mappings = function(_, map)
map('n', 'q', actions.close)
map('i', '<CR>', function(prompt_bufnr) map('i', '<CR>', function(prompt_bufnr)
smart_open(prompt_bufnr) smart_open(prompt_bufnr)
end) end)
@@ -174,6 +177,7 @@ return {
vim.keymap.set('n', '<leader><leader>', function() vim.keymap.set('n', '<leader><leader>', function()
require('telescope.builtin').buffers { require('telescope.builtin').buffers {
attach_mappings = function(_, map) attach_mappings = function(_, map)
map('n', 'q', actions.close)
map('i', '<CR>', function(prompt_bufnr) map('i', '<CR>', function(prompt_bufnr)
smart_open(prompt_bufnr) smart_open(prompt_bufnr)
end) end)
@@ -228,6 +232,10 @@ return {
require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
winblend = 10, winblend = 10,
previewer = false, previewer = false,
attach_mappings = function(prompt_bufnr, map)
map('n', 'q', actions.close)
return true
end,
}) })
end, { desc = '[/] Fuzzily search in current buffer' }) end, { desc = '[/] Fuzzily search in current buffer' })
local function telescope_live_grep_open_files() local function telescope_live_grep_open_files()
@@ -246,6 +254,7 @@ return {
end end
require('telescope.builtin').git_files { require('telescope.builtin').git_files {
attach_mappings = function(_, map) attach_mappings = function(_, map)
map('n', 'q', actions.close)
local actions = require 'telescope.actions' local actions = require 'telescope.actions'
local action_state = require 'telescope.actions.state' local action_state = require 'telescope.actions.state'

View File

@@ -328,8 +328,24 @@ local function smart_open_file(path)
-- 3. Otherwise → open in a new tab -- 3. Otherwise → open in a new tab
vim.cmd('tabedit ' .. vim.fn.fnameescape(path)) vim.cmd('tabedit ' .. vim.fn.fnameescape(path))
end end
-- Remap gf to use smart_open_file
-- [[ Remap gf to use smart_open_file ]]
vim.keymap.set('n', 'gf', function() vim.keymap.set('n', 'gf', function()
local path = vim.fn.expand '<cfile>' -- get file under cursor local path = vim.fn.expand '<cfile>' -- get file under cursor
smart_open_file(path) smart_open_file(path)
end, { desc = 'Smart gf: open file under cursor in new tab or reuse buffer' }) end, { desc = 'Smart gf: open file under cursor in new tab or reuse buffer' })
-- [[ Function to exit insert/visual/command/terminal modes ]]
local function tab_q_escape()
local mode = vim.api.nvim_get_mode().mode
if mode:match '[iIcR]' then
return vim.api.nvim_replace_termcodes('<Esc>', true, false, true)
elseif mode:match '[vV\x16]' then
return vim.api.nvim_replace_termcodes('<Esc>', true, false, true)
elseif mode:match 't' then
return vim.api.nvim_replace_termcodes('<C-\\><C-n>', true, false, true)
else
return '' -- normal mode, do nothing
end
end
vim.keymap.set({ 'i', 'v', 't', 'n' }, '<Tab>q', tab_q_escape, { noremap = true, expr = true, silent = true })