add telekasten, telescope, new term handling

This commit is contained in:
Јован Ђокић-Шумарац 2025-08-14 08:02:26 +02:00
parent 0d9bd24bf6
commit 98d8a599c6
5 changed files with 139 additions and 58 deletions

View file

@ -1,36 +1,60 @@
-- Normal mode mappings local term = require('term')
vim.keymap.set('n', '<leader>gd', vim.lsp.buf.hover, { noremap = true })
vim.keymap.set('n', '<leader>tw', function() MiniTrailspace.trim() end, { noremap = true })
-- Terminal and buffer mappings local keymaps = {
vim.keymap.set('n', '<leader>tt', '<cmd>terminal<CR>', { noremap = true }) -- Normal mode mappings
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>', { noremap = true }) { 'n', '<leader>gd', vim.lsp.buf.hover, { noremap = true } },
vim.keymap.set('n', '<C-Space>', '<cmd>bprev<CR>', { noremap = true }) { 'n', '<leader>tw', function() MiniTrailspace.trim() end, { noremap = true } },
-- Move selected text up/down in visual mode -- Terminal and buffer mappings
vim.keymap.set('v', 'J', "<cmd>m '>+1<CR>gv=gv", { noremap = true }) { 'n', '<leader>tt', term.toggle_popup_terminal, { noremap = true } },
vim.keymap.set('v', 'K', "<cmd>m '<-2<CR>gv=gv", { noremap = true }) { 'n', '<leader>th', term.toggle_popup_terminal, { noremap = true } },
{ 't', '<Esc>', '<C-\\><C-n>', { noremap = true } },
{ 'n', '<C-Space>', '<cmd>bprev<CR>', { noremap = true } },
-- Keep cursor in the middle when jumping or joining lines -- Move selected text up/down in visual mode
vim.keymap.set('n', 'J', 'mzJ`z', { noremap = true }) { 'v', 'J', "<cmd>m '>+1<CR>gv=gv", { noremap = true } },
vim.keymap.set('n', '<C-d>', '<C-d>zz', { noremap = true }) { 'v', 'K', "<cmd>m '<-2<CR>gv=gv", { noremap = true } },
vim.keymap.set('n', '<C-u>', '<C-u>zz', { noremap = true })
vim.keymap.set('n', 'n', 'nzzzv', { noremap = true })
vim.keymap.set('n', 'N', 'Nzzzv', { noremap = true })
-- Keep cursor in the middle when jumping or joining lines
{ 'n', 'J', 'mzJ`z', { noremap = true } },
{ 'n', '<C-d>', '<C-d>zz', { noremap = true } },
{ 'n', '<C-u>', '<C-u>zz', { noremap = true } },
{ 'n', 'n', 'nzzzv', { noremap = true } },
{ 'n', 'N', 'Nzzzv', { noremap = true } },
-- Telescope mappings
{ 'n', '<leader>ff', '<cmd>Telescope find_files<CR>' },
{ 'n', '<leader>fb', '<cmd>Telescope buffers<CR>' },
{ 'n', '<leader>fh', '<cmd>Telescope help_tags<CR>' },
{ 'n', '<leader>fg', '<cmd>Telescope live_grep<CR>' },
{ 'n', '<leader>fs', '<cmd>Telescope git_status<CR>' },
{ 'n', '<leader>ft', '<cmd>Telescope<CR>' },
vim.keymap.set('n', '<leader>ff', '<cmd>Pick files<CR>') -- Telekasten mappings
vim.keymap.set('n', '<leader>fb', '<cmd>Pick buffers<CR>') { 'n', '<leader>tk', '<cmd>Telekasten<CR>' },
vim.keymap.set('n', '<leader>h', '<cmd>Pick help<CR>') { 'n', '<leader>tf', '<cmd>Telekasten find_notes<CR>' },
vim.keymap.set('n', '<leader>e', '<cmd>Oil<CR>') { 'n', '<leader>ts', '<cmd>Telekasten search_notes<CR>' },
vim.keymap.set('n', '<leader>lf', vim.lsp.buf.format) { 'n', '<leader>tn', '<cmd>Telekasten new_note<CR>' },
{ 'n', '<leader>tlf', '<cmd>Telekasten follow_link<CR>' },
{ 'n', '<leader>tli', '<cmd>Telekasten insert_link<CR>' },
vim.keymap.set('n', '<leader>o', '<cmd>update<CR> <cmd>source<CR>') -- File operations
vim.keymap.set('n', '<leader>w', '<cmd>write<CR>') { 'n', '<leader>e', '<cmd>Oil<CR>' },
vim.keymap.set('n', '<leader>q', '<cmd>quit<CR>') { 'n', '<leader>lf', vim.lsp.buf.format },
vim.keymap.set({ 'n', 'v', 'x' }, '<leader>y', "'+y<CR>") -- Basic operations
vim.keymap.set({ 'n', 'v', 'x' }, '<leader>d', "'+d<CR>") { 'n', '<leader>o', '<cmd>update<CR> <cmd>source<CR>' },
{ 'n', '<leader>w', '<cmd>write<CR>' },
{ 'n', '<leader>q', '<cmd>quit<CR>' },
vim.keymap.set('n', '<leader>cc', '<cmd>ClaudeCode<CR>', { desc = 'Toggle Claude Code' }) -- Copy/delete to system clipboard
{ { 'n', 'v', 'x' }, '<leader>y', "'+y<CR>" },
{ { 'n', 'v', 'x' }, '<leader>d', "'+d<CR>" },
-- Claude Code
{ 'n', '<leader>cc', '<cmd>ClaudeCode<CR>', { desc = 'Toggle Claude Code' } },
}
for _, keymap in ipairs(keymaps) do
vim.keymap.set(keymap[1], keymap[2], keymap[3], keymap[4])
end

View file

@ -1,16 +1,9 @@
require('nvim-treesitter.configs').setup({ require('nvim-treesitter.configs').setup({
ensure_installed = { ensure_installed = {
'c',
'bash', 'bash',
'c_sharp',
'go',
'haskell',
'lua', 'lua',
'python', 'python',
'rust', 'rust',
'vim',
'vimdoc',
'hyprlang',
}, },
sync_install = false, sync_install = false,
auto_install = true, auto_install = true,
@ -34,7 +27,6 @@ require("mason-lspconfig").setup({
ensure_installed = { ensure_installed = {
"lua_ls", "lua_ls",
"pylsp", "pylsp",
"ltex",
}, },
automatic_installation = true, automatic_installation = true,
}) })
@ -49,8 +41,7 @@ vim.lsp.config( 'lua_ls', {
} }
} }
}) })
vim.lsp.config( 'lua_ls', { }) vim.lsp.enable({ 'lua_ls', 'pylsp', 'csharp_ls' })
vim.lsp.enable({ 'lua_ls', 'pylsp' })
vim.diagnostic.config({ vim.diagnostic.config({
signs = false, signs = false,

View file

@ -5,17 +5,22 @@ local function process_plugin(plugin)
-- Handle when plugin is just a string (URL) -- Handle when plugin is just a string (URL)
if type(plugin) == "string" then if type(plugin) == "string" then
processed.url = plugin processed.url = plugin:match("^https?://") and plugin or "https://github.com/" .. plugin
return processed return processed
end end
-- Handle the plugin URL/name (convert from lazy.nvim format) -- Handle the plugin URL/name (convert from lazy.nvim format)
local url = nil
if plugin[1] then if plugin[1] then
processed.url = plugin[1] url = plugin[1]
elseif plugin.url then elseif plugin.url then
processed.url = plugin.url url = plugin.url
elseif plugin.src then elseif plugin.src then
processed.url = plugin.src url = plugin.src
end
if url then
processed.url = url:match("^https?://") and url or "https://github.com/" .. url
end end
-- Handle version -- Handle version

View file

@ -1,28 +1,39 @@
local pack = require 'pack' local pack = require 'pack'
local plugins = { local plugins = {
'https://github.com/catppuccin/nvim', 'catppuccin/nvim',
'https://github.com/nvim-treesitter/nvim-treesitter', 'nvim-treesitter/nvim-treesitter',
{ url = 'nvim-telescope/telescope.nvim',
dependencies = { 'nvim-lua/plenary.nvim' },
setup = true },
{ url = 'https://github.com/echasnovski/mini.cursorword', { url = 'renerocksai/telekasten.nvim',
dependencies = { 'nvim-telescope/telescope.nvim' },
setup = function()
require('telekasten').setup({
home = vim.fn.expand("~/zettelkasten"),
})
end },
{ url = 'echasnovski/mini.cursorword',
setup = true }, setup = true },
{ url = 'https://github.com/echasnovski/mini.pick', { url = 'echasnovski/mini.pick',
setup = true }, setup = true },
{ url = 'https://github.com/echasnovski/mini.starter', { url = 'echasnovski/mini.starter',
setup = true }, setup = true },
{ url = 'https://github.com/echasnovski/mini.trailspace', { url = 'echasnovski/mini.trailspace',
setup = true }, setup = true },
{ url = 'https://github.com/stevearc/oil.nvim', { url = 'stevearc/oil.nvim',
setup = true }, setup = true },
{ url = 'https://github.com/svampkorg/moody.nvim', { url = 'svampkorg/moody.nvim',
setup = true }, setup = true },
{ url = 'https://github.com/greggh/claude-code.nvim', { url = 'greggh/claude-code.nvim',
setup = function () setup = function ()
require("claude-code").setup({ require("claude-code").setup({
window = { window = {
@ -39,8 +50,8 @@ local plugins = {
}) })
end }, end },
{ url = 'https://github.com/nvim-lualine/lualine.nvim', { url = 'nvim-lualine/lualine.nvim',
dependencies = { 'https://github.com/nvim-tree/nvim-web-devicons' }, dependencies = { 'nvim-tree/nvim-web-devicons' },
setup = function () setup = function ()
require('lualine').setup({ require('lualine').setup({
options = { options = {
@ -50,16 +61,16 @@ local plugins = {
}) })
end }, end },
{ url = 'https://github.com/williamboman/mason.nvim', { url = 'williamboman/mason.nvim',
dependencies = { dependencies = {
{ url = 'https://github.com/williamboman/mason-lspconfig.nvim', setup = true }, { url = 'williamboman/mason-lspconfig.nvim', setup = true },
'https://github.com/neovim/nvim-lspconfig' 'neovim/nvim-lspconfig'
}, },
setup = true }, setup = true },
{ url = 'https://github.com/Saghen/blink.cmp', { url = 'Saghen/blink.cmp',
version = "v1.6.0", version = "v1.6.0",
dependencies = { 'https://github.com/rafamadriz/friendly-snippets' }}, dependencies = { 'rafamadriz/friendly-snippets' }},
} }
pack.setup(plugins) pack.setup(plugins)
@ -101,7 +112,7 @@ local default_plugins = {
} }
for _, plug in ipairs(default_plugins) do for _, plug in ipairs(default_plugins) do
vim.g['loaded_' .. plug] = 1 vim.g['loaded_' .. plug] = 1
end end

50
lua/term.lua Normal file
View file

@ -0,0 +1,50 @@
local M = {}
-- Popup terminal state
local popup_term = {
buf = nil,
win = nil,
}
-- Function to create popup terminal
function M.toggle_popup_terminal()
if popup_term.win and vim.api.nvim_win_is_valid(popup_term.win) then
-- Close the popup if it's open
vim.api.nvim_win_close(popup_term.win, true)
popup_term.win = nil
else
-- Create or reuse terminal buffer
if not popup_term.buf or not vim.api.nvim_buf_is_valid(popup_term.buf) then
popup_term.buf = vim.api.nvim_create_buf(false, true)
vim.api.nvim_buf_set_option(popup_term.buf, 'buftype', 'terminal')
end
-- Calculate popup size
local width = math.floor(vim.o.columns * 0.8)
local height = math.floor(vim.o.lines * 0.8)
local row = math.floor((vim.o.lines - height) / 2)
local col = math.floor((vim.o.columns - width) / 2)
-- Create floating window
popup_term.win = vim.api.nvim_open_win(popup_term.buf, true, {
relative = 'editor',
width = width,
height = height,
row = row,
col = col,
style = 'minimal',
border = 'rounded',
})
-- Start terminal if buffer is empty
if vim.api.nvim_buf_line_count(popup_term.buf) == 1 and
vim.api.nvim_buf_get_lines(popup_term.buf, 0, 1, false)[1] == '' then
vim.fn.termopen(vim.o.shell)
end
-- Enter insert mode
vim.cmd('startinsert')
end
end
return M