Search code examples
cocoaosx-mavericksemoticons

How to open the new emoticon menu by code in Mavericks


In Mavericks there is a new emoticon menu by pressing ctrl+cmd+space. I want to add a small button beside a textfield that opens this menu and send the emoticon to the textfield.

I thought about sending a keystroke event, but this could change. Is there any other way ? Thank you.


Solution

  • Does orderFrontCharacterPalette: work for you?

    [NSApp orderFrontCharacterPalette:nil];
    

    It's been around for a while (10.3), but the meaning of ordering the palette to the front might have changed in 10.9.

    In case it's interesting, I found the method by inserting a dummy subclass of NSTextView:

    @interface LoggingTextView : NSTextView
    @end
    

    It logs the respondsToSelector: calls it receives:

    - (BOOL)respondsToSelector:(SEL)aSelector
    {
        NSLog(@"selector: %@", NSStringFromSelector(aSelector));
        return [super respondsToSelector:aSelector];
    }
    

    In IB/the XIB I configured the text view to use this subclass. Then I ran the app and pressed Cmd-Ctrl-Space and checked for interesting selector names. You could probably also do it with an auto-continue breakpoint command in LLDB.

    If you do this, make sure that whatever comes up is published API and not some internal method that could change at any moment.