Module: RuVim::Clipboard
- Defined in:
- lib/ruvim/clipboard.rb
Class Method Summary collapse
- .available? ⇒ Boolean
- .backend ⇒ Object
- .command_available?(name) ⇒ Boolean
- .detect_backend ⇒ Object
- .pbcopy_backend ⇒ Object
- .read ⇒ Object
- .reset_backend! ⇒ Object
- .wayland_backend ⇒ Object
- .write(text) ⇒ Object
- .xclip_backend ⇒ Object
- .xsel_backend ⇒ Object
Class Method Details
.available? ⇒ Boolean
9 10 11 |
# File 'lib/ruvim/clipboard.rb', line 9 def available? !backend.nil? end |
.backend ⇒ Object
42 43 44 |
# File 'lib/ruvim/clipboard.rb', line 42 def backend @backend ||= detect_backend end |
.command_available?(name) ⇒ Boolean
71 72 73 |
# File 'lib/ruvim/clipboard.rb', line 71 def command_available?(name) system("which", name, out: File::NULL, err: File::NULL) end |
.detect_backend ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/ruvim/clipboard.rb', line 46 def detect_backend return pbcopy_backend if command_available?("pbcopy") && command_available?("pbpaste") return wayland_backend if command_available?("wl-copy") && command_available?("wl-paste") return xclip_backend if command_available?("xclip") return xsel_backend if command_available?("xsel") nil end |
.pbcopy_backend ⇒ Object
55 56 57 |
# File 'lib/ruvim/clipboard.rb', line 55 def pbcopy_backend { write: %w[pbcopy], read: %w[pbpaste] } end |
.read ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/ruvim/clipboard.rb', line 13 def read cmd = backend&.dig(:read) return nil unless cmd out, status = Open3.capture2(*cmd) return nil unless status.success? out rescue StandardError nil end |
.reset_backend! ⇒ Object
38 39 40 |
# File 'lib/ruvim/clipboard.rb', line 38 def reset_backend! @backend = nil end |
.wayland_backend ⇒ Object
59 60 61 |
# File 'lib/ruvim/clipboard.rb', line 59 def wayland_backend { write: %w[wl-copy], read: %w[wl-paste -n] } end |
.write(text) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ruvim/clipboard.rb', line 25 def write(text) cmd = backend&.dig(:write) return false unless cmd Open3.popen2(*cmd) do |stdin, _stdout, wait| stdin.write(text.to_s) stdin.close return wait.value.success? end rescue StandardError false end |
.xclip_backend ⇒ Object
63 64 65 |
# File 'lib/ruvim/clipboard.rb', line 63 def xclip_backend { write: %w[xclip -selection clipboard -in], read: %w[xclip -selection clipboard -out] } end |
.xsel_backend ⇒ Object
67 68 69 |
# File 'lib/ruvim/clipboard.rb', line 67 def xsel_backend { write: %w[xsel --clipboard --input], read: %w[xsel --clipboard --output] } end |