win32-clipboard 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +39 -0
- data/MANIFEST +11 -0
- data/README +106 -0
- data/examples/clipboard_test.rb +39 -0
- data/lib/win32/clipboard.rb +182 -0
- data/test/tc_clipboard.rb +94 -0
- metadata +51 -0
data/CHANGES
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
== 0.4.0 - 24-Feb-2006
|
2
|
+
* Removed the C version entirely and replaced it with a pure Ruby version
|
3
|
+
that uses the Win32API package.
|
4
|
+
* Added a gemspec.
|
5
|
+
* Added a install.rb file.
|
6
|
+
|
7
|
+
== 0.3.1 - 2-Feb-2006
|
8
|
+
* Unicode fix to handle characters with null bytes. Thanks go to Brian
|
9
|
+
Marick for the spot.
|
10
|
+
|
11
|
+
== 0.3.0 - 26-May-2005
|
12
|
+
* Changed the Clipboard.data= method to Clipboard.set_data because it does,
|
13
|
+
in fact, take up to two arguments. This API change is the main reason for
|
14
|
+
the VERSION bump.
|
15
|
+
* Added Clipboard.get_data method as an alias for Clipboard.data.
|
16
|
+
* Removed the clipboard.rd file. The Clipboard.txt file is now rdoc friendly.
|
17
|
+
* Now Unicode friendly.
|
18
|
+
* Added more tests, including Unicode test.
|
19
|
+
* General code cleanup.
|
20
|
+
|
21
|
+
== 0.2.1 - 28-Feb-2005
|
22
|
+
* Moved the 'examples' directory to the toplevel directory.
|
23
|
+
* Renamed the sample script to 'clipboard_test.rb'.
|
24
|
+
* Made this document and README rdoc friendly.
|
25
|
+
|
26
|
+
== 0.2.0 - 12-Jul-2004
|
27
|
+
* Made Clipboard a class instead of a module.
|
28
|
+
* Moved the ClipboardError class under the Win32 module.
|
29
|
+
* Added the formats() class method.
|
30
|
+
* Added the register_format class method.
|
31
|
+
* Added the format_available? class method.
|
32
|
+
* Added the format_name class method.
|
33
|
+
* Replaced all instances (1) of the deprecated STR2CSTR() function with the
|
34
|
+
StringValuePtr() function. This means that as of version 0.2.0 this package
|
35
|
+
requires Ruby 1.8.0 or later.
|
36
|
+
* Moved the sample script to doc/examples.
|
37
|
+
|
38
|
+
== 0.1.0 - 19-Nov-2003
|
39
|
+
* Initial release
|
data/MANIFEST
ADDED
data/README
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
== Description
|
2
|
+
win32-clipboard - a Ruby package for interacting with the Win32 clipboard.
|
3
|
+
|
4
|
+
== Synopsis
|
5
|
+
require "win32/clipboard"
|
6
|
+
include Win32
|
7
|
+
|
8
|
+
puts "Data on clipboard: " + Clipboard.data
|
9
|
+
puts "Number of available formats: " + Clipboard.num_formats
|
10
|
+
|
11
|
+
puts "Setting data to 'foobar'"
|
12
|
+
Clipboard.data = "foobar"
|
13
|
+
|
14
|
+
puts "Clipboard now contains: " + Clipboard.data
|
15
|
+
|
16
|
+
puts "Clearing clipboard"
|
17
|
+
Clipboard.empty
|
18
|
+
|
19
|
+
== Class Methods
|
20
|
+
Clipboard.data(format=nil)
|
21
|
+
Clipboard.get_data(format=nil)
|
22
|
+
Returns the data currently in the clipboard. If 'format' is
|
23
|
+
specified, it will attempt to retrieve the data in that format. The
|
24
|
+
default is Clipboard::TEXT. See the 'Constants' section for
|
25
|
+
the supported formats.
|
26
|
+
|
27
|
+
Note that this method does implicit conversions on formats with regards
|
28
|
+
to text data. See the MSDN documentation for more details.
|
29
|
+
|
30
|
+
Clipboard.set_data(data, format=nil)
|
31
|
+
Sets the clipboard contents to the data that you specify. You may
|
32
|
+
optionally specify a clipboard format. The default is Clipboard::TEXT.
|
33
|
+
|
34
|
+
See the 'Constants' section for a list of the supported formats.
|
35
|
+
|
36
|
+
Clipboard.empty
|
37
|
+
Empty the contents of the clipboard
|
38
|
+
|
39
|
+
Clipboard.format_available?(format_number)
|
40
|
+
Returns true if 'format_number' is currently available on the clipboard,
|
41
|
+
false otherwise.
|
42
|
+
|
43
|
+
Clipboard.format_name(format_number)
|
44
|
+
Returns the corresponding name for the given 'format_number', or nil
|
45
|
+
if it does not exist.
|
46
|
+
|
47
|
+
Clipboard.formats
|
48
|
+
Returns a hash of all the current formats, with the format number as the
|
49
|
+
key and the format name as the value for that key.
|
50
|
+
|
51
|
+
Clipboard.num_formats
|
52
|
+
Returns the number of different data formats currently on the clipboard.
|
53
|
+
|
54
|
+
Clipboard.register_format(format)
|
55
|
+
Registers the given 'format' (a String) as a clipboard format, which
|
56
|
+
can then be used as a valid clipboard format.
|
57
|
+
|
58
|
+
If a registered format with the specified name already exists, a new
|
59
|
+
format is not registered and the return value identifies the existing
|
60
|
+
format. This enables more than one application to copy and paste data
|
61
|
+
using the same registered clipboard format. Note that the format name
|
62
|
+
comparison is case-insensitive.
|
63
|
+
|
64
|
+
Registered clipboard formats are identified by values in the range 0xC000
|
65
|
+
through 0xFFFF.
|
66
|
+
|
67
|
+
== Error Classes
|
68
|
+
ClipboardError
|
69
|
+
Typically only raised if the clipboard fails to open or if you attempt to
|
70
|
+
register an invalid format.
|
71
|
+
|
72
|
+
== Constants
|
73
|
+
=== Standard Constants
|
74
|
+
VERSION
|
75
|
+
Returns the current version number of this package, as a String.
|
76
|
+
|
77
|
+
=== Clipboard Formats
|
78
|
+
Clipboard::OEMTEXT
|
79
|
+
Text format containing characters in the OEM character set. Each line ends
|
80
|
+
with a carriage return/linefeed (CR-LF) combination. A null character
|
81
|
+
signals the end of the data.
|
82
|
+
|
83
|
+
Clipboard::TEXT
|
84
|
+
Text format. Each line ends with a carriage return/linefeed (CR-LF)
|
85
|
+
combination. A null character signals the end of the data. Use this format
|
86
|
+
for ANSI text.
|
87
|
+
|
88
|
+
Clipboard::UNICODETEXT
|
89
|
+
Unicode text format. Each line ends with a carriage return/linefeed
|
90
|
+
(CR-LF) combination. A null character signals the end of the data. This
|
91
|
+
format is only supported on NT/2000/XP.
|
92
|
+
|
93
|
+
== Future Plans
|
94
|
+
Add more formatting option contants and related methods.
|
95
|
+
|
96
|
+
== License
|
97
|
+
Ruby's
|
98
|
+
|
99
|
+
== Copyright
|
100
|
+
(C) 2003-2006 Daniel J. Berger
|
101
|
+
All Rights Reserved
|
102
|
+
|
103
|
+
== Author
|
104
|
+
Daniel J. Berger
|
105
|
+
djberg96 at gmail dot com
|
106
|
+
imperator/mok on IRC
|
@@ -0,0 +1,39 @@
|
|
1
|
+
##########################################################################
|
2
|
+
# clipboard_test.rb (win32-clipboard)
|
3
|
+
#
|
4
|
+
# Generic test script for those without TestUnit installed, or for
|
5
|
+
# general futzing.
|
6
|
+
##########################################################################
|
7
|
+
base = File.basename(Dir.pwd)
|
8
|
+
if base == "examples" || base =~ /win32-clipboard/
|
9
|
+
require "ftools"
|
10
|
+
Dir.chdir("..") if base == "examples"
|
11
|
+
Dir.mkdir("win32") unless File.exists?("win32")
|
12
|
+
File.copy("clipboard.so","win32")
|
13
|
+
$LOAD_PATH.unshift Dir.pwd
|
14
|
+
Dir.chdir("examples") if base =~ /win32-clipboard/
|
15
|
+
end
|
16
|
+
|
17
|
+
require "win32/clipboard"
|
18
|
+
require "pp"
|
19
|
+
include Win32
|
20
|
+
|
21
|
+
puts "VERSION: " + Clipboard::VERSION
|
22
|
+
|
23
|
+
pp Clipboard.formats
|
24
|
+
pp Clipboard.data(Clipboard::DIB)
|
25
|
+
pp Clipboard.format_available?(49161)
|
26
|
+
pp Clipboard.format_name(999999999)
|
27
|
+
pp Clipboard.format_available?(9999999)
|
28
|
+
|
29
|
+
puts "Data was: [" + Clipboard.data + "]"
|
30
|
+
|
31
|
+
Clipboard.set_data("foobar")
|
32
|
+
|
33
|
+
puts "Data is now: [" + Clipboard.data + "]"
|
34
|
+
|
35
|
+
puts "Number of available formats: " + Clipboard.num_formats.to_s
|
36
|
+
|
37
|
+
Clipboard.empty
|
38
|
+
|
39
|
+
puts "Clipboard emptied"
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require "Win32API"
|
2
|
+
|
3
|
+
module Win32
|
4
|
+
class ClipboardError < StandardError; end
|
5
|
+
class Clipboard
|
6
|
+
VERSION = '0.4.0'
|
7
|
+
|
8
|
+
# Clipboard data types
|
9
|
+
TEXT = 1
|
10
|
+
OEMTEXT = 7
|
11
|
+
UNICODETEXT = 13
|
12
|
+
|
13
|
+
# Alloc constants
|
14
|
+
GMEM_MOVEABLE = 0x0002
|
15
|
+
GMEM_ZEROINIT = 0x0040
|
16
|
+
GHND = 0x0042
|
17
|
+
|
18
|
+
# Clipboard specific functions
|
19
|
+
@@OpenClipboard = Win32API.new('user32', 'OpenClipboard', 'L', 'I')
|
20
|
+
@@CloseClipboard = Win32API.new('user32', 'CloseClipboard', 'V', 'I')
|
21
|
+
@@GetClipboardData = Win32API.new('user32', 'GetClipboardData', 'I', 'P')
|
22
|
+
@@SetClipboardData = Win32API.new('user32', 'SetClipboardData', 'II', 'I')
|
23
|
+
@@EmptyClipboard = Win32API.new('user32', 'EmptyClipboard', 'V', 'I')
|
24
|
+
|
25
|
+
@@CountClipboardFormats = Win32API.new(
|
26
|
+
'user32', 'CountClipboardFormats', 'V', 'I'
|
27
|
+
)
|
28
|
+
|
29
|
+
@@IsClipboardFormatAvailable = Win32API.new(
|
30
|
+
'user32', 'IsClipboardFormatAvailable', 'I', 'I'
|
31
|
+
)
|
32
|
+
|
33
|
+
@@GetClipboardFormatName = Win32API.new(
|
34
|
+
'user32', 'GetClipboardFormatName', 'IPI', 'I'
|
35
|
+
)
|
36
|
+
|
37
|
+
@@EnumClipboardFormats = Win32API.new(
|
38
|
+
'user32', 'EnumClipboardFormats', 'I', 'I'
|
39
|
+
)
|
40
|
+
|
41
|
+
@@RegisterClipboardFormat = Win32API.new(
|
42
|
+
'user32', 'RegisterClipboardFormat', 'P', 'I'
|
43
|
+
)
|
44
|
+
|
45
|
+
# Generic Win32 functions
|
46
|
+
@@GlobalAlloc = Win32API.new('kernel32', 'GlobalAlloc', 'II' ,'I')
|
47
|
+
@@GlobalLock = Win32API.new('kernel32', 'GlobalLock', 'I' ,'I')
|
48
|
+
@@GlobalFree = Win32API.new('kernel32', 'GlobalFree', 'I' ,'I')
|
49
|
+
@@Memcpy = Win32API.new('msvcrt', 'memcpy', 'IPI', 'I')
|
50
|
+
|
51
|
+
# Sets the clipboard contents to the data that you specify. You may
|
52
|
+
# optionally specify a clipboard format. The default is Clipboard::TEXT.
|
53
|
+
def self.set_data(clip_data, format = TEXT)
|
54
|
+
self.open
|
55
|
+
@@EmptyClipboard.call
|
56
|
+
|
57
|
+
# NULL terminate text
|
58
|
+
case format
|
59
|
+
when TEXT, OEMTEXT, UNICODETEXT
|
60
|
+
clip_data << "\0"
|
61
|
+
end
|
62
|
+
|
63
|
+
# Global Allocate a movable piece of memory.
|
64
|
+
hmem = @@GlobalAlloc.call(GHND, clip_data.length + 4)
|
65
|
+
mem = @@GlobalLock.call(hmem)
|
66
|
+
@@Memcpy.call(mem, clip_data, clip_data.length)
|
67
|
+
|
68
|
+
# Set the new data
|
69
|
+
if @@SetClipboardData.call(format, hmem) == 0
|
70
|
+
@@GlobalFree.call(hmem)
|
71
|
+
self.close
|
72
|
+
raise ClipboardError, "SetClipboardData() failed"
|
73
|
+
end
|
74
|
+
|
75
|
+
@@GlobalFree.call(hmem)
|
76
|
+
self.close
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns the data currently in the clipboard. If 'format' is
|
81
|
+
# specified, it will attempt to retrieve the data in that format. The
|
82
|
+
# default is Clipboard::TEXT.
|
83
|
+
def self.data(format = TEXT)
|
84
|
+
clipdata = ""
|
85
|
+
self.open
|
86
|
+
begin
|
87
|
+
clipdata = @@GetClipboardData.call(format)
|
88
|
+
rescue ArgumentError
|
89
|
+
# Assume failure is caused by no data in clipboard
|
90
|
+
end
|
91
|
+
self.close
|
92
|
+
clipdata
|
93
|
+
end
|
94
|
+
|
95
|
+
# An alias for Clipboard.data.
|
96
|
+
def self.get_data(format = TEXT)
|
97
|
+
self.data(format)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Empties the contents of the clipboard.
|
101
|
+
def self.empty
|
102
|
+
self.open
|
103
|
+
@@EmptyClipboard.call
|
104
|
+
self.close
|
105
|
+
self
|
106
|
+
end
|
107
|
+
|
108
|
+
# Returns the number of different data formats currently on the
|
109
|
+
# clipboard.
|
110
|
+
def self.num_formats
|
111
|
+
count = 0
|
112
|
+
self.open
|
113
|
+
count = @@CountClipboardFormats.call
|
114
|
+
self.close
|
115
|
+
count
|
116
|
+
end
|
117
|
+
|
118
|
+
# Returns whether or not +format+ (an int) is currently available.
|
119
|
+
def self.format_available?(format)
|
120
|
+
@@IsClipboardFormatAvailable.call(format) == 0 ? false : true
|
121
|
+
end
|
122
|
+
|
123
|
+
# Returns the corresponding name for the given 'format_number', or nil
|
124
|
+
# if it does not exist. You cannot specify any of the predefined
|
125
|
+
# clipboard formats (or nil is returned), only registered formats.
|
126
|
+
def self.format_name(format)
|
127
|
+
val = nil
|
128
|
+
buf = 0.chr * 80
|
129
|
+
self.open
|
130
|
+
if @@GetClipboardFormatName.call(format, buf, buf.length) != 0
|
131
|
+
val = buf
|
132
|
+
end
|
133
|
+
self.close
|
134
|
+
val.split(0.chr).first rescue nil
|
135
|
+
end
|
136
|
+
|
137
|
+
# Returns a hash of all the current formats, with the format number as
|
138
|
+
# the key and the format name as the value for that key.
|
139
|
+
def self.formats
|
140
|
+
formats = {}
|
141
|
+
format = 0
|
142
|
+
|
143
|
+
self.open
|
144
|
+
while 0 != (format = @@EnumClipboardFormats.call(format))
|
145
|
+
buf = 0.chr * 80
|
146
|
+
@@GetClipboardFormatName.call(format, buf, buf.length)
|
147
|
+
formats[format] = buf.split(0.chr).first
|
148
|
+
end
|
149
|
+
self.close
|
150
|
+
formats
|
151
|
+
end
|
152
|
+
|
153
|
+
# Registers the given 'format' (a String) as a clipboard format, which
|
154
|
+
# can then be used as a valid clipboard format.
|
155
|
+
#
|
156
|
+
# If a registered format with the specified name already exists, a new
|
157
|
+
# format is not registered and the return value identifies the existing
|
158
|
+
# format. This enables more than one application to copy and paste data
|
159
|
+
# using the same registered clipboard format. Note that the format name
|
160
|
+
# comparison is case-insensitive.
|
161
|
+
#
|
162
|
+
# Registered clipboard formats are identified by values in the range 0xC000
|
163
|
+
# through 0xFFFF.
|
164
|
+
def self.register_format(format)
|
165
|
+
if @@RegisterClipboardFormat.call(format) == 0
|
166
|
+
raise ClipboardError, "RegisterClipboardFormat() call failed"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
def self.open
|
173
|
+
if 0 == @@OpenClipboard.call(0)
|
174
|
+
raise ClipboardError, "OpenClipboard() failed"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.close
|
179
|
+
@@CloseClipboard.call
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
###########################################################################
|
2
|
+
# tc_clipboard.rb
|
3
|
+
#
|
4
|
+
# Test suite for the win32-clipboard package. This will copy and remove
|
5
|
+
# data from your clipboard. If your current clipboard data is crucial to
|
6
|
+
# you, please save it first.
|
7
|
+
###########################################################################
|
8
|
+
base = File.basename(Dir.pwd)
|
9
|
+
if base == 'test' || base =~ /win32-clipboard/
|
10
|
+
Dir.chdir('..') if base == 'test'
|
11
|
+
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
12
|
+
Dir.chdir('test') if base =~ /win32-clipboard/
|
13
|
+
end
|
14
|
+
|
15
|
+
require "win32/clipboard"
|
16
|
+
require "test/unit"
|
17
|
+
include Win32
|
18
|
+
|
19
|
+
class TC_Win32ClipBoard < Test::Unit::TestCase
|
20
|
+
def test_version
|
21
|
+
assert_equal('0.4.0', Clipboard::VERSION)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_data
|
25
|
+
assert_respond_to(Clipboard, :data)
|
26
|
+
assert_nothing_raised{ Clipboard.data }
|
27
|
+
assert_kind_of(String, Clipboard.data, 'bad data type')
|
28
|
+
assert_raises(NameError){ Clipboard.data(CF_FOO) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_set_data
|
32
|
+
assert_respond_to(Clipboard, :set_data)
|
33
|
+
assert_nothing_raised{ Clipboard.set_data("foo") }
|
34
|
+
assert_nothing_raised{
|
35
|
+
Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
|
36
|
+
}
|
37
|
+
assert_raises(NameError){ Clipboard.set_data('foo', CF_FOO) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_set_and_get_ascii
|
41
|
+
assert_nothing_raised{ Clipboard.set_data('foobar') }
|
42
|
+
assert_equal('foobar', Clipboard.data)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_set_and_get_unicode
|
46
|
+
assert_nothing_raised{
|
47
|
+
Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
|
48
|
+
}
|
49
|
+
assert_equal('Ηελλας', Clipboard.data(Clipboard::UNICODETEXT))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_empty
|
53
|
+
assert_respond_to(Clipboard, :empty)
|
54
|
+
assert_nothing_raised{ Clipboard.empty }
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_num_formats
|
58
|
+
assert_respond_to(Clipboard, :num_formats)
|
59
|
+
assert_nothing_raised{ Clipboard.num_formats }
|
60
|
+
assert_kind_of(Fixnum, Clipboard.num_formats)
|
61
|
+
end
|
62
|
+
|
63
|
+
# This TypeError check causes a segfault when using Win32API in 1.8.4 or
|
64
|
+
# earlier.
|
65
|
+
def test_register_format
|
66
|
+
assert_respond_to(Clipboard,:register_format)
|
67
|
+
assert_nothing_raised{ Clipboard.register_format('foo') }
|
68
|
+
#assert_raises(TypeError){ Clipboard.register_format(1) }
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_formats
|
72
|
+
assert_respond_to(Clipboard, :formats)
|
73
|
+
assert_nothing_raised{ Clipboard.formats }
|
74
|
+
assert_kind_of(Hash, Clipboard.formats)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_format_available
|
78
|
+
assert_respond_to(Clipboard, :format_available?)
|
79
|
+
assert_nothing_raised{ Clipboard.format_available?(1) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_format_name
|
83
|
+
assert_respond_to(Clipboard, :format_name)
|
84
|
+
assert_nothing_raised{ Clipboard.format_name(1) }
|
85
|
+
assert_nil(Clipboard.format_name(9999999))
|
86
|
+
assert_raises(TypeError){ Clipboard.format_name('foo') }
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_constants
|
90
|
+
assert_not_nil(Clipboard::TEXT)
|
91
|
+
assert_not_nil(Clipboard::OEMTEXT)
|
92
|
+
assert_not_nil(Clipboard::UNICODETEXT)
|
93
|
+
end
|
94
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: win32-clipboard
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.4.0
|
7
|
+
date: 2006-02-24 00:00:00 -07:00
|
8
|
+
summary: A package for interacting with the Windows clipboard
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: djberg96@gmail.com
|
12
|
+
homepage: http://www.rubyforge.org/projects/win32utils
|
13
|
+
rubyforge_project: win32utils
|
14
|
+
description: A package for interacting with the Windows clipboard
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Daniel J. Berger
|
30
|
+
files:
|
31
|
+
- examples/clipboard_test.rb
|
32
|
+
- lib/win32/clipboard.rb
|
33
|
+
- test/tc_clipboard.rb
|
34
|
+
- CHANGES
|
35
|
+
- MANIFEST
|
36
|
+
- README
|
37
|
+
test_files:
|
38
|
+
- test/tc_clipboard.rb
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- CHANGES
|
43
|
+
- README
|
44
|
+
executables: []
|
45
|
+
|
46
|
+
extensions: []
|
47
|
+
|
48
|
+
requirements: []
|
49
|
+
|
50
|
+
dependencies: []
|
51
|
+
|