hotkeys 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +19 -0
- data/README.md +42 -0
- data/Rakefile +40 -0
- data/hotkeys.gemspec +41 -0
- data/lib/hotkeys/support/bridgesupport/Events.bridgesupport +259 -0
- data/lib/hotkeys/support/bundles/shortcut.bundle +0 -0
- data/lib/hotkeys/support/bundles/shortcut.m +104 -0
- data/lib/hotkeys/support/keys.rb +188 -0
- data/lib/hotkeys/support.rb +25 -0
- data/lib/hotkeys/version.rb +30 -0
- data/lib/hotkeys.rb +54 -0
- metadata +96 -0
data/CHANGES
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
None yet!
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
HotKeys
|
2
|
+
=====
|
3
|
+
|
4
|
+
A simple gem which allows you to bind global hot keys with macruby
|
5
|
+
|
6
|
+
1. `gem install hotkeys`
|
7
|
+
2. `macruby examples/simple.rb`
|
8
|
+
|
9
|
+
Usage example:
|
10
|
+
`macruby examples/simple.rb`
|
11
|
+
|
12
|
+
require File.dirname(__FILE__) + '/lib/hotkeys'
|
13
|
+
|
14
|
+
# Delegate method called when the app finished loading
|
15
|
+
def applicationDidFinishLaunching(notification)
|
16
|
+
@hotkeys = HotKeys.new
|
17
|
+
|
18
|
+
@hotkeys.addHotString("R+COMMAND") do
|
19
|
+
puts "LOL MACRUBY RUNS"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Seriously for a second; For some reason a global hotkey or at least
|
23
|
+
# the way I've got it to working blocks the keystroke. Which I guess is normal?
|
24
|
+
#
|
25
|
+
# Maybe I'll hack around that with system events for a bypass option, it wouldn't
|
26
|
+
# be elegate, but this is new territory anywho
|
27
|
+
#
|
28
|
+
@hotkeys.addHotString("S+COMMAND") do
|
29
|
+
puts "NO SAVING FOR YOU, LOL" # Trolled myself with this for longer than I should of
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# We are delegating the application to self so the script will know when
|
34
|
+
# it finished loading
|
35
|
+
NSApplication.sharedApplication.delegate = self
|
36
|
+
NSApplication.sharedApplication.run
|
37
|
+
|
38
|
+
Todo
|
39
|
+
=====
|
40
|
+
* Clean up shortcut.m
|
41
|
+
|
42
|
+
# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com> - MIT
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
require 'lib/hotkeys/version.rb'
|
7
|
+
|
8
|
+
# task :default => :test
|
9
|
+
# task :spec => :test
|
10
|
+
|
11
|
+
# PACKAGING ============================================================
|
12
|
+
|
13
|
+
if defined?(Gem)
|
14
|
+
# Load the gemspec using the same limitations as github
|
15
|
+
def spec
|
16
|
+
require 'rubygems' unless defined? Gem::Specification
|
17
|
+
@spec ||= eval(File.read('hotkeys.gemspec'))
|
18
|
+
end
|
19
|
+
|
20
|
+
def package(ext='')
|
21
|
+
"pkg/hotkeys-#{spec.version}" + ext
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Build packages'
|
25
|
+
task :package => %w[.gem].map {|e| package(e)}
|
26
|
+
|
27
|
+
desc 'Build and install as local gem'
|
28
|
+
task :install => package('.gem') do
|
29
|
+
`gem install #{package('.gem')}`
|
30
|
+
end
|
31
|
+
|
32
|
+
directory 'pkg/'
|
33
|
+
CLOBBER.include('pkg')
|
34
|
+
|
35
|
+
file package('.gem') => %w[pkg/ hotkeys.gemspec] + spec.files do |f|
|
36
|
+
`gem build hotkeys.gemspec`
|
37
|
+
mv File.basename(f.name), f.name
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/hotkeys.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'lib/hotkeys/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
+
|
7
|
+
s.name = %q{hotkeys}
|
8
|
+
s.version = "#{Hotkeys::Version::STRING}"
|
9
|
+
s.authors = ["Rob Lowe"]
|
10
|
+
s.date = %q{2011-06-08}
|
11
|
+
s.description = %q{A simple gem which allows you to bind global hot keys with macruby}
|
12
|
+
s.email = %q{rob@iblargz.com}
|
13
|
+
s.extra_rdoc_files = [
|
14
|
+
"LICENSE",
|
15
|
+
"CHANGES",
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
"Gemfile",
|
20
|
+
"Gemfile.lock",
|
21
|
+
"LICENSE",
|
22
|
+
"README.md",
|
23
|
+
"Rakefile",
|
24
|
+
"hotkeys.gemspec",
|
25
|
+
"lib/hotkeys.rb",
|
26
|
+
"lib/hotkeys/version.rb",
|
27
|
+
"lib/hotkeys/support.rb",
|
28
|
+
"lib/hotkeys/support/bridgesupport/Events.bridgesupport",
|
29
|
+
"lib/hotkeys/support/bundles/shortcut.bundle",
|
30
|
+
"lib/hotkeys/support/bundles/shortcut.m",
|
31
|
+
"lib/hotkeys/support/keys.rb"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/RobertLowe/hotkeys}
|
34
|
+
s.licenses = ["MIT"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = %q{1.4.2}
|
37
|
+
s.summary = %q{A simple gem which allows you to bind global hot keys with macruby}
|
38
|
+
|
39
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
40
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
41
|
+
end
|
@@ -0,0 +1,259 @@
|
|
1
|
+
<?xml version='1.0'?>
|
2
|
+
<!DOCTYPE signatures SYSTEM "file://localhost/System/Library/DTDs/BridgeSupport.dtd">
|
3
|
+
<signatures version='0.9'>
|
4
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework'/>
|
5
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework'/>
|
6
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework'/>
|
7
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework'/>
|
8
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework'/>
|
9
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework'/>
|
10
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework'/>
|
11
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework'/>
|
12
|
+
<depends_on path='/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework'/>
|
13
|
+
<depends_on path='/System/Library/Frameworks/ApplicationServices.framework'/>
|
14
|
+
<enum name='activMask' value='256'/>
|
15
|
+
<enum name='activateEvt' value='8'/>
|
16
|
+
<enum name='activeFlag' value='1'/>
|
17
|
+
<enum name='activeFlagBit' value='0'/>
|
18
|
+
<enum name='adbAddrMask' value='16711680'/>
|
19
|
+
<enum name='alphaLock' value='1024'/>
|
20
|
+
<enum name='alphaLockBit' value='10'/>
|
21
|
+
<enum name='app1Evt' value='12'/>
|
22
|
+
<enum name='app1Mask' value='4096'/>
|
23
|
+
<enum name='app2Evt' value='13'/>
|
24
|
+
<enum name='app2Mask' value='8192'/>
|
25
|
+
<enum name='app3Evt' value='14'/>
|
26
|
+
<enum name='app3Mask' value='16384'/>
|
27
|
+
<enum name='app4Evt' value='15'/>
|
28
|
+
<enum name='app4Mask' value='32768'/>
|
29
|
+
<enum name='autoKey' value='5'/>
|
30
|
+
<enum name='autoKeyMask' value='32'/>
|
31
|
+
<enum name='btnState' value='128'/>
|
32
|
+
<enum name='btnStateBit' value='7'/>
|
33
|
+
<enum name='charCodeMask' value='255'/>
|
34
|
+
<enum name='cmdKey' value='256'/>
|
35
|
+
<enum name='cmdKeyBit' value='8'/>
|
36
|
+
<enum name='controlKey' value='4096'/>
|
37
|
+
<enum name='controlKeyBit' value='12'/>
|
38
|
+
<enum name='diskEvt' value='7'/>
|
39
|
+
<enum name='diskMask' value='128'/>
|
40
|
+
<enum name='driverEvt' value='11'/>
|
41
|
+
<enum name='driverMask' value='2048'/>
|
42
|
+
<enum name='everyEvent' value='65535'/>
|
43
|
+
<enum name='highLevelEventMask' value='1024'/>
|
44
|
+
<enum name='kAppleLogoCharCode' value='20'/>
|
45
|
+
<enum name='kAppleLogoUnicode' value='63743'/>
|
46
|
+
<enum name='kBackspaceCharCode' value='8'/>
|
47
|
+
<enum name='kBellCharCode' value='7'/>
|
48
|
+
<enum name='kBulletCharCode' value='165'/>
|
49
|
+
<enum name='kBulletUnicode' value='8226'/>
|
50
|
+
<enum name='kCheckCharCode' value='18'/>
|
51
|
+
<enum name='kCheckUnicode' value='10003'/>
|
52
|
+
<enum name='kClearCharCode' value='27'/>
|
53
|
+
<enum name='kCommandCharCode' value='17'/>
|
54
|
+
<enum name='kCommandUnicode' value='8984'/>
|
55
|
+
<enum name='kControlUnicode' value='8963'/>
|
56
|
+
<enum name='kDeleteCharCode' value='127'/>
|
57
|
+
<enum name='kDiamondCharCode' value='19'/>
|
58
|
+
<enum name='kDiamondUnicode' value='9670'/>
|
59
|
+
<enum name='kDownArrowCharCode' value='31'/>
|
60
|
+
<enum name='kEndCharCode' value='4'/>
|
61
|
+
<enum name='kEnterCharCode' value='3'/>
|
62
|
+
<enum name='kEscapeCharCode' value='27'/>
|
63
|
+
<enum name='kFormFeedCharCode' value='12'/>
|
64
|
+
<enum name='kFunctionKeyCharCode' value='16'/>
|
65
|
+
<enum name='kHelpCharCode' value='5'/>
|
66
|
+
<enum name='kHighLevelEvent' value='23'/>
|
67
|
+
<enum name='kHomeCharCode' value='1'/>
|
68
|
+
<enum name='kLeftArrowCharCode' value='28'/>
|
69
|
+
<enum name='kLineFeedCharCode' value='10'/>
|
70
|
+
<enum name='kNonBreakingSpaceCharCode' value='202'/>
|
71
|
+
<enum name='kNullCharCode' value='0'/>
|
72
|
+
<enum name='kOptionUnicode' value='8997'/>
|
73
|
+
<enum name='kPageDownCharCode' value='12'/>
|
74
|
+
<enum name='kPageUpCharCode' value='11'/>
|
75
|
+
<enum name='kPencilLeftUnicode' value='63490'/>
|
76
|
+
<enum name='kPencilUnicode' value='9998'/>
|
77
|
+
<enum name='kReturnCharCode' value='13'/>
|
78
|
+
<enum name='kRightArrowCharCode' value='29'/>
|
79
|
+
<enum name='kShiftUnicode' value='8679'/>
|
80
|
+
<enum name='kSpaceCharCode' value='32'/>
|
81
|
+
<enum name='kTabCharCode' value='9'/>
|
82
|
+
<enum name='kUpArrowCharCode' value='30'/>
|
83
|
+
<enum name='kVK_ANSI_0' value='29'/>
|
84
|
+
<enum name='kVK_ANSI_1' value='18'/>
|
85
|
+
<enum name='kVK_ANSI_2' value='19'/>
|
86
|
+
<enum name='kVK_ANSI_3' value='20'/>
|
87
|
+
<enum name='kVK_ANSI_4' value='21'/>
|
88
|
+
<enum name='kVK_ANSI_5' value='23'/>
|
89
|
+
<enum name='kVK_ANSI_6' value='22'/>
|
90
|
+
<enum name='kVK_ANSI_7' value='26'/>
|
91
|
+
<enum name='kVK_ANSI_8' value='28'/>
|
92
|
+
<enum name='kVK_ANSI_9' value='25'/>
|
93
|
+
<enum name='kVK_ANSI_A' value='0'/>
|
94
|
+
<enum name='kVK_ANSI_B' value='11'/>
|
95
|
+
<enum name='kVK_ANSI_Backslash' value='42'/>
|
96
|
+
<enum name='kVK_ANSI_C' value='8'/>
|
97
|
+
<enum name='kVK_ANSI_Comma' value='43'/>
|
98
|
+
<enum name='kVK_ANSI_D' value='2'/>
|
99
|
+
<enum name='kVK_ANSI_E' value='14'/>
|
100
|
+
<enum name='kVK_ANSI_Equal' value='24'/>
|
101
|
+
<enum name='kVK_ANSI_F' value='3'/>
|
102
|
+
<enum name='kVK_ANSI_G' value='5'/>
|
103
|
+
<enum name='kVK_ANSI_Grave' value='50'/>
|
104
|
+
<enum name='kVK_ANSI_H' value='4'/>
|
105
|
+
<enum name='kVK_ANSI_I' value='34'/>
|
106
|
+
<enum name='kVK_ANSI_J' value='38'/>
|
107
|
+
<enum name='kVK_ANSI_K' value='40'/>
|
108
|
+
<enum name='kVK_ANSI_Keypad0' value='82'/>
|
109
|
+
<enum name='kVK_ANSI_Keypad1' value='83'/>
|
110
|
+
<enum name='kVK_ANSI_Keypad2' value='84'/>
|
111
|
+
<enum name='kVK_ANSI_Keypad3' value='85'/>
|
112
|
+
<enum name='kVK_ANSI_Keypad4' value='86'/>
|
113
|
+
<enum name='kVK_ANSI_Keypad5' value='87'/>
|
114
|
+
<enum name='kVK_ANSI_Keypad6' value='88'/>
|
115
|
+
<enum name='kVK_ANSI_Keypad7' value='89'/>
|
116
|
+
<enum name='kVK_ANSI_Keypad8' value='91'/>
|
117
|
+
<enum name='kVK_ANSI_Keypad9' value='92'/>
|
118
|
+
<enum name='kVK_ANSI_KeypadClear' value='71'/>
|
119
|
+
<enum name='kVK_ANSI_KeypadDecimal' value='65'/>
|
120
|
+
<enum name='kVK_ANSI_KeypadDivide' value='75'/>
|
121
|
+
<enum name='kVK_ANSI_KeypadEnter' value='76'/>
|
122
|
+
<enum name='kVK_ANSI_KeypadEquals' value='81'/>
|
123
|
+
<enum name='kVK_ANSI_KeypadMinus' value='78'/>
|
124
|
+
<enum name='kVK_ANSI_KeypadMultiply' value='67'/>
|
125
|
+
<enum name='kVK_ANSI_KeypadPlus' value='69'/>
|
126
|
+
<enum name='kVK_ANSI_L' value='37'/>
|
127
|
+
<enum name='kVK_ANSI_LeftBracket' value='33'/>
|
128
|
+
<enum name='kVK_ANSI_M' value='46'/>
|
129
|
+
<enum name='kVK_ANSI_Minus' value='27'/>
|
130
|
+
<enum name='kVK_ANSI_N' value='45'/>
|
131
|
+
<enum name='kVK_ANSI_O' value='31'/>
|
132
|
+
<enum name='kVK_ANSI_P' value='35'/>
|
133
|
+
<enum name='kVK_ANSI_Period' value='47'/>
|
134
|
+
<enum name='kVK_ANSI_Q' value='12'/>
|
135
|
+
<enum name='kVK_ANSI_Quote' value='39'/>
|
136
|
+
<enum name='kVK_ANSI_R' value='15'/>
|
137
|
+
<enum name='kVK_ANSI_RightBracket' value='30'/>
|
138
|
+
<enum name='kVK_ANSI_S' value='1'/>
|
139
|
+
<enum name='kVK_ANSI_Semicolon' value='41'/>
|
140
|
+
<enum name='kVK_ANSI_Slash' value='44'/>
|
141
|
+
<enum name='kVK_ANSI_T' value='17'/>
|
142
|
+
<enum name='kVK_ANSI_U' value='32'/>
|
143
|
+
<enum name='kVK_ANSI_V' value='9'/>
|
144
|
+
<enum name='kVK_ANSI_W' value='13'/>
|
145
|
+
<enum name='kVK_ANSI_X' value='7'/>
|
146
|
+
<enum name='kVK_ANSI_Y' value='16'/>
|
147
|
+
<enum name='kVK_ANSI_Z' value='6'/>
|
148
|
+
<enum name='kVK_CapsLock' value='57'/>
|
149
|
+
<enum name='kVK_Command' value='55'/>
|
150
|
+
<enum name='kVK_Control' value='59'/>
|
151
|
+
<enum name='kVK_Delete' value='51'/>
|
152
|
+
<enum name='kVK_DownArrow' value='125'/>
|
153
|
+
<enum name='kVK_End' value='119'/>
|
154
|
+
<enum name='kVK_Escape' value='53'/>
|
155
|
+
<enum name='kVK_F1' value='122'/>
|
156
|
+
<enum name='kVK_F10' value='109'/>
|
157
|
+
<enum name='kVK_F11' value='103'/>
|
158
|
+
<enum name='kVK_F12' value='111'/>
|
159
|
+
<enum name='kVK_F13' value='105'/>
|
160
|
+
<enum name='kVK_F14' value='107'/>
|
161
|
+
<enum name='kVK_F15' value='113'/>
|
162
|
+
<enum name='kVK_F16' value='106'/>
|
163
|
+
<enum name='kVK_F17' value='64'/>
|
164
|
+
<enum name='kVK_F18' value='79'/>
|
165
|
+
<enum name='kVK_F19' value='80'/>
|
166
|
+
<enum name='kVK_F2' value='120'/>
|
167
|
+
<enum name='kVK_F20' value='90'/>
|
168
|
+
<enum name='kVK_F3' value='99'/>
|
169
|
+
<enum name='kVK_F4' value='118'/>
|
170
|
+
<enum name='kVK_F5' value='96'/>
|
171
|
+
<enum name='kVK_F6' value='97'/>
|
172
|
+
<enum name='kVK_F7' value='98'/>
|
173
|
+
<enum name='kVK_F8' value='100'/>
|
174
|
+
<enum name='kVK_F9' value='101'/>
|
175
|
+
<enum name='kVK_ForwardDelete' value='117'/>
|
176
|
+
<enum name='kVK_Function' value='63'/>
|
177
|
+
<enum name='kVK_Help' value='114'/>
|
178
|
+
<enum name='kVK_Home' value='115'/>
|
179
|
+
<enum name='kVK_ISO_Section' value='10'/>
|
180
|
+
<enum name='kVK_JIS_Eisu' value='102'/>
|
181
|
+
<enum name='kVK_JIS_Kana' value='104'/>
|
182
|
+
<enum name='kVK_JIS_KeypadComma' value='95'/>
|
183
|
+
<enum name='kVK_JIS_Underscore' value='94'/>
|
184
|
+
<enum name='kVK_JIS_Yen' value='93'/>
|
185
|
+
<enum name='kVK_LeftArrow' value='123'/>
|
186
|
+
<enum name='kVK_Mute' value='74'/>
|
187
|
+
<enum name='kVK_Option' value='58'/>
|
188
|
+
<enum name='kVK_PageDown' value='121'/>
|
189
|
+
<enum name='kVK_PageUp' value='116'/>
|
190
|
+
<enum name='kVK_Return' value='36'/>
|
191
|
+
<enum name='kVK_RightArrow' value='124'/>
|
192
|
+
<enum name='kVK_RightControl' value='62'/>
|
193
|
+
<enum name='kVK_RightOption' value='61'/>
|
194
|
+
<enum name='kVK_RightShift' value='60'/>
|
195
|
+
<enum name='kVK_Shift' value='56'/>
|
196
|
+
<enum name='kVK_Space' value='49'/>
|
197
|
+
<enum name='kVK_Tab' value='48'/>
|
198
|
+
<enum name='kVK_UpArrow' value='126'/>
|
199
|
+
<enum name='kVK_VolumeDown' value='73'/>
|
200
|
+
<enum name='kVK_VolumeUp' value='72'/>
|
201
|
+
<enum name='kVerticalTabCharCode' value='11'/>
|
202
|
+
<enum name='keyCodeMask' value='65280'/>
|
203
|
+
<enum name='keyDown' value='3'/>
|
204
|
+
<enum name='keyDownMask' value='8'/>
|
205
|
+
<enum name='keyUp' value='4'/>
|
206
|
+
<enum name='keyUpMask' value='16'/>
|
207
|
+
<enum name='mDownMask' value='2'/>
|
208
|
+
<enum name='mUpMask' value='4'/>
|
209
|
+
<enum name='mouseDown' value='1'/>
|
210
|
+
<enum name='mouseMovedMessage' value='250'/>
|
211
|
+
<enum name='mouseUp' value='2'/>
|
212
|
+
<enum name='networkEvt' value='10'/>
|
213
|
+
<enum name='networkMask' value='1024'/>
|
214
|
+
<enum name='nullEvent' value='0'/>
|
215
|
+
<enum name='optionKey' value='2048'/>
|
216
|
+
<enum name='optionKeyBit' value='11'/>
|
217
|
+
<enum name='osEvt' value='15'/>
|
218
|
+
<enum name='osEvtMessageMask' value='-16777216'/>
|
219
|
+
<enum name='osMask' value='32768'/>
|
220
|
+
<enum name='resumeFlag' value='1'/>
|
221
|
+
<enum name='rightControlKey' value='32768'/>
|
222
|
+
<enum name='rightControlKeyBit' value='15'/>
|
223
|
+
<enum name='rightOptionKey' value='16384'/>
|
224
|
+
<enum name='rightOptionKeyBit' value='14'/>
|
225
|
+
<enum name='rightShiftKey' value='8192'/>
|
226
|
+
<enum name='rightShiftKeyBit' value='13'/>
|
227
|
+
<enum name='shiftKey' value='512'/>
|
228
|
+
<enum name='shiftKeyBit' value='9'/>
|
229
|
+
<enum name='suspendResumeMessage' value='1'/>
|
230
|
+
<enum name='updateEvt' value='6'/>
|
231
|
+
<enum name='updateMask' value='64'/>
|
232
|
+
<function name='Button'>
|
233
|
+
<retval type='B'/>
|
234
|
+
</function>
|
235
|
+
<function name='FlushEvents'>
|
236
|
+
<arg type='S'/>
|
237
|
+
<arg type='S'/>
|
238
|
+
</function>
|
239
|
+
<function name='GetKeys'>
|
240
|
+
<arg type='[4{BigEndianUInt32=I}]'/>
|
241
|
+
</function>
|
242
|
+
<function name='IsCmdChar'>
|
243
|
+
<arg type='^{EventRecord=SLI{Point=ss}S}'/>
|
244
|
+
<arg type='s'/>
|
245
|
+
<retval type='B'/>
|
246
|
+
</function>
|
247
|
+
<function name='LMGetKbdLast'>
|
248
|
+
<retval type='C'/>
|
249
|
+
</function>
|
250
|
+
<function name='LMGetKbdType'>
|
251
|
+
<retval type='C'/>
|
252
|
+
</function>
|
253
|
+
<function name='LMGetKeyRepThresh'>
|
254
|
+
<retval type='s'/>
|
255
|
+
</function>
|
256
|
+
<function name='LMGetKeyThresh'>
|
257
|
+
<retval type='s'/>
|
258
|
+
</function>
|
259
|
+
</signatures>
|
Binary file
|
@@ -0,0 +1,104 @@
|
|
1
|
+
// Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
//
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
8
|
+
// furnished to do so, subject to the following conditions:
|
9
|
+
//
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
11
|
+
// all copies or substantial portions of the Software.
|
12
|
+
//
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
// THE SOFTWARE.
|
20
|
+
//
|
21
|
+
// shortcut.m
|
22
|
+
//
|
23
|
+
// Credits to chapados for putting some of this together some time ago
|
24
|
+
// https://gist.github.com/114521
|
25
|
+
//
|
26
|
+
// I was only able to hack this a small bit to get it working with macruby
|
27
|
+
// If anyone is able to kick my butt in Objective+C/MacRuby, please do it, I could learn from you!
|
28
|
+
//
|
29
|
+
// It's pretty ugly.
|
30
|
+
//
|
31
|
+
// TODO:
|
32
|
+
// * Unregister binded keys!
|
33
|
+
// * Handle signatures?
|
34
|
+
//
|
35
|
+
// compile:
|
36
|
+
// gcc shortcut.m -o shortcut.bundle -g -framework Foundation -framework Carbon -framework Cocoa -dynamiclib -fobjc-gc -arch i386 -arch x86_64
|
37
|
+
|
38
|
+
#import <Foundation/Foundation.h>
|
39
|
+
#import <Cocoa/Cocoa.h>
|
40
|
+
#import <Carbon/Carbon.h>
|
41
|
+
|
42
|
+
@interface Shortcut : NSObject
|
43
|
+
{
|
44
|
+
id delegate;
|
45
|
+
}
|
46
|
+
@property (assign) id delegate;
|
47
|
+
- (int) addShortcut: (int)code withKeyModifier:(int)modifier;
|
48
|
+
- (void) hotkeyWasPressed: (NSString*)hotKeyID;
|
49
|
+
@end
|
50
|
+
OSStatus myHotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData);
|
51
|
+
|
52
|
+
|
53
|
+
@implementation Shortcut
|
54
|
+
@synthesize delegate;
|
55
|
+
|
56
|
+
OSStatus myHotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData)
|
57
|
+
{
|
58
|
+
if ( userData != NULL ) {
|
59
|
+
id delegate = (id)userData;
|
60
|
+
if ( delegate ) {
|
61
|
+
EventHotKeyID myHotKeyID;
|
62
|
+
GetEventParameter(anEvent, kEventParamDirectObject, typeEventHotKeyID,NULL,
|
63
|
+
sizeof(myHotKeyID),NULL,&myHotKeyID);
|
64
|
+
|
65
|
+
NSString* ObjectiveFail = [NSString stringWithFormat:@"%i", myHotKeyID.id];
|
66
|
+
|
67
|
+
[delegate hotkeyWasPressed: ObjectiveFail]; // I don't why but macruby get crashy when I returned an int so, whatever, to_i that sh-t.
|
68
|
+
}
|
69
|
+
}
|
70
|
+
return noErr;
|
71
|
+
}
|
72
|
+
|
73
|
+
- (int) addShortcut: (int)code withKeyModifier:(int)modifier
|
74
|
+
{
|
75
|
+
static UInt32 _id = 0;
|
76
|
+
|
77
|
+
EventHotKeyRef myHotKeyRef;
|
78
|
+
EventHotKeyID myHotKeyID;
|
79
|
+
|
80
|
+
EventTypeSpec eventType;
|
81
|
+
eventType.eventClass=kEventClassKeyboard;
|
82
|
+
eventType.eventKind=kEventHotKeyPressed;
|
83
|
+
|
84
|
+
EventTargetRef eventTarget = (EventTargetRef) GetEventMonitorTarget(); //GetApplicationEventTarget()?
|
85
|
+
|
86
|
+
myHotKeyID.signature='mhk1';
|
87
|
+
myHotKeyID.id=_id++;
|
88
|
+
|
89
|
+
if ( delegate == nil )
|
90
|
+
delegate = self;
|
91
|
+
|
92
|
+
InstallEventHandler(eventTarget, &myHotKeyHandler, 1, &eventType, (void *)delegate, NULL);
|
93
|
+
RegisterEventHotKey(code, modifier, myHotKeyID, eventTarget, 0, &myHotKeyRef);
|
94
|
+
|
95
|
+
return (int)myHotKeyID.id;
|
96
|
+
}
|
97
|
+
|
98
|
+
- (void) hotkeyWasPressed: (NSString*)hotKeyID {
|
99
|
+
NSLog(@"Shh, you shouldn't see me!");
|
100
|
+
};
|
101
|
+
|
102
|
+
@end
|
103
|
+
|
104
|
+
void Init_shortcut(void) {}
|
@@ -0,0 +1,188 @@
|
|
1
|
+
# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
load_bridge_support_file File.dirname(__FILE__) + '/bridgesupport/Events.bridgesupport'
|
22
|
+
|
23
|
+
class HotKeys
|
24
|
+
module Support
|
25
|
+
class Keys
|
26
|
+
|
27
|
+
# Returns an array with [keyCode, keyModifier]
|
28
|
+
#
|
29
|
+
# Examples:
|
30
|
+
# Keys.parse("A")
|
31
|
+
# => [0, 0]
|
32
|
+
# Keys.parse("A+COMMAND")
|
33
|
+
# => [0, 256]
|
34
|
+
# Keys.parse("A+COMMAND+OPTION")
|
35
|
+
# => [0, 2304]
|
36
|
+
# Keys.parse("B+COMMAND+OPTION+SHIFT")
|
37
|
+
# => [11, 2816]
|
38
|
+
#
|
39
|
+
# Note: A is literally 0 on the virtual keyboard, these virtual mappings are dumb-founding
|
40
|
+
# Why they couldn't simply be ASCII or Unicode; what the sh-t steve?
|
41
|
+
#
|
42
|
+
def self.parse(keyString)
|
43
|
+
keyModifiers = HotKeys::Support::Keys::Mappings.select {|key, value| key =~ /Key$/ }
|
44
|
+
keyCodes = HotKeys::Support::Keys::Mappings.select {|key, value| !(key =~ /Key$/) }
|
45
|
+
|
46
|
+
keyModifiersRegexPart = keyModifiers.map {|key, value| key.gsub(/Key$/, "")}.join("|")
|
47
|
+
keyModifiers = keyModifiers.map {|key, value| {key.gsub(/Key$/, "").to_s.downcase => value}}.inject({}) {|retval,hash| retval.merge(hash) }
|
48
|
+
keyCodesRegexPart = keyCodes.map {|key, value| key }.join("|")
|
49
|
+
keyCodes = keyCodes.map {|key, value| {key.to_s.downcase => value}}.inject({}) {|retval,hash| retval.merge(hash) }
|
50
|
+
|
51
|
+
keyRegexString = "(#{keyCodesRegexPart})[\+]?(#{keyModifiersRegexPart})?[\+]?(#{keyModifiersRegexPart})?[\+]?(#{keyModifiersRegexPart})?"
|
52
|
+
matchData = Regexp.new(keyRegexString, true).match(keyString)
|
53
|
+
|
54
|
+
if matchData && matchData[1] && keyCodes[matchData[1].downcase]
|
55
|
+
[
|
56
|
+
keyCodes[matchData[1].downcase],
|
57
|
+
((matchData[2]) ? keyModifiers[matchData[2].downcase] : 0) +
|
58
|
+
((matchData[3]) ? keyModifiers[matchData[3].downcase] : 0) +
|
59
|
+
((matchData[4]) ? keyModifiers[matchData[4].downcase] : 0)
|
60
|
+
]
|
61
|
+
else
|
62
|
+
raise "Cannot parse hotkey #{keyString}. /#{keyRegexString}/i"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# This doesn't map all the virtual keyboard keys, just the "useful" ones,
|
67
|
+
# submit an issue on github if you think it should include more
|
68
|
+
Mappings = {
|
69
|
+
:ControlKey => ControlKey,
|
70
|
+
:OptionKey => OptionKey,
|
71
|
+
:CommandKey => CmdKey,
|
72
|
+
:ShiftKey => ShiftKey,
|
73
|
+
:RightOptionKey => RightOptionKey,
|
74
|
+
:RightControlKey => RightControlKey,
|
75
|
+
:RightShiftKey => RightShiftKey,
|
76
|
+
:Num0 => KVK_ANSI_0,
|
77
|
+
:Num1 => KVK_ANSI_1,
|
78
|
+
:Num2 => KVK_ANSI_2,
|
79
|
+
:Num3 => KVK_ANSI_3,
|
80
|
+
:Num4 => KVK_ANSI_4,
|
81
|
+
:Num5 => KVK_ANSI_5,
|
82
|
+
:Num6 => KVK_ANSI_6,
|
83
|
+
:Num7 => KVK_ANSI_7,
|
84
|
+
:Num8 => KVK_ANSI_8,
|
85
|
+
:Num9 => KVK_ANSI_9,
|
86
|
+
:Keypad0 => KVK_ANSI_Keypad0,
|
87
|
+
:Keypad1 => KVK_ANSI_Keypad1,
|
88
|
+
:Keypad2 => KVK_ANSI_Keypad2,
|
89
|
+
:Keypad3 => KVK_ANSI_Keypad3,
|
90
|
+
:Keypad4 => KVK_ANSI_Keypad4,
|
91
|
+
:Keypad5 => KVK_ANSI_Keypad5,
|
92
|
+
:Keypad6 => KVK_ANSI_Keypad6,
|
93
|
+
:Keypad7 => KVK_ANSI_Keypad7,
|
94
|
+
:Keypad8 => KVK_ANSI_Keypad8,
|
95
|
+
:Keypad9 => KVK_ANSI_Keypad9,
|
96
|
+
:KeypadClear => KVK_ANSI_KeypadClear,
|
97
|
+
:KeypadDecimal => KVK_ANSI_KeypadDecimal,
|
98
|
+
:KeypadDivide => KVK_ANSI_KeypadDivide,
|
99
|
+
:KeypadEnter => KVK_ANSI_KeypadEnter,
|
100
|
+
:KeypadEquals => KVK_ANSI_KeypadEquals,
|
101
|
+
:KeypadMinus => KVK_ANSI_KeypadMinus,
|
102
|
+
:KeypadMultiply => KVK_ANSI_KeypadMultiply,
|
103
|
+
:KeypadPlus => KVK_ANSI_KeypadPlus,
|
104
|
+
:A => KVK_ANSI_A,
|
105
|
+
:B => KVK_ANSI_B,
|
106
|
+
:C => KVK_ANSI_C,
|
107
|
+
:D => KVK_ANSI_D,
|
108
|
+
:E => KVK_ANSI_E,
|
109
|
+
:F => KVK_ANSI_F,
|
110
|
+
:G => KVK_ANSI_G,
|
111
|
+
:H => KVK_ANSI_H,
|
112
|
+
:I => KVK_ANSI_I,
|
113
|
+
:J => KVK_ANSI_J,
|
114
|
+
:K => KVK_ANSI_K,
|
115
|
+
:L => KVK_ANSI_L,
|
116
|
+
:M => KVK_ANSI_M,
|
117
|
+
:N => KVK_ANSI_N,
|
118
|
+
:O => KVK_ANSI_O,
|
119
|
+
:P => KVK_ANSI_P,
|
120
|
+
:Q => KVK_ANSI_Q,
|
121
|
+
:R => KVK_ANSI_R,
|
122
|
+
:S => KVK_ANSI_S,
|
123
|
+
:T => KVK_ANSI_T,
|
124
|
+
:U => KVK_ANSI_U,
|
125
|
+
:V => KVK_ANSI_V,
|
126
|
+
:W => KVK_ANSI_W,
|
127
|
+
:X => KVK_ANSI_X,
|
128
|
+
:Y => KVK_ANSI_Y,
|
129
|
+
:Z => KVK_ANSI_Z,
|
130
|
+
:F1 => KVK_F1,
|
131
|
+
:F2 => KVK_F2,
|
132
|
+
:F3 => KVK_F3,
|
133
|
+
:F4 => KVK_F4,
|
134
|
+
:F5 => KVK_F5,
|
135
|
+
:F6 => KVK_F6,
|
136
|
+
:F7 => KVK_F7,
|
137
|
+
:F8 => KVK_F8,
|
138
|
+
:F9 => KVK_F9,
|
139
|
+
:F10 => KVK_F10,
|
140
|
+
:F11 => KVK_F11,
|
141
|
+
:F12 => KVK_F12,
|
142
|
+
:F13 => KVK_F13,
|
143
|
+
:F14 => KVK_F14,
|
144
|
+
:F15 => KVK_F15,
|
145
|
+
:F16 => KVK_F16,
|
146
|
+
:F17 => KVK_F17,
|
147
|
+
:F18 => KVK_F18,
|
148
|
+
:F19 => KVK_F19,
|
149
|
+
:F20 => KVK_F20,
|
150
|
+
:Space => KVK_Space,
|
151
|
+
:Tab => KVK_Tab,
|
152
|
+
:Return => KVK_Return,
|
153
|
+
:Minus => KVK_ANSI_Minus,
|
154
|
+
:Equal => KVK_ANSI_Equal,
|
155
|
+
:Backslash => KVK_ANSI_Backslash,
|
156
|
+
:Slash => KVK_ANSI_Slash,
|
157
|
+
:LeftBracket => KVK_ANSI_LeftBracket,
|
158
|
+
:RightBracket => KVK_ANSI_RightBracket,
|
159
|
+
:Comma => KVK_ANSI_Comma,
|
160
|
+
:Period => KVK_ANSI_Period,
|
161
|
+
:Semicolon => KVK_ANSI_Semicolon,
|
162
|
+
:Quote => KVK_ANSI_Quote,
|
163
|
+
:Function => KVK_Function,
|
164
|
+
:Home => KVK_Home,
|
165
|
+
:PageUp => KVK_PageUp,
|
166
|
+
:PageDown => KVK_PageDown,
|
167
|
+
:End => KVK_End,
|
168
|
+
:ForwardDelete => KVK_ForwardDelete,
|
169
|
+
:Delete => KVK_Delete,
|
170
|
+
:CapsLock => KVK_CapsLock,
|
171
|
+
:LeftArrow => KVK_LeftArrow,
|
172
|
+
:UpArrow => KVK_UpArrow,
|
173
|
+
:DownArrow => KVK_DownArrow,
|
174
|
+
:RightArrow => KVK_RightArrow,
|
175
|
+
:Escape => KVK_Escape,
|
176
|
+
:Grave => KVK_ANSI_Grave,
|
177
|
+
:Help => KVK_Help,
|
178
|
+
:VolumeDown => KVK_VolumeDown,
|
179
|
+
:VolumeUp => KVK_VolumeUp,
|
180
|
+
:Mute => KVK_Mute,
|
181
|
+
:KeyDown => KeyDown,
|
182
|
+
:KeyUp => KeyUp,
|
183
|
+
:MouseDown => MouseDown,
|
184
|
+
:MouseUp => MouseUp
|
185
|
+
}
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
class HotKeys
|
22
|
+
module Support
|
23
|
+
autoload :Keys, 'hotkeys/support/keys'
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
class Hotkeys
|
22
|
+
module Version
|
23
|
+
MAJOR = 0
|
24
|
+
MINOR = 1
|
25
|
+
PATCH = 0
|
26
|
+
BUILD = nil
|
27
|
+
|
28
|
+
STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
|
29
|
+
end
|
30
|
+
end
|
data/lib/hotkeys.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
unless RUBY_ENGINE =~ /macruby/
|
21
|
+
raise NotImplementedError, "Hotkeys only runs on macruby! ;)"
|
22
|
+
end
|
23
|
+
|
24
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
25
|
+
|
26
|
+
framework 'AppKit'
|
27
|
+
framework 'Carbon'
|
28
|
+
framework 'Cocoa'
|
29
|
+
|
30
|
+
# required here, beause we subclass this sucker right away.
|
31
|
+
require File.dirname(__FILE__) + '/hotkeys/support/bundles/shortcut'
|
32
|
+
|
33
|
+
class HotKeys < Shortcut
|
34
|
+
autoload :Version, 'hotkeys/version'
|
35
|
+
autoload :Support, 'hotkeys/support'
|
36
|
+
|
37
|
+
def initialize(delegation=nil)
|
38
|
+
self.delegate = delegation || self
|
39
|
+
end
|
40
|
+
|
41
|
+
def hotkeyWasPressed(key)
|
42
|
+
@keys[key.to_i].call
|
43
|
+
end
|
44
|
+
|
45
|
+
def addHotString(keyString, &block)
|
46
|
+
args = HotKeys::Support::Keys.parse(keyString)
|
47
|
+
|
48
|
+
@keys ||= []
|
49
|
+
key = self.send(:"addShortcut:withKeyModifier", *args)
|
50
|
+
@keys[key] = block
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hotkeys
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rob Lowe
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-06-08 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
prerelease: false
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :development
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: "0"
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: bundler
|
33
|
+
prerelease: false
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 1.0.0
|
40
|
+
type: :development
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.0.0
|
47
|
+
description: A simple gem which allows you to bind global hot keys with macruby
|
48
|
+
email: rob@iblargz.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files:
|
52
|
+
- LICENSE
|
53
|
+
- CHANGES
|
54
|
+
- README.md
|
55
|
+
files:
|
56
|
+
- Gemfile
|
57
|
+
- Gemfile.lock
|
58
|
+
- LICENSE
|
59
|
+
- README.md
|
60
|
+
- Rakefile
|
61
|
+
- hotkeys.gemspec
|
62
|
+
- lib/hotkeys.rb
|
63
|
+
- lib/hotkeys/version.rb
|
64
|
+
- lib/hotkeys/support.rb
|
65
|
+
- lib/hotkeys/support/bridgesupport/Events.bridgesupport
|
66
|
+
- lib/hotkeys/support/bundles/shortcut.bundle
|
67
|
+
- lib/hotkeys/support/bundles/shortcut.m
|
68
|
+
- lib/hotkeys/support/keys.rb
|
69
|
+
- CHANGES
|
70
|
+
has_rdoc: true
|
71
|
+
homepage: http://github.com/RobertLowe/hotkeys
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "0"
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.4.2
|
93
|
+
signing_key:
|
94
|
+
specification_version: 2
|
95
|
+
summary: A simple gem which allows you to bind global hot keys with macruby
|
96
|
+
test_files: []
|