mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00

We currently enable the OSC 52 clipboard provider by setting g:clipboard when a list of conditions are met, one of which is that $SSH_TTY must be set. We include this condition because often OSC 52 is not the best clipboard provider, so if there are "local" providers available Nvim should prefer those over OSC 52. However, if no other providers are available, Nvim should use OSC 52 even when $SSH_TTY is not set. When a user is in an SSH session then the checks for the other clipboard providers will still (typically) fail, so OSC 52 continues to be enabled by default in SSH sessions. This is marked as a breaking change because there are some cases where OSC 52 wasn't enabled before and is now (or vice versa).
38 lines
911 B
Lua
38 lines
911 B
Lua
local tty = false
|
|
for _, ui in ipairs(vim.api.nvim_list_uis()) do
|
|
if ui.chan == 1 and ui.stdout_tty then
|
|
tty = true
|
|
break
|
|
end
|
|
end
|
|
|
|
-- Do not query when any of the following is true:
|
|
-- * TUI is not attached
|
|
-- * OSC 52 support is explicitly disabled via g:termfeatures
|
|
-- * Using a badly behaved terminal
|
|
if
|
|
not tty
|
|
or (vim.g.termfeatures ~= nil and vim.g.termfeatures.osc52 == false)
|
|
or vim.env.TERM_PROGRAM == 'Apple_Terminal'
|
|
then
|
|
return
|
|
end
|
|
|
|
require('vim.termcap').query('Ms', function(cap, found, seq)
|
|
if not found then
|
|
return
|
|
end
|
|
|
|
assert(cap == 'Ms')
|
|
|
|
-- If the terminal reports a sequence other than OSC 52 for the Ms capability
|
|
-- then ignore it. We only support OSC 52 (for now)
|
|
if not seq or not seq:match('^\027%]52') then
|
|
return
|
|
end
|
|
|
|
local termfeatures = vim.g.termfeatures or {}
|
|
termfeatures.osc52 = true
|
|
vim.g.termfeatures = termfeatures
|
|
end)
|