From f5dab584f3635ca12b86a866402bf23bb66e3112 Mon Sep 17 00:00:00 2001 From: Iblis Lin Date: Sun, 17 Dec 2017 01:54:46 +0800 Subject: [PATCH] interactiveutil: clipboard for FreeBSD (#23151) --- base/interactiveutil.jl | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/base/interactiveutil.jl b/base/interactiveutil.jl index c21188deb482e..7b24e76ea6c98 100644 --- a/base/interactiveutil.jl +++ b/base/interactiveutil.jl @@ -133,30 +133,49 @@ if Sys.isapple() end clipboard() = read(`pbpaste`, String) -elseif Sys.islinux() +elseif Sys.islinux() || Sys.KERNEL === :FreeBSD _clipboardcmd = nothing + const _clipboardcmds = Dict( + :copy => Dict( + :xsel => Sys.islinux() ? + `xsel --nodetach --input --clipboard` : `xsel -c`, + :xclip => `xclip -silent -in -selection clipboard`, + ), + :paste => Dict( + :xsel => Sys.islinux() ? + `xsel --nodetach --output --clipboard` : `xsel -p`, + :xclip => `xclip -quiet -out -selection clipboard`, + ) + ) function clipboardcmd() global _clipboardcmd _clipboardcmd !== nothing && return _clipboardcmd for cmd in (:xclip, :xsel) success(pipeline(`which $cmd`, DevNull)) && return _clipboardcmd = cmd end - error("no clipboard command found, please install xsel or xclip") + pkgs = @static if Sys.islinux() + "xsel or xclip" + elseif Sys.KERNEL === :FreeBSD + "x11/xsel or x11/xclip" + end + error("no clipboard command found, please install $pkgs") end function clipboard(x) c = clipboardcmd() - cmd = c == :xsel ? `xsel --nodetach --input --clipboard` : - c == :xclip ? `xclip -silent -in -selection clipboard` : + cmd = get(_clipboardcmds[:copy], c, nothing) + if cmd === nothing error("unexpected clipboard command: $c") + end open(pipeline(cmd, stderr=STDERR), "w") do io print(io, x) end end function clipboard() c = clipboardcmd() - cmd = c == :xsel ? `xsel --nodetach --output --clipboard` : - c == :xclip ? `xclip -quiet -out -selection clipboard` : + cmd = get(_clipboardcmds[:paste], c, nothing) + if cmd === nothing error("unexpected clipboard command: $c") + end read(pipeline(cmd, stderr=STDERR), String) end