You're welcome. I've looked into adding global hot keys before, but never too seriously, so I definitely learned a few things as well.
As for the problem with aixmlserialize, I wouldn't assume that it is a 32/64-bit issue. In this case, it was obvious what was going on from the documentation. GetApplicationEventTarget() still returns a pointer in 64bit mode, but it is clearly somehow invalid. AIXMLSerialize might have a different issue. However, in that case, you have the source code, so you should be able to pinpoint the problem in the debugger. Brian On Wed, May 20, 2009 at 1:14 PM, isaac kearse <isaackea...@gmail.com> wrote: > That works perfectly, no errors or warnings. > I think I might have run into a similar issue when I tried to compile this > framework: > http://github.com/Caged/aixmlserialize/tree/master > (NSXMLDocument => NSDictionary conversion) > I ended up just extracting the one method that I was using and packaging it > into a bundle. > If it happens again I might have to switch to 32bit, or maybe its better to > stick with 64bit as 32bit-only APIs will probably be phased out eventually. > Thanks again for all your help, > Isaac > > > On Thu, May 21, 2009 at 7:23 AM, Brian Chapados <cha...@gmail.com> wrote: >> >> I was able to reproduce your bug, and have a fix. This was somewhat >> obscure, but RTFM to the rescue... >> >> Note that GetApplicationEventTarget is not available on 64-bit systems >> (see Notes in the docs): >> >> http://developer.apple.com/documentation/Carbon/Reference/Carbon_Event_Manager_Ref/Reference/reference.html#//apple_ref/c/func/GetApplicationEventTarget >> >> Although you were not calling it directly, the macro >> InstallApplicationEventHandler() was calling it for you. I had >> compiled macruby with archs="i386" so it was working fine for me. >> When I did a default build it broke. >> >> In general, always double-check any Carbon stuff for >> 64bit-compatibility issues. I think Apple has said that Carbon is >> being phased out. Maybe someone else knows more about that than I do. >> >> To make a long story short, just use GetEventMonitorTarget() to send >> your hotkey event to the event monitor. That seems to be available on >> both platforms. >> >> I updated the gists with the new Obj-C code and hotcocoa file. >> Obj-C: http://gist.github.com/114521 >> hotcocoa: http://gist.github.com/114523 >> >> Brian >> >> >> On Wed, May 20, 2009 at 9:11 AM, Brian Chapados <cha...@gmail.com> wrote: >> > I didn't use the hotcocoa cli interface to generate the file, so I >> > don't have a Rakefile or anything. I just used a text editor and >> > followed an old example[1]. Try putting the ruby code into a file >> > called 'shortcutapp.rb' and type: >> > >> > [1]: >> > http://andymatuschak.org/articles/2008/09/12/hotcocoa-is-pretty-damn-hot/ >> > >> > macruby shortcutapp.rb >> > >> > If you want to package things up into an actual .app bundle, then you >> > would need a slightly different approach. It shouldn't be too bad, >> > since hotcocoa helps you layout your code in a sensible way. Make >> > sure the above works first, then go from there. >> > >> > On Wed, May 20, 2009 at 2:53 AM, isaac kearse <isaackea...@gmail.com> >> > wrote: >> >> Hi Brian, >> >> I tried running your minimal app but it crashed with a similar error. >> >> Here >> >> are all the gory details (including Problem Details and System Profile >> >> from >> >> the crash reporter): >> >> http://gist.github.com/114723 >> >> >> >> I have also put the whole directory structure for the minimal hotcocoa >> >> app >> >> on github so we can be sure we are running exactly the same app: >> >> http://github.com/isaac/shortcut/tree/master >> >> I also got a few more warnings when compiling shortcut.m but I am >> >> assuming I >> >> can just ignore them? (I included them at the bottom of the gist also) >> >> Cheers, >> >> Isaac >> >> On Wed, May 20, 2009 at 1:10 PM, isaac kearse <isaackea...@gmail.com> >> >> wrote: >> >>> >> >>> Yeah I think you're right. I was calling it inside a hotcocoa app but >> >>> not >> >>> in the application context. I'll try it out tonight and let you know >> >>> how it >> >>> goes. >> >>> Thanks a lot for walking me through this. >> >>> On Wed, May 20, 2009 at 12:47 PM, Brian Chapados <cha...@gmail.com> >> >>> wrote: >> >>>> >> >>>> I'm not sure how you're testing this, but beware of doing this from a >> >>>> command line-only script or through macirb. I suspect you need to be >> >>>> in an Application context (or hook into the event loop through some >> >>>> other means). It works from a minimal hotcocoa app: >> >>>> http://gist.github.com/114523 >> >>>> >> >>>> I also made some slight modifications to your Obj-C code to add a >> >>>> delegate that gives you a callback hook that you can define in Ruby. >> >>>> There is probably a better way to do this, but this was fast. >> >>>> see: http://gist.github.com/114521 >> >>>> >> >>>> Note that I changed the keyboard shortcut to controlKey+optionKey, so >> >>>> you'll need to press Control+Option+Space. >> >>>> >> >>>> >> >>>> On Tue, May 19, 2009 at 4:33 PM, isaac kearse <isaackea...@gmail.com> >> >>>> wrote: >> >>>> > Hey thanks Brian that worked! >> >>>> > I tried compiling with the Carbon Framework but I didn't think to >> >>>> > try >> >>>> > it >> >>>> > with both Carbon and Foundation. I still got the warning "makes >> >>>> > pointer >> >>>> > from integer without a cast" but I'm just ignoring that :) >> >>>> > So the bundle was created and I compiled it and required it my app. >> >>>> > But when I actually call it with "Shortcut.new.addShortcut" (from >> >>>> > the >> >>>> > start >> >>>> > method in my application.rb) I get a nasty error: >> >>>> > isaac:~/src/tasks isaac$ macrake >> >>>> > (in /Users/isaac/src/tasks) >> >>>> > >> >>>> > >> >>>> > /Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:12: >> >>>> > [BUG] Segmentation fault >> >>>> > MacRuby version 0.4 (ruby 1.9.1) [universal-darwin9.0, x86_64] >> >>>> > -- stack frame ------------ >> >>>> > 0000 (0xc08000060): 00000004 >> >>>> > 0001 (0xc08000068): 00000000 >> >>>> > 0002 (0xc08000070): 00000004 >> >>>> > 0003 (0xc08000078): 00000000 >> >>>> > 0004 (0xc08000080): 00000004 >> >>>> > 0005 (0xc08000088): 00000000 >> >>>> > 0006 (0xc08000090): 00000004 >> >>>> > 0007 (0xc08000098): 80003ffe0 >> >>>> > 0008 (0xc080000a0): 00000004 >> >>>> > 0009 (0xc080000a8): 00000000 >> >>>> > 0010 (0xc080000b0): 00000004 >> >>>> > 0011 (0xc080000b8): 00000000 >> >>>> > 0012 (0xc080000c0): 00000004 >> >>>> > 0013 (0xc080000c8): 00000000 >> >>>> > 0014 (0xc080000d0): 8004f3380 >> >>>> > 0015 (0xc080000d8): 00000004 >> >>>> > 0016 (0xc080000e0): 00000000 >> >>>> > 0017 (0xc080000e8): 8004eb020 >> >>>> > 0018 (0xc080000f0): 00000004 >> >>>> > 0019 (0xc080000f8): 00000000 <- lfp <- dfp >> >>>> > -- control frame ---------- >> >>>> > c:0008 p:---- s:0020 b:0020 l:000019 d:000019 CFUNC :addShortcut >> >>>> > c:0007 p:0019 s:0017 b:0017 l:000016 d:000016 METHOD >> >>>> > >> >>>> > >> >>>> > /Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:12 >> >>>> > c:0006 p:0103 s:0014 b:0014 l:000013 d:000013 TOP >> >>>> > >> >>>> > >> >>>> > /Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:297 >> >>>> > c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH :set_encoding: >> >>>> > c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC :load >> >>>> > c:0003 p:0043 s:0006 b:0006 l:000005 d:000005 TOP >> >>>> > /Users/isaac/src/tasks/Tasks.app/Contents/Resources/rb_main.rb:2 >> >>>> > c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH :inherited: >> >>>> > c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP >> >>>> > --------------------------- >> >>>> > DBG> : >> >>>> > >> >>>> > >> >>>> > "/Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:12:in >> >>>> > `addShortcut'" >> >>>> > DBG> : >> >>>> > >> >>>> > >> >>>> > "/Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:12:in >> >>>> > `start'" >> >>>> > DBG> : >> >>>> > >> >>>> > >> >>>> > "/Users/isaac/src/tasks/Tasks.app/Contents/Resources/lib/application.rb:297:in >> >>>> > `<top (required)>'" >> >>>> > DBG> : >> >>>> > >> >>>> > "/Users/isaac/src/tasks/Tasks.app/Contents/Resources/rb_main.rb:2:in >> >>>> > `load'" >> >>>> > DBG> : >> >>>> > >> >>>> > "/Users/isaac/src/tasks/Tasks.app/Contents/Resources/rb_main.rb:2:in >> >>>> > `<main>'" >> >>>> > -- backtrace of native function call (Use addr2line) -- >> >>>> > 0x10010f2c1 >> >>>> > 0x100029334 >> >>>> > 0x100029418 >> >>>> > 0x1000c240d >> >>>> > 0x7fff803763fa >> >>>> > 0x0 >> >>>> > 0x7fff8108094d >> >>>> > 0x105a31e8c >> >>>> > 0x100121855 >> >>>> > 0x10010af7d >> >>>> > 0x10010074f >> >>>> > 0x1001056e2 >> >>>> > 0x10010596c >> >>>> > 0x100030c96 >> >>>> > 0x100030d15 >> >>>> > 0x10010ada7 >> >>>> > 0x10010074f >> >>>> > 0x1001056e2 >> >>>> > 0x10010596c >> >>>> > 0x10002cd32 >> >>>> > 0x1000300f7 >> >>>> > 0x100118723 >> >>>> > 0x100000f84 >> >>>> > 0x100000f40 >> >>>> > ------------------------------------------------------- >> >>>> > Any ideas? >> >>>> > Cheers, >> >>>> > Isaac >> >>>> > On Wed, May 20, 2009 at 10:59 AM, Brian Chapados <cha...@gmail.com> >> >>>> > wrote: >> >>>> >> >> >>>> >> Those symbols are defined in the Carbon framework. Try compiling >> >>>> >> with: >> >>>> >> >> >>>> >> cc shortcut.m -o shortcut.bundle -g -framework Foundation >> >>>> >> -framework >> >>>> >> Carbon -dynamiclib -fobjc-gc -arch i386 -arch x86_64 >> >>>> >> >> >>>> >> On Tue, May 19, 2009 at 1:32 PM, isaac kearse >> >>>> >> <isaackea...@gmail.com> >> >>>> >> wrote: >> >>>> >> > Hi Guys, >> >>>> >> > I am writing a hotcocoa app, and I want to register a global >> >>>> >> > keyboard >> >>>> >> > shortcut so that I can perform an action in my app from any >> >>>> >> > application. >> >>>> >> > AFAIK you need to go down to Carbon to do this as documented >> >>>> >> > here: >> >>>> >> > >> >>>> >> > >> >>>> >> > >> >>>> >> > http://cocoasamurai.blogspot.com/2009/03/global-keyboard-shortcuts-with-carbon.html >> >>>> >> > This is the code I have so far: http://gist.github.com/114372 >> >>>> >> > When I try and package this as a bundle using the technique that >> >>>> >> > Laurent >> >>>> >> > demonstrated earlier in this thread I get these errors: >> >>>> >> > isaac:~/src/tasks isaac$ gcc shortcut.m -o shortcut.bundle -g >> >>>> >> > -framework >> >>>> >> > Foundation -dynamiclib -fobjc-gc -arch i386 -arch x86_64 >> >>>> >> > shortcut.m: In function ‘-[Shortcut addShortcut]’: >> >>>> >> > shortcut.m:25: warning: passing argument 1 of >> >>>> >> > ‘InstallEventHandler’ >> >>>> >> > makes >> >>>> >> > pointer from integer without a cast >> >>>> >> > shortcut.m:28: warning: passing argument 4 of >> >>>> >> > ‘RegisterEventHotKey’ >> >>>> >> > makes >> >>>> >> > pointer from integer without a cast >> >>>> >> > Undefined symbols: >> >>>> >> > "_GetApplicationEventTarget", referenced from: >> >>>> >> > -[Shortcut addShortcut] in cckmYEc0.o >> >>>> >> > -[Shortcut addShortcut] in cckmYEc0.o >> >>>> >> > "_RegisterEventHotKey", referenced from: >> >>>> >> > -[Shortcut addShortcut] in cckmYEc0.o >> >>>> >> > "_InstallEventHandler", referenced from: >> >>>> >> > -[Shortcut addShortcut] in cckmYEc0.o >> >>>> >> > ld: symbol(s) not found >> >>>> >> > collect2: ld returned 1 exit status >> >>>> >> > Undefined symbols: >> >>>> >> > "_GetApplicationEventTarget", referenced from: >> >>>> >> > -[Shortcut addShortcut] in ccIWfnrB.o >> >>>> >> > -[Shortcut addShortcut] in ccIWfnrB.o >> >>>> >> > "_RegisterEventHotKey", referenced from: >> >>>> >> > -[Shortcut addShortcut] in ccIWfnrB.o >> >>>> >> > "_InstallEventHandler", referenced from: >> >>>> >> > -[Shortcut addShortcut] in ccIWfnrB.o >> >>>> >> > ld: symbol(s) not found >> >>>> >> > collect2: ld returned 1 exit status >> >>>> >> > lipo: can't open input file: >> >>>> >> > /var/folders/sm/smWEZrv7GueXZu2JpgAAuU+++TI/-Tmp-//ccX5Acy0.out >> >>>> >> > (No >> >>>> >> > such >> >>>> >> > file or directory) >> >>>> >> > I really have no idea what I'm doing here, so any ideas would be >> >>>> >> > appreciated >> >>>> >> > :) >> >>>> >> > Cheers, >> >>>> >> > Isaac >> >>>> >> > On Mon, Apr 20, 2009 at 11:49 PM, victor jalencas >> >>>> >> > <macruby-de...@principia.info> wrote: >> >>>> >> >> >> >>>> >> >> Many thanks John and Laurent. >> >>>> >> >> >> >>>> >> >> After reading your messages I came back to XCode and >> >>>> >> >> discovered I >> >>>> >> >> had >> >>>> >> >> made a typo in the ObjC part of the code (which, curiously, >> >>>> >> >> compiled) >> >>>> >> >> and that's why my ruby code didn't find my selector. >> >>>> >> >> >> >>>> >> >> As for calling ruby code from the obj-c side, I agree it's a >> >>>> >> >> bit >> >>>> >> >> convoluted (not to mention deprecated). I hope there's a better >> >>>> >> >> way >> >>>> >> >> to >> >>>> >> >> do that in store for upcoming versions. If I understood well >> >>>> >> >> your >> >>>> >> >> example, you first created the Obj-C subclass and later, >> >>>> >> >> dynamically, >> >>>> >> >> set its parent to be the ruby class. Anyway, seeing that the >> >>>> >> >> norm >> >>>> >> >> in >> >>>> >> >> Cocoa is delegation rather than extension, and if all ruby >> >>>> >> >> classes >> >>>> >> >> are >> >>>> >> >> readily available in Obj-C, I think I'll manage with just >> >>>> >> >> calling >> >>>> >> >> ruby >> >>>> >> >> code instead of extending it. Apparently I lacked only calling >> >>>> >> >> the >> >>>> >> >> sharedRuntime method, will need to experiment a bit more when I >> >>>> >> >> get >> >>>> >> >> back to my Mac. >> >>>> >> >> >> >>>> >> >> >> >>>> >> >> >> >>>> >> >> cheers, >> >>>> >> >> Victor >> >>>> >> >> >> >>>> >> >> -- >> >>>> >> >> -- >> >>>> >> >> Victor Jalencas <vic...@carotena.net> >> >>>> >> >> _______________________________________________ >> >>>> >> >> MacRuby-devel mailing list >> >>>> >> >> MacRuby-devel@lists.macosforge.org >> >>>> >> >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >>>> >> > >> >>>> >> > >> >>>> >> > _______________________________________________ >> >>>> >> > MacRuby-devel mailing list >> >>>> >> > MacRuby-devel@lists.macosforge.org >> >>>> >> > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >>>> >> > >> >>>> >> > >> >>>> >> _______________________________________________ >> >>>> >> MacRuby-devel mailing list >> >>>> >> MacRuby-devel@lists.macosforge.org >> >>>> >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >>>> > >> >>>> > >> >>>> > _______________________________________________ >> >>>> > MacRuby-devel mailing list >> >>>> > MacRuby-devel@lists.macosforge.org >> >>>> > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >>>> > >> >>>> > >> >>>> _______________________________________________ >> >>>> MacRuby-devel mailing list >> >>>> MacRuby-devel@lists.macosforge.org >> >>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >>> >> >> >> >> >> >> _______________________________________________ >> >> MacRuby-devel mailing list >> >> MacRuby-devel@lists.macosforge.org >> >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> >> >> >> >> > >> _______________________________________________ >> MacRuby-devel mailing list >> MacRuby-devel@lists.macosforge.org >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > > > _______________________________________________ > MacRuby-devel mailing list > MacRuby-devel@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > > _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel