|
@@ -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 ();
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- using (Process pwsh = new Process {
|
|
|
- StartInfo = new ProcessStartInfo {
|
|
|
- FileName = "powershell",
|
|
|
- Arguments = $"-command \"Set-Clipboard -Value \\\"{clipText}\\\"\""
|
|
|
+ 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 ();
|
|
|
}
|
|
|
- }) {
|
|
|
- pwsh.Start ();
|
|
|
- pwsh.WaitForExit ();
|
|
|
- }
|
|
|
- getClipText = Clipboard.Contents.ToString ();
|
|
|
+ getClipText = Clipboard.Contents.ToString ();
|
|
|
|
|
|
- } else if (RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) {
|
|
|
- using (Process copy = new Process {
|
|
|
- StartInfo = new ProcessStartInfo {
|
|
|
- RedirectStandardInput = true,
|
|
|
- FileName = "pbcopy"
|
|
|
+ } 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 ();
|
|
|
}
|
|
|
- }) {
|
|
|
- copy.Start ();
|
|
|
- copy.StandardInput.Write (clipText);
|
|
|
- copy.StandardInput.Close ();
|
|
|
- copy.WaitForExit ();
|
|
|
- }
|
|
|
- getClipText = Clipboard.Contents.ToString ();
|
|
|
+ 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}\\\"\""
|
|
|
+ } 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 ();
|
|
|
}
|
|
|
- }) {
|
|
|
- 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 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;
|
|
|
+ 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 ();
|
|
|
|