diff --git a/Example/Example.csproj b/Example/Example.csproj index ad8053cb8..f82d9429b 100644 --- a/Example/Example.csproj +++ b/Example/Example.csproj @@ -11,7 +11,7 @@ 1.0 - + diff --git a/Terminal.Gui/Terminal.Gui.csproj b/Terminal.Gui/Terminal.Gui.csproj index 9384fcaa9..eb8854238 100644 --- a/Terminal.Gui/Terminal.Gui.csproj +++ b/Terminal.Gui/Terminal.Gui.csproj @@ -17,7 +17,7 @@ - + diff --git a/UnitTests/ClipboardTests.cs b/UnitTests/ClipboardTests.cs index 25c59d180..2276e7358 100644 --- a/UnitTests/ClipboardTests.cs +++ b/UnitTests/ClipboardTests.cs @@ -53,21 +53,23 @@ namespace Terminal.Gui.Core { [AutoInitShutdown] public void TrySetClipboardData_Sets_The_OS_Clipboard () { - var clipText = "Trying to set the OS clipboard."; - if (Clipboard.IsSupported) { - Assert.True (Clipboard.TrySetClipboardData (clipText)); - } else { - Assert.False (Clipboard.TrySetClipboardData (clipText)); - } + lock (Clipboard.Contents) { + var clipText = "Trying to set the OS clipboard."; + if (Clipboard.IsSupported) { + Assert.True (Clipboard.TrySetClipboardData (clipText)); + } else { + Assert.False (Clipboard.TrySetClipboardData (clipText)); + } - Application.Iteration += () => Application.RequestStop (); + Application.Iteration += () => Application.RequestStop (); - Application.Run (); + Application.Run (); - if (Clipboard.IsSupported) { - Assert.Equal (clipText, Clipboard.Contents); - } else { - Assert.NotEqual (clipText, Clipboard.Contents); + if (Clipboard.IsSupported) { + Assert.Equal (clipText, Clipboard.Contents); + } else { + Assert.NotEqual (clipText, Clipboard.Contents); + } } } @@ -79,110 +81,112 @@ namespace Terminal.Gui.Core { var exit = false; var getClipText = ""; - Application.Iteration += () => { - if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) { - // using (Process clipExe = new Process { - // StartInfo = new ProcessStartInfo { - // RedirectStandardInput = true, - // FileName = "clip" - // } - // }) { - // clipExe.Start (); - // clipExe.StandardInput.Write (clipText); - // clipExe.StandardInput.Close (); - // var result = clipExe.WaitForExit (500); - // if (result) { - // clipExe.WaitForExit (); - // } - // } + lock (Clipboard.Contents) { + Application.Iteration += () => { + if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) { + // using (Process clipExe = new Process { + // StartInfo = new ProcessStartInfo { + // RedirectStandardInput = true, + // FileName = "clip" + // } + // }) { + // clipExe.Start (); + // clipExe.StandardInput.Write (clipText); + // clipExe.StandardInput.Close (); + // var result = clipExe.WaitForExit (500); + // if (result) { + // clipExe.WaitForExit (); + // } + // } - using (Process pwsh = new Process { - StartInfo = new ProcessStartInfo { - FileName = "powershell", - Arguments = $"-command \"Set-Clipboard -Value \\\"{clipText}\\\"\"" - } - }) { - pwsh.Start (); - pwsh.WaitForExit (); - } - getClipText = Clipboard.Contents.ToString (); - - } else if (RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) { - using (Process copy = new Process { - StartInfo = new ProcessStartInfo { - RedirectStandardInput = true, - FileName = "pbcopy" - } - }) { - copy.Start (); - copy.StandardInput.Write (clipText); - copy.StandardInput.Close (); - copy.WaitForExit (); - } - getClipText = Clipboard.Contents.ToString (); - - } else if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) { - if (Is_WSL_Platform ()) { - try { - using (Process bash = new Process { - StartInfo = new ProcessStartInfo { - FileName = "powershell.exe", - Arguments = $"-noprofile -command \"Set-Clipboard -Value \\\"{clipText}\\\"\"" - } - }) { - bash.Start (); - bash.WaitForExit (); + using (Process pwsh = new Process { + StartInfo = new ProcessStartInfo { + FileName = "powershell", + Arguments = $"-command \"Set-Clipboard -Value \\\"{clipText}\\\"\"" } + }) { + pwsh.Start (); + pwsh.WaitForExit (); + } + getClipText = Clipboard.Contents.ToString (); - //using (Process clipExe = new Process { - // StartInfo = new ProcessStartInfo { - // RedirectStandardInput = true, - // FileName = "clip.exe" - // } - //}) { - // clipExe.Start (); - // clipExe.StandardInput.Write (clipText); - // clipExe.StandardInput.Close (); - // clipExe.WaitForExit (); - // //var result = clipExe.WaitForExit (500); - // //if (result) { - // // clipExe.WaitForExit (); - // //} - //} - } catch { - exit = true; + } else if (RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) { + using (Process copy = new Process { + StartInfo = new ProcessStartInfo { + RedirectStandardInput = true, + FileName = "pbcopy" + } + }) { + copy.Start (); + copy.StandardInput.Write (clipText); + copy.StandardInput.Close (); + copy.WaitForExit (); + } + getClipText = Clipboard.Contents.ToString (); + + } else if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) { + if (Is_WSL_Platform ()) { + try { + using (Process bash = new Process { + StartInfo = new ProcessStartInfo { + FileName = "powershell.exe", + Arguments = $"-noprofile -command \"Set-Clipboard -Value \\\"{clipText}\\\"\"" + } + }) { + bash.Start (); + bash.WaitForExit (); + } + + //using (Process clipExe = new Process { + // StartInfo = new ProcessStartInfo { + // RedirectStandardInput = true, + // FileName = "clip.exe" + // } + //}) { + // clipExe.Start (); + // clipExe.StandardInput.Write (clipText); + // clipExe.StandardInput.Close (); + // clipExe.WaitForExit (); + // //var result = clipExe.WaitForExit (500); + // //if (result) { + // // clipExe.WaitForExit (); + // //} + //} + } catch { + exit = true; + } + if (!exit) { + getClipText = Clipboard.Contents.ToString (); + } + Application.RequestStop (); + return; + } + if (exit = xclipExists () == false) { + // xclip doesn't exist then exit. + Application.RequestStop (); + return; + } + + using (Process bash = new Process { + StartInfo = new ProcessStartInfo { + FileName = "bash", + Arguments = $"-c \"xclip -sel clip -i\"", + RedirectStandardInput = true, + } + }) { + bash.Start (); + bash.StandardInput.Write (clipText); + bash.StandardInput.Close (); + bash.WaitForExit (); } if (!exit) { getClipText = Clipboard.Contents.ToString (); } - Application.RequestStop (); - return; - } - if (exit = xclipExists () == false) { - // xclip doesn't exist then exit. - Application.RequestStop (); - return; } - using (Process bash = new Process { - StartInfo = new ProcessStartInfo { - FileName = "bash", - Arguments = $"-c \"xclip -sel clip -i\"", - RedirectStandardInput = true, - } - }) { - bash.Start (); - bash.StandardInput.Write (clipText); - bash.StandardInput.Close (); - bash.WaitForExit (); - } - if (!exit) { - getClipText = Clipboard.Contents.ToString (); - } - } - - Application.RequestStop (); - }; + Application.RequestStop (); + }; + } Application.Run ();