television and zoxide integration
This commit is contained in:
@@ -0,0 +1,113 @@
|
|||||||
|
vim.pack.add {
|
||||||
|
{
|
||||||
|
src = 'https://github.com/alexpasmantier/tv.nvim',
|
||||||
|
version = 'main',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Built-in tv.nvim handlers.
|
||||||
|
local h = require('tv').handlers
|
||||||
|
|
||||||
|
require('tv').setup {
|
||||||
|
layout = 'landscape', -- 'landscape' (default) or 'portrait'
|
||||||
|
window = {
|
||||||
|
width = 0.8,
|
||||||
|
height = 0.8,
|
||||||
|
border = 'none',
|
||||||
|
title = ' tv.nvim ',
|
||||||
|
title_pos = 'center',
|
||||||
|
},
|
||||||
|
channels = {
|
||||||
|
files = {
|
||||||
|
layout = 'portrait',
|
||||||
|
keybinding = '<leader><leader>',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = h.open_as_files,
|
||||||
|
['<C-q>'] = h.send_to_quickfix,
|
||||||
|
['<C-s>'] = h.open_in_split,
|
||||||
|
['<C-v>'] = h.open_in_vsplit,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
text = {
|
||||||
|
layout = 'portrait',
|
||||||
|
keybinding = '<C-p>',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = h.open_at_line,
|
||||||
|
['<C-q>'] = h.send_to_quickfix,
|
||||||
|
['<C-s>'] = h.open_in_split,
|
||||||
|
['<C-v>'] = h.open_in_vsplit,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
['git-log'] = {
|
||||||
|
keybinding = '<leader>gl',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = function(entries, config)
|
||||||
|
if #entries > 0 then
|
||||||
|
vim.cmd 'enew | setlocal buftype=nofile bufhidden=wipe'
|
||||||
|
vim.cmd('silent 0read !git show ' .. vim.fn.shellescape(entries[1]))
|
||||||
|
vim.cmd '1delete _ | setlocal filetype=git nomodifiable'
|
||||||
|
vim.cmd 'normal! gg'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
['git-branch'] = {
|
||||||
|
keybinding = '<leader>gb',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = h.execute_shell_command 'git checkout {}',
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
['docker-images'] = {
|
||||||
|
keybinding = '<leader>di',
|
||||||
|
window = { title = ' Docker Images ' },
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = function(entries, config)
|
||||||
|
if #entries > 0 then
|
||||||
|
vim.ui.input({
|
||||||
|
prompt = 'Container name: ',
|
||||||
|
default = 'my-container',
|
||||||
|
}, function(name)
|
||||||
|
if name and name ~= '' then
|
||||||
|
local cmd = string.format('docker run -it --name %s %s', name, entries[1])
|
||||||
|
vim.cmd('!' .. cmd)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
env = {
|
||||||
|
keybinding = '<leader>ev',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = h.insert_at_cursor,
|
||||||
|
['<C-l>'] = h.insert_on_new_line,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
alias = {
|
||||||
|
keybinding = '<leader>al',
|
||||||
|
handlers = {
|
||||||
|
['<CR>'] = h.insert_at_cursor,
|
||||||
|
['<C-y>'] = h.copy_to_clipboard,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tv_binary = 'tv',
|
||||||
|
global_keybindings = {
|
||||||
|
channels = '<leader>tv',
|
||||||
|
},
|
||||||
|
quickfix = {
|
||||||
|
auto_open = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
-- Zoxide integration for Neovim
|
||||||
|
-- Allows you to use zoxide's smart directory jumping within Neovim
|
||||||
|
|
||||||
|
-- Install telescope-zoxide plugin
|
||||||
|
local gh = function(repo)
|
||||||
|
return 'https://github.com/' .. repo
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.pack.add { gh 'jvgrootveld/telescope-zoxide' }
|
||||||
|
|
||||||
|
-- Configure telescope-zoxide
|
||||||
|
require('telescope').load_extension 'zoxide'
|
||||||
|
|
||||||
|
-- Keymaps for zoxide
|
||||||
|
vim.keymap.set('n', '<leader>cd', function()
|
||||||
|
require('telescope').extensions.zoxide.list()
|
||||||
|
end, { desc = '[C]hange [D]irectory with zoxide' })
|
||||||
|
|
||||||
|
-- Optional: Create a command to change directory using zoxide
|
||||||
|
vim.api.nvim_create_user_command('Z', function(opts)
|
||||||
|
local path = opts.args
|
||||||
|
if path == '' then
|
||||||
|
-- If no argument, open telescope picker
|
||||||
|
require('telescope').extensions.zoxide.list()
|
||||||
|
else
|
||||||
|
-- Otherwise, use zoxide to find and change to directory
|
||||||
|
local handle = io.popen('zoxide query -- ' .. vim.fn.shellescape(path))
|
||||||
|
if handle then
|
||||||
|
local result = handle:read '*a'
|
||||||
|
handle:close()
|
||||||
|
result = result:gsub('%s+$', '') -- trim trailing whitespace
|
||||||
|
if result ~= '' then
|
||||||
|
vim.cmd('cd ' .. vim.fn.fnameescape(result))
|
||||||
|
print('Changed directory to: ' .. result)
|
||||||
|
else
|
||||||
|
print('Directory not found in zoxide database')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end, { nargs = '*', desc = 'Change directory using zoxide' })
|
||||||
|
|
||||||
|
-- Optional: Create commands similar to zoxide's zi (interactive)
|
||||||
|
vim.api.nvim_create_user_command('Zi', function()
|
||||||
|
require('telescope').extensions.zoxide.list()
|
||||||
|
end, { desc = 'Interactive zoxide directory picker' })
|
||||||
|
|
||||||
|
-- Optional: Add zoxide entries when changing directories in Neovim
|
||||||
|
-- This keeps your zoxide database in sync with Neovim directory changes
|
||||||
|
vim.api.nvim_create_autocmd('DirChanged', {
|
||||||
|
callback = function()
|
||||||
|
local dir = vim.fn.getcwd()
|
||||||
|
vim.fn.system('zoxide add ' .. vim.fn.shellescape(dir))
|
||||||
|
end,
|
||||||
|
desc = 'Add directory to zoxide database when changing directories in Neovim',
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user