Skip to content

Commit f5dab58

Browse files
iblislinStefanKarpinski
authored andcommitted
interactiveutil: clipboard for FreeBSD (#23151)
1 parent 4570ca7 commit f5dab58

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

base/interactiveutil.jl

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)