diakonos/lib/diakonos/clipboard-klipper.rb
2009-06-10 16:58:20 -04:00

63 lines
1.7 KiB
Ruby

module Diakonos
# Same interface as Diakonos::Clipboard, except interacts with KDE's Klipper
class ClipboardKlipper
def initialize
end
# Returns true iff some text was copied to klipper.
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.
# Thank you to pgas from irc.freenode.net#bash for help with this.
`clipping=$(cat #{clip_filename};printf "_"); dcop klipper klipper setClipboardContents "${clipping%_}"`
true
end
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
# ------------------------------
def clip
text = `dcop klipper klipper getClipboardContents`.split( "\n", -1 )
# getClipboardContents puts an extra newline on end; pop it off.
text.pop
text
end
# text is an array of Strings
# Returns true iff a clip was added,
# and only non-nil text can be added.
def add_clip( text )
return false if text.nil?
send_to_klipper text
end
# no-op.
def each
end
# 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.
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
end
end