| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- return {
- {
- dir = vim.fn.stdpath("config") .. "/custom/like-a-butterfly",
- name = "like-a-butterfly",
- enabled = true,
- 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
- -- 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
- vim.api.nvim_create_autocmd({ "BufEnter" },
- {
- pattern = { "*" },
- group = augroup,
- callback = function()
- vim
- .schedule(function()
- if (vim.bo.filetype ~= "butterfly") then
- lab.close_all()
- end
- end)
- end
- })
- MakeTerm("stt", "Alpha", "zsh")
- MakeTerm("sts", "Beta", "zsh")
- MakeTerm("str", "Gamma", "zsh")
- MakeTerm("sta", "Delta", "zsh")
- MakeTerm("stn", "Epsilon", "gemini --model gemini-2.5-pro")
- MakeTerm("ste", "Zeta", "/bin/zsh $DOTFILES_DIR/.scripts/omniscratch.zsh")
- MakeTerm("sti", "Eta", "lazydocker", true)
- MakeTerm("sto", "Theta", "lazygit", true)
- -- Keymaps
- vim.keymap.set("t", "<C-S-t>", "<C-\\><C-n>")
- vim.keymap.set("t", "<S-Space>", "<Esc>")
- -- Double-tapping <Esc> within 150ms closes floating terminals;
- -- implemented as a timer to minimize normal <ESC> interruptions
- local timer_var = "lab_doubletap_timer"
- vim.keymap.set("t", "<Esc>", function()
- if vim.b[timer_var] then
- vim.fn.timer_stop(vim.b[timer_var])
- vim.b[timer_var] = nil
- lab.close_all()
- else
- vim.b[timer_var] = vim.fn.timer_start(150, function()
- vim.b[timer_var] = nil
- vim.api.nvim_chan_send(
- vim.b.terminal_job_id,
- vim.api.nvim_replace_termcodes("<Esc>", true, false, true))
- end)
- end
- end, { noremap = true, silent = true})
- end
- }
- }
|