From 67d7906652e8511f28882fb64b5b3317da93e29a Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 2 Jan 2020 03:41:36 -0500 Subject: clipboard: close stdout when copying via xclip #11617 test_registers.vim can fail even if a clipboard manager is running. If a clipboard manager is not running, this test always fails with xclip. Use xsel as a workaround. https://github.com/astrand/xclip/issues/20 suggests closing stdout when sending input via stdin. Environment - Ubuntu Xenial - Vim 7.4 (any app with broken clipboard code will do) - Neovim nightly Steps to reproduce: 0. Start the clipboard manager. 1. Open a file in Vim on Linux. Vim should have +clipboard enabled. 'set clipboard=' 2. Yank some text to the clipboard register. 3. Quit Vim. 4. Run 'cd /path/to/neovim/repo/' 5. Run 'make oldtest'. Do not run any individual tests. They likely pass with or without this fix. Before fix: test_registers.vim can fail. After fix: test_registers.vim always passes. Close https://github.com/neovim/neovim/issues/7958 https://wiki.ubuntu.com/ClipboardPersistence#The_state_of_things --- runtime/autoload/provider/clipboard.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim index e33dc31f6d..e54d6ad95c 100644 --- a/runtime/autoload/provider/clipboard.vim +++ b/runtime/autoload/provider/clipboard.vim @@ -172,6 +172,11 @@ function! s:clipboard.set(lines, regtype, reg) abort if jobid > 0 call jobsend(jobid, a:lines) call jobclose(jobid, 'stdin') + " xclip does not close stdout,stderr when receiving input via stdin + if argv[0] ==# 'xclip' + call jobclose(jobid, 'stdout') + call jobclose(jobid, 'stderr') + endif let selection.owner = jobid let ret = 1 else -- cgit