|
|
@@ -6,10 +6,61 @@ return {
|
|
|
lazy = false,
|
|
|
config = function()
|
|
|
local lab = require('like-a-butterfly')
|
|
|
+ local augroup = vim.api.nvim_create_augroup(
|
|
|
+ 'like-a-butterfly', { clear = true })
|
|
|
-- Configure eight homerow terminals
|
|
|
- function MakeTerm(shortcut, name, command)
|
|
|
+ -- Some TUIs are "flaky" (*cough* lazygit *cough*), and don't redraw
|
|
|
+ -- properly after being hidden. We try to fix this by aggressively
|
|
|
+ -- resizing and redrawing flaky programs' windows.
|
|
|
+ function MakeTerm(shortcut, name, command, flaky)
|
|
|
lab.create_term(name, command)
|
|
|
vim.keymap.set("n", shortcut, function()
|
|
|
+ if flaky then
|
|
|
+ local flaky_redraw_time = 10
|
|
|
+ vim.api.nvim_create_autocmd({ "BufEnter" },
|
|
|
+ {
|
|
|
+ pattern = { "*" },
|
|
|
+ group = augroup,
|
|
|
+ once = true,
|
|
|
+ callback = function()
|
|
|
+ if (vim.bo.filetype ~= "butterfly") then
|
|
|
+ return
|
|
|
+ end
|
|
|
+ local window = vim.api
|
|
|
+ .nvim_get_current_win()
|
|
|
+ vim.cmd(
|
|
|
+ "setlocal sidescrolloff=" ..
|
|
|
+ vim.o
|
|
|
+ .columns)
|
|
|
+ vim.defer_fn(function()
|
|
|
+ vim.api.nvim_win_set_height(
|
|
|
+ window,
|
|
|
+ vim.api
|
|
|
+ .nvim_win_get_height(
|
|
|
+ window) -
|
|
|
+ 1)
|
|
|
+ vim.defer_fn(function()
|
|
|
+ vim.api
|
|
|
+ .nvim_win_set_height(
|
|
|
+ window,
|
|
|
+ vim.api
|
|
|
+ .nvim_win_get_height(
|
|
|
+ window) + 1)
|
|
|
+ vim.api.nvim_feedkeys(
|
|
|
+ vim.api
|
|
|
+ .nvim_replace_termcodes(
|
|
|
+ '<C-\\><C-n>^zei',
|
|
|
+ true, true, true),
|
|
|
+ 'i', true)
|
|
|
+ vim.schedule(function()
|
|
|
+ vim.cmd("redraw!")
|
|
|
+ end)
|
|
|
+ end, flaky_redraw_time)
|
|
|
+ end, flaky_redraw_time)
|
|
|
+ vim.cmd("redraw!")
|
|
|
+ end
|
|
|
+ })
|
|
|
+ end
|
|
|
lab.open_term(name)
|
|
|
end)
|
|
|
end
|
|
|
@@ -17,21 +68,12 @@ return {
|
|
|
vim.api.nvim_create_autocmd({ "BufEnter" },
|
|
|
{
|
|
|
pattern = { "*" },
|
|
|
- group = vim.api.nvim_create_augroup(
|
|
|
- 'like-a-butterfly', { clear = true }),
|
|
|
+ group = augroup,
|
|
|
callback = function()
|
|
|
vim
|
|
|
.schedule(function()
|
|
|
if (vim.bo.filetype ~= "butterfly") then
|
|
|
lab.close_all()
|
|
|
- else
|
|
|
- vim.api.nvim_feedkeys(
|
|
|
- vim.api.nvim_replace_termcodes(
|
|
|
- '<C-\\><C-n>^zei',
|
|
|
- true, true, true), 'i', true)
|
|
|
- vim.cmd("setlocal sidescrolloff=" .. vim.o
|
|
|
- .columns)
|
|
|
- vim.cmd("redraw!")
|
|
|
end
|
|
|
end)
|
|
|
end
|
|
|
@@ -42,8 +84,8 @@ return {
|
|
|
MakeTerm("sta", "Delta", "zsh")
|
|
|
MakeTerm("stn", "Epsilon", "zsh")
|
|
|
MakeTerm("ste", "Zeta", "/bin/zsh ~/.scripts/omniscratch.zsh")
|
|
|
- MakeTerm("sti", "Eta", "lazydocker")
|
|
|
- MakeTerm("sto", "Theta", "lazygit")
|
|
|
+ MakeTerm("sti", "Eta", "lazydocker", true)
|
|
|
+ MakeTerm("sto", "Theta", "lazygit", true)
|
|
|
|
|
|
-- Keymaps
|
|
|
vim.keymap.set("t", "<Esc><Esc>", lab.close_all)
|