@@ -133,30 +133,49 @@ if Sys.isapple()
133133 end
134134 clipboard () = read (` pbpaste` , String)
135135
136- elseif Sys. islinux ()
136+ elseif Sys. islinux () || Sys . KERNEL === :FreeBSD
137137 _clipboardcmd = nothing
138+ const _clipboardcmds = Dict (
139+ :copy => Dict (
140+ :xsel => Sys. islinux () ?
141+ ` xsel --nodetach --input --clipboard` : ` xsel -c` ,
142+ :xclip => ` xclip -silent -in -selection clipboard` ,
143+ ),
144+ :paste => Dict (
145+ :xsel => Sys. islinux () ?
146+ ` xsel --nodetach --output --clipboard` : ` xsel -p` ,
147+ :xclip => ` xclip -quiet -out -selection clipboard` ,
148+ )
149+ )
138150 function clipboardcmd ()
139151 global _clipboardcmd
140152 _clipboardcmd != = nothing && return _clipboardcmd
141153 for cmd in (:xclip , :xsel )
142154 success (pipeline (` which $cmd ` , DevNull)) && return _clipboardcmd = cmd
143155 end
144- error (" no clipboard command found, please install xsel or xclip" )
156+ pkgs = @static if Sys. islinux ()
157+ " xsel or xclip"
158+ elseif Sys. KERNEL === :FreeBSD
159+ " x11/xsel or x11/xclip"
160+ end
161+ error (" no clipboard command found, please install $pkgs " )
145162 end
146163 function clipboard (x)
147164 c = clipboardcmd ()
148- cmd = c == :xsel ? ` xsel --nodetach --input --clipboard ` :
149- c == :xclip ? ` xclip -silent -in -selection clipboard ` :
165+ cmd = get (_clipboardcmds[ :copy ], c, nothing )
166+ if cmd === nothing
150167 error (" unexpected clipboard command: $c " )
168+ end
151169 open (pipeline (cmd, stderr = STDERR), " w" ) do io
152170 print (io, x)
153171 end
154172 end
155173 function clipboard ()
156174 c = clipboardcmd ()
157- cmd = c == :xsel ? ` xsel --nodetach --output --clipboard ` :
158- c == :xclip ? ` xclip -quiet -out -selection clipboard ` :
175+ cmd = get (_clipboardcmds[ :paste ], c, nothing )
176+ if cmd === nothing
159177 error (" unexpected clipboard command: $c " )
178+ end
160179 read (pipeline (cmd, stderr = STDERR), String)
161180 end
162181
0 commit comments