55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
								 | 
							
								local t_opts = {silent = true}
							 | 
						||
| 
								 | 
							
								vim.keymap.set('t', '<C-n>', '<C-\\><C-N>', t_opts)
							 | 
						||
| 
								 | 
							
								vim.keymap.set('t', '<C-h>', '<cmd>Danterm<CR>')
							 | 
						||
| 
								 | 
							
								vim.keymap.set('n', '<leader>dt', '<cmd>Danterm<CR>')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local state = {
							 | 
						||
| 
								 | 
							
								  floating = {
							 | 
						||
| 
								 | 
							
								    buf = -1,
							 | 
						||
| 
								 | 
							
								    win = -1,
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local function dan_term(opts)
							 | 
						||
| 
								 | 
							
								  opts = opts or {}
							 | 
						||
| 
								 | 
							
								  local width = opts.width or math.floor(vim.o.columns * 0.8)
							 | 
						||
| 
								 | 
							
								  local height = opts.height or math.floor(vim.o.lines * 0.8)
							 | 
						||
| 
								 | 
							
								  local screen_width = vim.o.columns
							 | 
						||
| 
								 | 
							
								  local screen_height = vim.o.lines
							 | 
						||
| 
								 | 
							
								  local col = math.floor((screen_width - width) / 2)
							 | 
						||
| 
								 | 
							
								  local row = math.floor((screen_height - height) / 2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  local buf = nil
							 | 
						||
| 
								 | 
							
								  if vim.api.nvim_buf_is_valid(opts.buf) then
							 | 
						||
| 
								 | 
							
								    buf = opts.buf
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    buf = vim.api.nvim_create_buf(false, true)
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  local win_config = {
							 | 
						||
| 
								 | 
							
								    relative = 'editor',
							 | 
						||
| 
								 | 
							
								    width = width,
							 | 
						||
| 
								 | 
							
								    height = height,
							 | 
						||
| 
								 | 
							
								    col = col,
							 | 
						||
| 
								 | 
							
								    row = row,
							 | 
						||
| 
								 | 
							
								    style = 'minimal',
							 | 
						||
| 
								 | 
							
								    border = 'rounded', -- optional, choose 'none', 'single', 'double', etc.
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  local win = vim.api.nvim_open_win(buf, true, win_config)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return { buf = buf, win = win }
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vim.api.nvim_create_user_command("Danterm", function()
							 | 
						||
| 
								 | 
							
								  if not vim.api.nvim_win_is_valid(state.floating.win) then
							 | 
						||
| 
								 | 
							
								    state.floating = dan_term { buf = state.floating.buf }
							 | 
						||
| 
								 | 
							
								    if vim.bo[state.floating.buf].buftype ~= "terminal" then
							 | 
						||
| 
								 | 
							
								      vim.cmd.term()
							 | 
						||
| 
								 | 
							
								      vim.api.nvim_input("i")
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    vim.api.nvim_win_hide(state.floating.win)
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end, {})
							 |