Class: Diakonos::ClipboardKlipperDBus

Inherits:
Object
  • Object
show all
Defined in:
lib/diakonos/clipboard-klipper-dbus.rb

Overview

Same interface as Diakonos::Clipboard, except interacts with Klipper in KDE4 (via dbus)

Instance Method Summary collapse

Constructor Details

#initializeClipboardKlipperDBus

Returns a new instance of ClipboardKlipperDBus.



6
7
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 6

def initialize
end

Instance Method Details

#add_clip(text) ⇒ Object

text is an array of Strings Returns true iff a clip was added, and only non-nil text can be added.



52
53
54
55
56
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 52

def add_clip( text )
  return false  if text.nil?

  send_to_klipper text
end

#append_to_clip(text) ⇒ Object

text is an array of Strings (lines) Appends the lines to the current clip. If no current clip, then a new clip is created. Returns true iff the text was successfully appended.



66
67
68
69
70
71
72
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 66

def append_to_clip( text )
  return false  if text.nil?

  last_clip = clip
  last_clip.pop  if last_clip[ -1 ] == ""
  send_to_klipper last_clip + text
end

#clipObject




33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 33

def clip
  awk_script = (
    'BEGIN { output = ""; } { if ( NR > 1 ) { output = output $0 "\\n"; } } END ' +
    '{ print substr(output, 12, length(output) - 13); }'
  )

  text = (
    `dbus-send --print-reply --dest=org.kde.klipper \
    /klipper org.kde.klipper.klipper.getClipboardContents | awk '#{awk_script}'`
  ).split( "\n", -1 )
  # getClipboardContents puts an extra newline on end; pop it off.
  text.pop

  text
end

#eachObject

no-op.



59
60
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 59

def each
end

#send_to_klipper(text) ⇒ Object

Returns true iff some text was copied to klipper.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 10

def send_to_klipper( text )
  return false  if text.nil?

  clip_filename = write_to_clip_file( text.join( "\n" ) )

  # A little shell sorcery to ensure the shell doesn't strip off trailing newlines.
  `clipping=$(cat #{clip_filename};printf "_"); \
  dbus-send --type=method_call --dest=org.kde.klipper \
  /klipper org.kde.klipper.klipper.setClipboardContents string:"${clipping%_}"`

  true
end

#write_to_clip_file(text) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/diakonos/clipboard-klipper-dbus.rb', line 23

def write_to_clip_file( text )
  clip_filename = $diakonos.diakonos_home + "/clip.txt"
  File.open( clip_filename, "w" ) do |f|
    f.print text
  end
  clip_filename
end