feat(lazyterm): optional shell setup, mainly for pwsh. Fixes #2151

This commit is contained in:
Folke Lemaitre
2024-03-22 09:49:07 +01:00
parent 7a5dbeae75
commit 3d4ab4eb26
2 changed files with 37 additions and 0 deletions

View File

@ -12,6 +12,12 @@ vim.g.autoformat = true
-- * a function with signature `function(buf) -> string|string[]`
vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
-- Optionally setup the terminal to use
-- This sets `vim.o.shell` and does some additional configuration for:
-- * pwsh
-- * powershell
-- LazyVim.terminal.setup("pwsh")
local opt = vim.opt
opt.autowrite = true -- Enable auto write

View File

@ -9,6 +9,37 @@ local M = setmetatable({}, {
---@type table<string,LazyFloat>
local terminals = {}
---@param shell? string
function M.setup(shell)
vim.o.shell = shell or vim.o.shell
-- Special handling for pwsh
if shell == "pwsh" or shell == "powershell" then
-- Check if 'pwsh' is executable and set the shell accordingly
if vim.fn.executable("pwsh") == 1 then
vim.o.shell = "pwsh"
elseif vim.fn.executable("powershell") == 1 then
vim.o.shell = "powershell"
else
return LazyVim.error("No powershell executable found")
end
-- Setting shell command flags
vim.o.shellcmdflag =
"-NoLogo -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();$PSDefaultParameterValues['Out-File:Encoding']='utf8';"
-- Setting shell redirection
vim.o.shellredir = '2>&1 | %{ "$_" } | Out-File %s; exit $LastExitCode'
-- Setting shell pipe
vim.o.shellpipe = '2>&1 | %{ "$_" } | Tee-Object %s; exit $LastExitCode'
-- Setting shell quote options
vim.o.shellquote = ""
vim.o.shellxquote = ""
end
end
---@class LazyTermOpts: LazyCmdOptions
---@field interactive? boolean
---@field esc_esc? boolean