Permalink
Browse files

independent Option/Command as a shortcut... FAILED!

  • Loading branch information...
1 parent 0dfcbe2 commit aa19d2a75f95f721aef83a85826eae25a72c699b @youknowone youknowone committed Jun 5, 2014
Showing with 596 additions and 223 deletions.
  1. +3 −0 .gitmodules
  2. +3 −3 CommonInputMethod/CIMComposer.m
  3. +21 −2 CommonInputMethod/CIMConfiguration.h
  4. +20 −0 CommonInputMethod/CIMConfiguration.m
  5. +15 −8 CommonInputMethod/CIMInputController.m
  6. +5 −1 CommonInputMethod/CIMInputHandler.m
  7. +35 −87 Gureum.xcodeproj/project.pbxproj
  8. +0 −11 GureumOSX/tools/build_product.sh
  9. +2 −2 HACKING.md
  10. 0 {GureumOSX → OSX}/.gitignore
  11. 0 {GureumOSX → OSX}/CIMInputControllerGureum.h
  12. 0 {GureumOSX → OSX}/CIMInputControllerGureum.m
  13. 0 {GureumOSX → OSX}/GureumAppDelegate.h
  14. 0 {GureumOSX → OSX}/GureumAppDelegate.m
  15. +2 −0 {GureumOSX → OSX}/GureumComposer.h
  16. +76 −5 {GureumOSX → OSX}/GureumComposer.m
  17. +14 −4 {GureumOSX → OSX}/GureumPreferencesWindowController.h
  18. +40 −13 {GureumOSX → OSX}/GureumPreferencesWindowController.m
  19. +6 −0 {GureumOSX → OSX}/Hangul.strings
  20. 0 {GureumOSX → OSX}/HangulComposer.h
  21. 0 {GureumOSX → OSX}/HangulComposer.m
  22. 0 {GureumOSX → OSX}/Icons/COPYING
  23. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_128x128.png
  24. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_128x128@2x.png
  25. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_16x16.png
  26. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_16x16@2x.png
  27. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_256x256.png
  28. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_256x256@2x.png
  29. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_32x32.png
  30. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_32x32@2x.png
  31. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_512x512.png
  32. 0 {GureumOSX → OSX}/Icons/Gureum.iconset/icon_512x512@2x.png
  33. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_128x128.psd
  34. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_16x16.psd
  35. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_256x256.psd
  36. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_32x32.psd
  37. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_32x32@2x.psd
  38. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_512x512.psd
  39. 0 {GureumOSX → OSX}/Icons/Gureum_psd/icon_512x512@2x.psd
  40. 0 {GureumOSX → OSX}/Icons/colemak.png
  41. 0 {GureumOSX → OSX}/Icons/colemak@2x.png
  42. BIN OSX/Icons/command.png
  43. 0 {GureumOSX → OSX}/Icons/dvorak.png
  44. 0 {GureumOSX → OSX}/Icons/dvorak@2x.png
  45. 0 {GureumOSX → OSX}/Icons/eng.png
  46. 0 {GureumOSX → OSX}/Icons/eng@2x.png
  47. 0 {GureumOSX → OSX}/Icons/han.png
  48. 0 {GureumOSX → OSX}/Icons/han2.png
  49. 0 {GureumOSX → OSX}/Icons/han2@2x.png
  50. 0 {GureumOSX → OSX}/Icons/han3.png
  51. 0 {GureumOSX → OSX}/Icons/han390.png
  52. 0 {GureumOSX → OSX}/Icons/han390@2x.png
  53. 0 {GureumOSX → OSX}/Icons/han3@2x.png
  54. 0 {GureumOSX → OSX}/Icons/han3final.png
  55. 0 {GureumOSX → OSX}/Icons/han3final@2x.png
  56. 0 {GureumOSX → OSX}/Icons/han@2x.png
  57. 0 {GureumOSX → OSX}/Icons/hanroman.png
  58. 0 {GureumOSX → OSX}/Icons/hanroman@2x.png
  59. 0 {GureumOSX → OSX}/Icons/icons_psd/icons.psd
  60. 0 {GureumOSX → OSX}/Icons/icons_psd/icons@2x.psd
  61. 0 {GureumOSX → OSX}/Icons/libhangul_logo.png
  62. 0 {GureumOSX → OSX}/Icons/qwerty.png
  63. 0 {GureumOSX → OSX}/Icons/qwerty@2x.png
  64. 0 {GureumOSX → OSX}/Info.plist
  65. 0 {GureumOSX → OSX}/MainMenu.xib
  66. 0 {GureumOSX → OSX}/Prefix.pch
  67. 0 {GureumOSX → OSX}/ShortcutRecorder
  68. 0 {GureumOSX → OSX}/en.lproj/InfoPlist.strings
  69. 0 {GureumOSX → OSX}/ko.lproj/InfoPlist.strings
  70. 0 {GureumOSX → OSX}/main.m
  71. +334 −83 {GureumOSX → OSX}/preferences.xib
  72. 0 {GureumOSX → OSX}/tools/Makefile
  73. +11 −0 OSX/tools/build_product.sh
  74. +1 −1 {GureumOSX → OSX}/tools/install_debug.sh
  75. 0 {GureumOSX → OSX}/tools/preinst.plist
  76. 0 {GureumOSX → OSX}/tools/ready.sh
  77. 0 {GureumOSX → OSX}/tools/test_product.sh
  78. +8 −3 Podfile
View
3 .gitmodules
@@ -1,3 +1,6 @@
[submodule "libhangul-objc"]
path = libhangul-objc
url = git://github.com/gureum/libhangul-objc.git
+[submodule "ShortcutRecorder"]
+ path = OSX/ShortcutRecorder
+ url = git://github.com/gureum/shortcutrecorder.git
View
6 CommonInputMethod/CIMComposer.m
@@ -64,7 +64,7 @@ - (CIMInputTextProcessResult)inputController:(CIMInputController *)controller co
return [_delegate inputController:controller commandString:string key:keyCode modifiers:flags client:sender];
}
-- (BOOL)inputController:(CIMInputController *)controller inputText:(NSString *)string key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)sender {
+- (CIMInputTextProcessResult)inputController:(CIMInputController *)controller inputText:(NSString *)string key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)sender {
return [_delegate inputController:controller inputText:string key:keyCode modifiers:flags client:sender];
}
@@ -98,8 +98,8 @@ - (NSArray *)candidates { return nil; }
#pragma -
-- (BOOL)inputController:(CIMInputController *)controller inputText:(NSString *)string key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)sender {
- return NO;
+- (CIMInputTextProcessResult)inputController:(CIMInputController *)controller inputText:(NSString *)string key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)sender {
+ return CIMInputTextProcessResultNotProcessed;
}
@end
View
23 CommonInputMethod/CIMConfiguration.h
@@ -12,12 +12,23 @@
/* Gureum */
FOUNDATION_EXTERN NSString *CIMLastHangulInputMode;
-#define CIMConfigurationIntegerItemCount 7
-/* Gureum */
+#define CIMConfigurationIntegerItemCount 17
+/* Shortcut */
+FOUNDATION_EXTERN NSString *CIMLeftCommandKeyShortcutBehavior;
+FOUNDATION_EXTERN NSString *CIMLeftOptionKeyShortcutBehavior;
+FOUNDATION_EXTERN NSString *CIMLeftControlKeyShortcutBehavior;
+FOUNDATION_EXTERN NSString *CIMRightCommandKeyShortcutBehavior;
+FOUNDATION_EXTERN NSString *CIMRightOptionKeyShortcutBehavior;
+FOUNDATION_EXTERN NSString *CIMRightControlKeyShortcutBehavior;
FOUNDATION_EXTERN NSString *CIMInputModeExchangeKeyModifier;
FOUNDATION_EXTERN NSString *CIMInputModeExchangeKeyCode;
FOUNDATION_EXTERN NSString *CIMInputModeHanjaKeyModifier;
FOUNDATION_EXTERN NSString *CIMInputModeHanjaKeyCode;
+FOUNDATION_EXTERN NSString *CIMInputModeEnglishKeyModifier;
+FOUNDATION_EXTERN NSString *CIMInputModeEnglishKeyCode;
+FOUNDATION_EXTERN NSString *CIMInputModeKoreanKeyModifier;
+FOUNDATION_EXTERN NSString *CIMInputModeKoreanKeyCode;
+/* Gureum */
FOUNDATION_EXTERN NSString *CIMOptionKeyBehavior;
/* Hangul */
FOUNDATION_EXTERN NSString *CIMHangulCombinationModeComposing;
@@ -69,8 +80,16 @@ extern CIMConfiguration *CIMDefaultUserConfiguration;
NSUserDefaults *userDefaults;
@public
NSString *lastHangulInputMode;
+ NSInteger leftCommandKeyShortcutBehavior;
+ NSInteger leftOptionKeyShortcutBehavior;
+ NSInteger leftControlKeyShortcutBehavior;
+ NSInteger rightCommandKeyShortcutBehavior;
+ NSInteger rightOptionKeyShortcutBehavior;
+ NSInteger rightControlKeyShortcutBehavior;
NSInteger inputModeExchangeKeyModifier, inputModeExchangeKeyCode;
NSInteger inputModeHanjaKeyModifier, inputModeHanjaKeyCode;
+ NSInteger inputModeEnglishKeyModifier, inputModeEnglishKeyCode;
+ NSInteger inputModeKoreanKeyModifier, inputModeKoreanKeyCode;
NSInteger optionKeyBehavior;
NSInteger hangulCombinationModeComposing, hangulCombinationModeCommiting;
BOOL sharedInputManager;
View
20 CommonInputMethod/CIMConfiguration.m
@@ -13,10 +13,20 @@
define_preference_key(CIMLastHangulInputMode);
+define_preference_key(CIMLeftCommandKeyShortcutBehavior);
+define_preference_key(CIMLeftOptionKeyShortcutBehavior);
+define_preference_key(CIMLeftControlKeyShortcutBehavior);
+define_preference_key(CIMRightCommandKeyShortcutBehavior);
+define_preference_key(CIMRightOptionKeyShortcutBehavior);
+define_preference_key(CIMRightControlKeyShortcutBehavior);
define_preference_key(CIMInputModeExchangeKeyModifier);
define_preference_key(CIMInputModeExchangeKeyCode);
define_preference_key(CIMInputModeHanjaKeyModifier);
define_preference_key(CIMInputModeHanjaKeyCode);
+define_preference_key(CIMInputModeEnglishKeyModifier);
+define_preference_key(CIMInputModeEnglishKeyCode);
+define_preference_key(CIMInputModeKoreanKeyModifier);
+define_preference_key(CIMInputModeKoreanKeyCode);
define_preference_key(CIMOptionKeyBehavior);
define_preference_key(CIMHangulCombinationModeComposing);
define_preference_key(CIMHangulCombinationModeCommiting);
@@ -57,10 +67,20 @@ - (id)initWithUserDefaults:(NSUserDefaults *)aUserDefaults {
}
struct CIMConfigurationIntegerItem tempIntegerItems[CIMConfigurationIntegerItemCount] = {
+ { CIMLeftCommandKeyShortcutBehavior, &self->leftCommandKeyShortcutBehavior, 0 },
+ { CIMLeftOptionKeyShortcutBehavior, &self->leftOptionKeyShortcutBehavior, 0 },
+ { CIMLeftControlKeyShortcutBehavior, &self->leftControlKeyShortcutBehavior, 0 },
+ { CIMRightCommandKeyShortcutBehavior, &self->rightCommandKeyShortcutBehavior, 1 },
+ { CIMRightOptionKeyShortcutBehavior, &self->rightOptionKeyShortcutBehavior, 2 },
+ { CIMRightControlKeyShortcutBehavior, &self->rightControlKeyShortcutBehavior, 0 },
{ CIMInputModeExchangeKeyModifier, &self->inputModeExchangeKeyModifier, NSShiftKeyMask },
{ CIMInputModeExchangeKeyCode, &self->inputModeExchangeKeyCode, 0x31 },
{ CIMInputModeHanjaKeyModifier, &self->inputModeHanjaKeyModifier, NSAlternateKeyMask },
{ CIMInputModeHanjaKeyCode, &self->inputModeHanjaKeyCode, 0x24 },
+ { CIMInputModeEnglishKeyModifier, &self->inputModeEnglishKeyModifier, 0 },
+ { CIMInputModeEnglishKeyCode, &self->inputModeEnglishKeyCode, -1 },
+ { CIMInputModeKoreanKeyModifier, &self->inputModeKoreanKeyModifier, 0 },
+ { CIMInputModeKoreanKeyCode, &self->inputModeKoreanKeyCode, -1 },
{ CIMOptionKeyBehavior, &self->optionKeyBehavior, 0 },
{ CIMHangulCombinationModeComposing, &self->hangulCombinationModeComposing,
(NSInteger)HangulCharacterCombinationWithoutFiller },
View
23 CommonInputMethod/CIMInputController.m
@@ -278,15 +278,22 @@ @implementation CIMInputController (IMKServerInputHandleEvent)
// Receiving Events Directly from the Text Services Manager
- (BOOL)handleEvent:(NSEvent *)event client:(id)sender {
- if ([event type] != NSKeyDown) {
- dlog(DEBUG_LOGGING, @"LOGGING::NONKEYDOWN::%@/%@", event, sender);
- dlog(DEBUG_INPUTCONTROLLER, @"** CIMInputController -handleEvent:client: with event: %@ / sender: %@", event, sender);
- return NO;
+ if (event.type == NSKeyDown) {
+ dlog(DEBUG_INPUTCONTROLLER, @"** CIMInputController KEYDOWN -handleEvent:client: with event: %@ / key: %d / modifier: %lu / chars: %@ / chars ignoreMod: %@ / client: %@", event, [event keyCode], [event modifierFlags], [event characters], [event charactersIgnoringModifiers], [[self client] bundleIdentifier]);
+ BOOL processed = [self->_receiver inputController:self inputText:[event characters] key:[event keyCode] modifiers:[event modifierFlags] client:sender] > CIMInputTextProcessResultNotProcessed;
+ dlog(DEBUG_LOGGING, @"LOGGING::PROCESSED::%d", processed);
+ return processed;
}
- dlog(DEBUG_INPUTCONTROLLER, @"** CIMInputController -handleEvent:client: with event: %@ / key: %d / modifier: %lu / chars: %@ / chars ignoreMod: %@ / client: %@", event, [event keyCode], [event modifierFlags], [event characters], [event charactersIgnoringModifiers], [[self client] bundleIdentifier]);
- BOOL processed = [self->_receiver inputController:self inputText:[event characters] key:[event keyCode] modifiers:[event modifierFlags] client:sender] > CIMInputTextProcessResultNotProcessed;
- dlog(DEBUG_LOGGING, @"LOGGING::PROCESSED::%d", processed);
- return processed;
+ else if (event.type == NSFlagsChanged) {
+// dlog(DEBUG_INPUTCONTROLLER, @"** CIMInputController FLAGCHANGED -handleEvent:client: with event: %@ / key: %d / modifier: %lu / chars: %@ / chars ignoreMod: %@ / client: %@", event, -1, [NSEvent modifierFlags], nil, nil, [[self client] bundleIdentifier]);
+// BOOL processed = [self->_receiver inputController:self inputText:nil key:-1 modifiers:[NSEvent modifierFlags] client:sender] > CIMInputTextProcessResultNotProcessed;
+// dlog(DEBUG_LOGGING, @"LOGGING::PROCESSED::%d", processed);
+// return processed;
+ }
+
+ dlog(DEBUG_LOGGING, @"LOGGING::UNHANDLED::%@/%@", event, sender);
+ dlog(DEBUG_INPUTCONTROLLER, @"** CIMInputController -handleEvent:client: with event: %@ / sender: %@", event, sender);
+ return NO;
}
@end
View
6 CommonInputMethod/CIMInputHandler.m
@@ -67,7 +67,11 @@ - (CIMInputTextProcessResult)inputController:(CIMInputController *)controller in
dlog(TRUE, @"-- CIMInputHandler -inputText: Command/Option key input / returned NO");
return CIMInputTextProcessResultNotProcessedAndNeedsCommit;
}
-
+
+ if (string == nil) {
+ return CIMInputTextProcessResultNotProcessed;
+ }
+
result = [controller.composer inputController:controller inputText:string key:keyCode modifiers:flags client:sender];
finalize:
View
122 Gureum.xcodeproj/project.pbxproj
@@ -43,6 +43,7 @@
38BFE80218B45419004B2B2E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 38BFE80018B45419004B2B2E /* InfoPlist.strings */; };
38BFE80418B45419004B2B2E /* GureumTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 38BFE80318B45419004B2B2E /* GureumTests.m */; };
38BFE82118B4F181004B2B2E /* GureumMockObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 38BFE82018B4F181004B2B2E /* GureumMockObjects.m */; };
+ 38D6F1CC194003C7003F25EE /* command.png in Resources */ = {isa = PBXBuildFile; fileRef = 38D6F1CB194003C7003F25EE /* command.png */; };
38F1525116ECF87E00FE1B4A /* han3final@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 38F1524816ECF87E00FE1B4A /* han3final@2x.png */; };
38F1525316ECF87E00FE1B4A /* han390@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 38F1524A16ECF87E00FE1B4A /* han390@2x.png */; };
38F1525516ECF87E00FE1B4A /* hanroman@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 38F1524C16ECF87E00FE1B4A /* hanroman@2x.png */; };
@@ -54,20 +55,6 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 380B909414303838001D7550 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 939837800DA42965007F53F3;
- remoteInfo = "ShortcutRecorder.framework - with embedded ibplugin";
- };
- 380B909814303838001D7550 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 93983B220DA43C4E007F53F3;
- remoteInfo = ShortcutRecorderFramework_Tester;
- };
384FDE63193F898500114F48 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 388C5D6D154D88FC00B4F3E1 /* ShortcutRecorder.xcodeproj */;
@@ -89,13 +76,6 @@
remoteGlobalIDString = 93983B220DA43C4E007F53F3;
remoteInfo = ShortcutRecorder_Tester;
};
- 388C5D76154D891E00B4F3E1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */;
- proxyType = 1;
- remoteGlobalIDString = 9398377F0DA42965007F53F3;
- remoteInfo = ShortcutRecorder.framework;
- };
389A387C1423477F00A2ED88 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 38FA220114233FD900444D67 /* Hangul.xcodeproj */;
@@ -144,15 +124,14 @@
/* Begin PBXFileReference section */
3802E4631413A9FF00256B54 /* CIMConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMConfiguration.h; sourceTree = "<group>"; };
3802E4641413A9FF00256B54 /* CIMConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CIMConfiguration.m; sourceTree = "<group>"; };
- 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ShortcutRecorder.xcodeproj; path = ShortcutRecorder/ShortcutRecorder.xcodeproj; sourceTree = SOURCE_ROOT; };
380E1C6114B7F5D800289EE7 /* CIMInputControllerGureum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMInputControllerGureum.h; sourceTree = "<group>"; };
380E1C6214B7F5D800289EE7 /* CIMInputControllerGureum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CIMInputControllerGureum.m; sourceTree = "<group>"; };
380ECC8216ECF49F0063B881 /* Gureum.iconset */ = {isa = PBXFileReference; lastKnownFileType = folder.iconset; name = Gureum.iconset; path = Icons/Gureum.iconset; sourceTree = "<group>"; };
38162D7A140F64B70077AA2D /* HangulComposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HangulComposer.h; sourceTree = "<group>"; };
38162D7B140F64B70077AA2D /* HangulComposer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HangulComposer.m; sourceTree = "<group>"; };
38162DCA1410A4A50077AA2D /* CIMComposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMComposer.h; sourceTree = "<group>"; };
38162DCE1410A95A0077AA2D /* CIMCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMCommon.h; sourceTree = "<group>"; };
- 38162DF3141263270077AA2D /* GureumOSX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GureumOSX.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 38162DF3141263270077AA2D /* Gureum.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gureum.app; sourceTree = BUILT_PRODUCTS_DIR; };
38162DF8141263280077AA2D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
38162DFA141263280077AA2D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
38162DFC141263280077AA2D /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
@@ -190,17 +169,18 @@
38863D2F140F282000A8ED76 /* CIMInputHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMInputHandler.h; sourceTree = "<group>"; };
38863D30140F282000A8ED76 /* CIMInputHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CIMInputHandler.m; sourceTree = "<group>"; };
38863D34140F421800A8ED76 /* CIMApplicationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CIMApplicationDelegate.h; sourceTree = "<group>"; };
- 388C5D6D154D88FC00B4F3E1 /* ShortcutRecorder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ShortcutRecorder.xcodeproj; path = GureumOSX/ShortcutRecorder/ShortcutRecorder.xcodeproj; sourceTree = SOURCE_ROOT; };
+ 388C5D6D154D88FC00B4F3E1 /* ShortcutRecorder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ShortcutRecorder.xcodeproj; path = OSX/ShortcutRecorder/ShortcutRecorder.xcodeproj; sourceTree = SOURCE_ROOT; };
388E2A601469249700ADBDA5 /* Hangul.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Hangul.strings; sourceTree = "<group>"; };
388FD02A175EDB5500469B76 /* Version.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = "<group>"; };
- 38BFE7FA18B45419004B2B2E /* GureumOSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GureumOSXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 38BFE7FA18B45419004B2B2E /* OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OSXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
38BFE7FB18B45419004B2B2E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
38BFE7FF18B45419004B2B2E /* GureumTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GureumTests-Info.plist"; sourceTree = "<group>"; };
38BFE80118B45419004B2B2E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
38BFE80318B45419004B2B2E /* GureumTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GureumTests.m; sourceTree = "<group>"; };
38BFE80518B45419004B2B2E /* GureumTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GureumTests-Prefix.pch"; sourceTree = "<group>"; };
38BFE81F18B4F181004B2B2E /* GureumMockObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GureumMockObjects.h; sourceTree = "<group>"; };
38BFE82018B4F181004B2B2E /* GureumMockObjects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GureumMockObjects.m; sourceTree = "<group>"; };
+ 38D6F1CB194003C7003F25EE /* command.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = command.png; path = Icons/command.png; sourceTree = "<group>"; };
38F1524816ECF87E00FE1B4A /* han3final@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "han3final@2x.png"; path = "Icons/han3final@2x.png"; sourceTree = "<group>"; };
38F1524A16ECF87E00FE1B4A /* han390@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "han390@2x.png"; path = "Icons/han390@2x.png"; sourceTree = "<group>"; };
38F1524C16ECF87E00FE1B4A /* hanroman@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "hanroman@2x.png"; path = "Icons/hanroman@2x.png"; sourceTree = "<group>"; };
@@ -236,16 +216,7 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 380B908814303836001D7550 /* Products */ = {
- isa = PBXGroup;
- children = (
- 380B909514303838001D7550 /* ShortcutRecorder.framework */,
- 380B909914303838001D7550 /* ShortcutRecorder.app */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- 38162DF6141263270077AA2D /* GureumOSX */ = {
+ 38162DF6141263270077AA2D /* OSX */ = {
isa = PBXGroup;
children = (
38FA220114233FD900444D67 /* Hangul.xcodeproj */,
@@ -260,7 +231,7 @@
38475AEB14129BAA0062100D /* Icons */,
38162DF7141263280077AA2D /* Supporting Files */,
);
- path = GureumOSX;
+ path = OSX;
sourceTree = "<group>";
};
38162DF7141263280077AA2D /* Supporting Files */ = {
@@ -282,7 +253,6 @@
383EF60E142B28EB00013C0B /* GureumPreferencesWindowController.h */,
383EF60F142B28EB00013C0B /* GureumPreferencesWindowController.m */,
383EF60C142B28B600013C0B /* preferences.xib */,
- 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */,
);
name = "Graphic Interface";
sourceTree = "<group>";
@@ -308,6 +278,7 @@
38475AF51412BC050062100D /* qwerty.png */,
38F1524D16ECF87E00FE1B4A /* qwerty@2x.png */,
38F220A3142C79710064FAC3 /* libhangul_logo.png */,
+ 38D6F1CB194003C7003F25EE /* command.png */,
);
name = Icons;
sourceTree = "<group>";
@@ -346,7 +317,7 @@
isa = PBXGroup;
children = (
387DFFFE1421F1E000DAE6F4 /* Common Input Method */,
- 38162DF6141263270077AA2D /* GureumOSX */,
+ 38162DF6141263270077AA2D /* OSX */,
38BFE7FD18B45419004B2B2E /* GureumTests */,
38863C62140E64EB00A8ED76 /* Frameworks */,
38863C60140E64EB00A8ED76 /* Products */,
@@ -357,8 +328,8 @@
38863C60140E64EB00A8ED76 /* Products */ = {
isa = PBXGroup;
children = (
- 38162DF3141263270077AA2D /* GureumOSX.app */,
- 38BFE7FA18B45419004B2B2E /* GureumOSXTests.xctest */,
+ 38162DF3141263270077AA2D /* Gureum.app */,
+ 38BFE7FA18B45419004B2B2E /* OSXTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@@ -429,9 +400,9 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
- 38162DF2141263270077AA2D /* GureumOSX */ = {
+ 38162DF2141263270077AA2D /* OSX */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 38162E08141263280077AA2D /* Build configuration list for PBXNativeTarget "GureumOSX" */;
+ buildConfigurationList = 38162E08141263280077AA2D /* Build configuration list for PBXNativeTarget "OSX" */;
buildPhases = (
388FD025175ED98E00469B76 /* Version */,
38162DEF141263270077AA2D /* Sources */,
@@ -444,16 +415,15 @@
dependencies = (
384FDE64193F898500114F48 /* PBXTargetDependency */,
389A398414234B5600A2ED88 /* PBXTargetDependency */,
- 388C5D77154D891E00B4F3E1 /* PBXTargetDependency */,
);
- name = GureumOSX;
- productName = GureumOSX;
- productReference = 38162DF3141263270077AA2D /* GureumOSX.app */;
+ name = OSX;
+ productName = OSX;
+ productReference = 38162DF3141263270077AA2D /* Gureum.app */;
productType = "com.apple.product-type.application";
};
- 38BFE7F918B45419004B2B2E /* GureumOSXTests */ = {
+ 38BFE7F918B45419004B2B2E /* OSXTests */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 38BFE80818B45419004B2B2E /* Build configuration list for PBXNativeTarget "GureumOSXTests" */;
+ buildConfigurationList = 38BFE80818B45419004B2B2E /* Build configuration list for PBXNativeTarget "OSXTests" */;
buildPhases = (
38BFE7F618B45419004B2B2E /* Sources */,
38BFE7F718B45419004B2B2E /* Frameworks */,
@@ -464,9 +434,9 @@
dependencies = (
38BFE80718B45419004B2B2E /* PBXTargetDependency */,
);
- name = GureumOSXTests;
+ name = OSXTests;
productName = GureumTests;
- productReference = 38BFE7FA18B45419004B2B2E /* GureumOSXTests.xctest */;
+ productReference = 38BFE7FA18B45419004B2B2E /* OSXTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
@@ -503,37 +473,19 @@
ProjectRef = 38FA220114233FD900444D67 /* Hangul.xcodeproj */;
},
{
- ProductGroup = 380B908814303836001D7550 /* Products */;
- ProjectRef = 380B908714303836001D7550 /* ShortcutRecorder.xcodeproj */;
- },
- {
ProductGroup = 38615D69193F8868007F7686 /* Products */;
ProjectRef = 388C5D6D154D88FC00B4F3E1 /* ShortcutRecorder.xcodeproj */;
},
);
projectRoot = "";
targets = (
- 38162DF2141263270077AA2D /* GureumOSX */,
- 38BFE7F918B45419004B2B2E /* GureumOSXTests */,
+ 38162DF2141263270077AA2D /* OSX */,
+ 38BFE7F918B45419004B2B2E /* OSXTests */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
- 380B909514303838001D7550 /* ShortcutRecorder.framework */ = {
- isa = PBXReferenceProxy;
- fileType = wrapper.framework;
- path = ShortcutRecorder.framework;
- remoteRef = 380B909414303838001D7550 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 380B909914303838001D7550 /* ShortcutRecorder.app */ = {
- isa = PBXReferenceProxy;
- fileType = wrapper.application;
- path = ShortcutRecorder.app;
- remoteRef = 380B909814303838001D7550 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
38615D6E193F8868007F7686 /* ShortcutRecorder.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
@@ -587,6 +539,7 @@
383562FC18B9F34500F8B8B9 /* eng@2x.png in Resources */,
383562FB18B9F34500F8B8B9 /* eng.png in Resources */,
380ECC8316ECF49F0063B881 /* Gureum.iconset in Resources */,
+ 38D6F1CC194003C7003F25EE /* command.png in Resources */,
38F1525116ECF87E00FE1B4A /* han3final@2x.png in Resources */,
38F1525316ECF87E00FE1B4A /* han390@2x.png in Resources */,
38F1525516ECF87E00FE1B4A /* hanroman@2x.png in Resources */,
@@ -617,7 +570,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/bash;
- shellScript = "cd $PROJECT_DIR/GureumOSX\ntag=`git describe --tags`\ntag=${tag#GureumOSX-}\necho \"VERSION = $tag\" > Version.xcconfig";
+ shellScript = "cd $PROJECT_DIR/OSX\ntag=`git describe --tags`\ntag=${tag#OSX-}\necho \"VERSION = $tag\" > Version.xcconfig";
};
/* End PBXShellScriptBuildPhase section */
@@ -658,19 +611,14 @@
name = ShortcutRecorder.framework;
targetProxy = 384FDE63193F898500114F48 /* PBXContainerItemProxy */;
};
- 388C5D77154D891E00B4F3E1 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = ShortcutRecorder.framework;
- targetProxy = 388C5D76154D891E00B4F3E1 /* PBXContainerItemProxy */;
- };
389A398414234B5600A2ED88 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = Hangul;
targetProxy = 389A398314234B5600A2ED88 /* PBXContainerItemProxy */;
};
38BFE80718B45419004B2B2E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 38162DF2141263270077AA2D /* GureumOSX */;
+ target = 38162DF2141263270077AA2D /* OSX */;
targetProxy = 38BFE80618B45419004B2B2E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -705,29 +653,29 @@
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
"\"$(PROJECT_DIR)/libhangul-objc/build/$(CONFIGURATION)\"",
- "\"$(PROJECT_DIR)/GureumOSX/ShortcutRecorder/build/$(CONFIGURATION)\"",
+ "\"$(PROJECT_DIR)/OSX/ShortcutRecorder/build/$(CONFIGURATION)\"",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = GureumOSX/Prefix.pch;
+ GCC_PREFIX_HEADER = OSX/Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IBC_PLUGIN_SEARCH_PATHS = "ShortcutRecorder/build/$(CONFIGURATION)";
- INFOPLIST_FILE = GureumOSX/Info.plist;
+ INFOPLIST_FILE = OSX/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Input Methods";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Pods/build/$(CONFIGURATION)\"",
);
MACOSX_DEPLOYMENT_TARGET = 10.6.8;
ONLY_ACTIVE_ARCH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_NAME = Gureum;
SDKROOT = macosx;
WRAPPER_EXTENSION = app;
};
@@ -743,24 +691,24 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = (
"\"$(PROJECT_DIR)/libhangul-objc/build/$(CONFIGURATION)\"",
- "\"$(PROJECT_DIR)/GureumOSX/ShortcutRecorder/build/$(CONFIGURATION)\"",
+ "\"$(PROJECT_DIR)/OSX/ShortcutRecorder/build/$(CONFIGURATION)\"",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = GureumOSX/Prefix.pch;
+ GCC_PREFIX_HEADER = OSX/Prefix.pch;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IBC_PLUGIN_SEARCH_PATHS = "ShortcutRecorder/build/$(CONFIGURATION)";
- INFOPLIST_FILE = GureumOSX/Info.plist;
+ INFOPLIST_FILE = OSX/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Input Methods";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Pods/build/$(CONFIGURATION)\"",
);
MACOSX_DEPLOYMENT_TARGET = 10.6.8;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_NAME = Gureum;
SDKROOT = macosx;
WRAPPER_EXTENSION = app;
};
@@ -888,7 +836,7 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 38162E08141263280077AA2D /* Build configuration list for PBXNativeTarget "GureumOSX" */ = {
+ 38162E08141263280077AA2D /* Build configuration list for PBXNativeTarget "OSX" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38162E09141263280077AA2D /* Debug */,
@@ -906,7 +854,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 38BFE80818B45419004B2B2E /* Build configuration list for PBXNativeTarget "GureumOSXTests" */ = {
+ 38BFE80818B45419004B2B2E /* Build configuration list for PBXNativeTarget "OSXTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38BFE80918B45419004B2B2E /* Debug */,
View
11 GureumOSX/tools/build_product.sh
@@ -1,11 +0,0 @@
-#!/bin/bash
-. ready.sh
-
-rm "build/$CONFIGURATION/$pkgname.pkg" "build/$CONFIGURATION/$pkgname.app.tar.gz"
-rm "build/$CONFIGURATION/*.app/Contents/Info.plist"
-
-xcodebuild -project 'Gureum.xcodeproj' -target 'GureumOSX' -configuration "$CONFIGURATION" && \
-cd "build/$CONFIGURATION" && \
-productbuild --product "../../GureumOSX/tools/preinst.plist" --component "$appname" '/Library/Input Methods' --sign "Developer ID Installer: YunWon Jeong" "$pkgname.pkg" && \
-tar -zcf "$pkgname.app.tar.gz" "$appname"
-
View
4 HACKING.md
@@ -9,13 +9,13 @@ git submodule을 포함하고 있으므로 클론 후 submodule도 가져오도
open Gureum.xcworkspace
# 빌드
-GureumOSX 타겟을 빌드하면 의존성과 함께 구름 입력기가 빌드됩니다.
+OSX 타겟을 빌드하면 의존성과 함께 구름 입력기가 빌드됩니다.
Debug Configuration으로 빌드하면 Console.app 에서 로그를 확인할 수 있습니다.
# 테스트
디버그 모드로 빌드한 입력기를 설치합니다.
- cd GureumOSX/tools
+ cd OSX/tools
./installtest.sh
설치 후에는 구름 입력기가 사라질 수 있습니다.
View
0 GureumOSX/.gitignore → OSX/.gitignore
File renamed without changes.
View
0 GureumOSX/CIMInputControllerGureum.h → OSX/CIMInputControllerGureum.h
File renamed without changes.
View
0 GureumOSX/CIMInputControllerGureum.m → OSX/CIMInputControllerGureum.m
File renamed without changes.
View
0 GureumOSX/GureumAppDelegate.h → OSX/GureumAppDelegate.h
File renamed without changes.
View
0 GureumOSX/GureumAppDelegate.m → OSX/GureumAppDelegate.m
File renamed without changes.
View
2 GureumOSX/GureumComposer.h → OSX/GureumComposer.h
@@ -41,6 +41,8 @@ FOUNDATION_EXTERN NSString *kGureumInputSourceIdentifierHan3_2012Loose;
CIMBaseComposer *romanComposer;
HangulComposer *hangulComposer;
HanjaComposer *hanjaComposer;
+
+ NSUInteger lastModifier;
}
@end
View
81 GureumOSX/GureumComposer.m → OSX/GureumComposer.m
@@ -11,7 +11,8 @@
#import "CIMConfiguration.h"
#import "GureumAppDelegate.h"
-#define DEBUG_GUREUM FALSE
+#define DEBUG_GUREUM TRUE
+#define DEBUG_SHORTCUT TRUE
NSString *kGureumInputSourceIdentifierQwerty = @"org.youknowone.inputmethod.Gureum.qwerty";
NSString *kGureumInputSourceIdentifierDvorak = @"org.youknowone.inputmethod.Gureum.dvorak";
@@ -104,8 +105,76 @@ - (void)setInputMode:(NSString *)newInputMode {
- (CIMInputTextProcessResult)inputController:(CIMInputController *)controller commandString:(NSString *)string key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)sender {
NSInteger inputModifier = flags & NSDeviceIndependentModifierFlagsMask & ~NSAlphaShiftKeyMask;
- if (inputModifier == CIMSharedConfiguration->inputModeExchangeKeyModifier && keyCode == CIMSharedConfiguration->inputModeExchangeKeyCode) {
- dlog(DEBUG_GUREUM, @"***** Keyboard Changed *****");
+ BOOL need_exchange = NO;
+ BOOL need_hanjamode = NO;
+ if (string == nil) {
+ NSUInteger modifierKey = flags & 0xff;
+ if (self->lastModifier != 0 && modifierKey == 0) {
+ dlog(DEBUG_SHORTCUT, @"**** Trigger modifier: %lx ****", self->lastModifier);
+ NSDictionary *correspondedConfigurations = @{
+ @(0x01): @(CIMSharedConfiguration->leftControlKeyShortcutBehavior),
+ @(0x20): @(CIMSharedConfiguration->leftOptionKeyShortcutBehavior),
+ @(0x08): @(CIMSharedConfiguration->leftCommandKeyShortcutBehavior),
+ @(0x10): @(CIMSharedConfiguration->leftCommandKeyShortcutBehavior),
+ @(0x40): @(CIMSharedConfiguration->leftOptionKeyShortcutBehavior),
+ };
+ for (NSNumber *marker in @[@(0x01), @(0x20), @(0x08), @(0x10), @(0x40)]) {
+ if (self->lastModifier == marker.unsignedIntegerValue ) {
+ NSInteger configuration = [correspondedConfigurations[marker] integerValue];
+ switch (configuration) {
+ case 0:
+ break;
+ case 1: {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by exchange modifier ****");
+ need_exchange = YES;
+ } break;
+ case 2: {
+ dlog(DEBUG_SHORTCUT, @"**** Hanja mode by hanja modifier ****");
+ need_hanjamode = YES;
+ } break;
+ case 3: if (self.delegate == self->hangulComposer) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by change to english modifier ****");
+ need_exchange = YES;
+ } break;
+ case 4: if (self.delegate == self->romanComposer) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by change to korean modifier ****");
+ need_exchange = YES;
+ } break;
+ default:
+ dassert(NO);
+ break;
+ }
+ }
+ }
+ } else {
+ self->lastModifier = modifierKey;
+ dlog(DEBUG_SHORTCUT, @"**** Save modifier: %lx ****", self->lastModifier);
+ }
+ } else {
+ dlog(DEBUG_SHORTCUT, @"**** Reset modifier ****");
+ self->lastModifier = 0;
+
+ if (inputModifier == CIMSharedConfiguration->inputModeExchangeKeyModifier && keyCode == CIMSharedConfiguration->inputModeExchangeKeyCode) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by exchange shortcut ****");
+ need_exchange = YES;
+ }
+ else if (self.delegate == self->hangulComposer && inputModifier == CIMSharedConfiguration->inputModeEnglishKeyModifier && keyCode == CIMSharedConfiguration->inputModeEnglishKeyCode) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by change to english shortcut ****");
+ need_exchange = YES;
+ }
+ else if (self.delegate == self->romanComposer && inputModifier == CIMSharedConfiguration->inputModeKoreanKeyModifier && keyCode == CIMSharedConfiguration->inputModeKoreanKeyCode) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by change to korean shortcut ****");
+ need_exchange = YES;
+ }
+
+ if (CIMSharedConfiguration->inputModeHanjaKeyModifier && keyCode == CIMSharedConfiguration->inputModeHanjaKeyCode) {
+ dlog(DEBUG_SHORTCUT, @"**** Layout exchange by hanja shortcut ****");
+ need_hanjamode = YES;
+ }
+ }
+
+ if (need_exchange) {
+ dlog(DEBUG_GUREUM, @"***** Try to change layout *****");
// 한영전환을 위해 현재 입력 중인 문자 합성 취소
[self.delegate cancelComposition];
if (self.delegate == self->romanComposer) {
@@ -119,14 +188,16 @@ - (CIMInputTextProcessResult)inputController:(CIMInputController *)controller co
manager.needsFakeComposedString = YES;
return CIMInputTextProcessResultProcessed;
}
+
if (self.delegate == self->hanjaComposer) {
if (!self->hanjaComposer.mode && self->hanjaComposer.composedString.length == 0 && self->hanjaComposer.commitString.length == 0) {
// 한자 입력이 완료되었고 한자 모드도 아님
self.delegate = self->hangulComposer;
}
}
+
if (self.delegate == self->hangulComposer) {
- if (inputModifier == CIMSharedConfiguration->inputModeHanjaKeyModifier && keyCode == CIMSharedConfiguration->inputModeHanjaKeyCode) {
+ if (need_hanjamode) {
// 현재 조합 중 여부에 따라 한자 모드 여부를 결정
BOOL isComposing = self->hangulComposer.composedString.length > 0;
self->hanjaComposer.mode = !isComposing; // 조합 중이 아니면 1회만 사전을 띄운다
@@ -136,7 +207,7 @@ - (CIMInputTextProcessResult)inputController:(CIMInputController *)controller co
return CIMInputTextProcessResultProcessed;
}
// Vi-mode: esc로 로마자 키보드로 전환
- if (CIMSharedConfiguration->romanModeByEscapeKey && keyCode == kVK_Escape) {
+ if (CIMSharedConfiguration->romanModeByEscapeKey && (keyCode == kVK_Escape || (0))) {
dlog(DEBUG_GUREUM, @"**** Keyboard Changed by Vi-mode");
[self.delegate cancelComposition];
[sender selectInputMode:kGureumInputSourceIdentifierQwerty];
View
18 ...umOSX/GureumPreferencesWindowController.h → OSX/GureumPreferencesWindowController.h
@@ -14,12 +14,23 @@
@private
IBOutlet NSView *preferenceContainerView;
IBOutlet NSView *commonButtonsView;
- IBOutlet NSView *gureumPreferenceView, *hangulPreferenceView;
+ IBOutlet NSView *shortcutPreferenceView, *gureumPreferenceView, *hangulPreferenceView;
NSDictionary *preferenceViews;
BOOL cancel;
-
- /* Gureum Preferences */
+
+ /* Shortcut Preferences */
+ IBOutlet NSComboBox *leftCommandBehaviorComboBox;
+ IBOutlet NSComboBox *leftOptionBehaviorComboBox;
+ IBOutlet NSComboBox *leftControlBehaviorComboBox;
+ IBOutlet NSComboBox *rightCommandBehaviorComboBox;
+ IBOutlet NSComboBox *rightOptionBehaviorComboBox;
+ IBOutlet NSComboBox *rightControlBehaviorComboBox;
IBOutlet SRRecorderCell *inputModeExchangeKeyRecorderCell;
+ IBOutlet SRRecorderCell *inputModeHanjaKeyRecorderCell;
+ IBOutlet SRRecorderCell *inputModeEnglishKeyRecorderCell;
+ IBOutlet SRRecorderCell *inputModeKoreanKeyRecorderCell;
+
+ /* Gureum Preferences */
IBOutlet NSButton *autosaveDefaultInputModeCheckbox;
IBOutlet NSComboBox *defaultHangulInputModeComboBox;
IBOutlet NSComboBox *optionKeyBehaviorComboBox;
@@ -28,7 +39,6 @@
IBOutlet NSButton *zeroWidthSpaceForLayoutExchangeCheckbox;
/* Hangul Preferences */
- IBOutlet SRRecorderCell *inputModeHanjaKeyRecorderCell;
IBOutlet NSButton *showsInputForHanjaCandidatesCheckbox;
IBOutlet NSComboBox *hangulCombinationModeComposingComboBox;
View
53 ...umOSX/GureumPreferencesWindowController.m → OSX/GureumPreferencesWindowController.m
@@ -22,6 +22,7 @@ - (void)showPreferenceViewWithIdentifier:(id)identifier animate:(BOOL)animate;
@end
+static NSArray *GureumPreferencesShortcutBehaviors = nil;
static NSArray *GureumPreferencesHangulLayouts = nil;
static NSArray *GureumPreferencesHangulLayoutLocalizedNames = nil;
static NSArray *GureumPreferencesHangulSyllablePresentations = nil;
@@ -30,6 +31,13 @@ @implementation GureumPreferencesWindowController
+ (void)initialize {
[super initialize];
+ GureumPreferencesShortcutBehaviors = [[NSArray alloc] initWithObjects:
+ NSLocalizedStringFromTable(@"ShortcutBehaviorNone", @"Hangul", @""),
+ NSLocalizedStringFromTable(@"ShortcutBehaviorExchangeLanguage", @"Hangul", @""),
+ NSLocalizedStringFromTable(@"ShortcutBehaviorHanjaMode", @"Hangul", @""),
+ NSLocalizedStringFromTable(@"ShortcutBehaviorChangeToEnglish", @"Hangul", @""),
+ NSLocalizedStringFromTable(@"ShortcutBehaviorChangeToKorean", @"Hangul", @""),
+ nil];
GureumPreferencesHangulLayouts = [[NSArray alloc] initWithObjects:
@"org.youknowone.inputmethod.Gureum.han2",
@"org.youknowone.inputmethod.Gureum.han2classic",
@@ -74,21 +82,20 @@ - (id)initWithWindow:(NSWindow *)window
return self;
}
-- (void)windowDidLoad
-{
+- (void)windowDidLoad {
[super windowDidLoad];
self->preferenceViews = [[NSDictionary alloc] initWithObjectsAndKeys:
- gureumPreferenceView, @"Gureum",
- hangulPreferenceView, @"Hangul",
- nil];
+ shortcutPreferenceView, @"Shortcut",
+ gureumPreferenceView, @"Gureum",
+ hangulPreferenceView, @"Hangul",
+ nil];
[self loadFromConfiguration];
- [self showPreferenceViewWithIdentifier:@"Gureum" animate:YES];
+ [self showPreferenceViewWithIdentifier:@"Shortcut" animate:YES];
}
-- (void)dealloc
-{
+- (void)dealloc {
[self->preferenceViews release];
[super dealloc];
}
@@ -143,8 +150,19 @@ - (void)showPreferenceViewWithIdentifier:(id)identifier animate:(BOOL)animate {
- (void)loadFromConfiguration {
CIMConfiguration *configuration = [CIMConfiguration userDefaultConfiguration];
- // common
+ // shortcut
+ self->leftCommandBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->leftCommandKeyShortcutBehavior];
+ self->leftOptionBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->leftOptionKeyShortcutBehavior];
+ self->leftControlBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->leftControlKeyShortcutBehavior];
+ self->rightCommandBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->rightCommandKeyShortcutBehavior];
+ self->rightOptionBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->rightOptionKeyShortcutBehavior];
+ self->rightControlBehaviorComboBox.stringValue = GureumPreferencesShortcutBehaviors[configuration->rightControlKeyShortcutBehavior];
self->inputModeExchangeKeyRecorderCell.keyCombo = SRMakeKeyCombo(configuration->inputModeExchangeKeyCode, configuration->inputModeExchangeKeyModifier);
+ self->inputModeHanjaKeyRecorderCell.keyCombo = SRMakeKeyCombo(configuration->inputModeHanjaKeyCode, configuration->inputModeHanjaKeyModifier);
+ self->inputModeEnglishKeyRecorderCell.keyCombo = SRMakeKeyCombo(configuration->inputModeEnglishKeyCode, configuration->inputModeEnglishKeyModifier);
+ self->inputModeKoreanKeyRecorderCell.keyCombo = SRMakeKeyCombo(configuration->inputModeKoreanKeyCode, configuration->inputModeKoreanKeyModifier);
+
+ // common
NSLog(@"default input mode: %d", configuration->autosaveDefaultInputMode);
self->autosaveDefaultInputModeCheckbox.integerValue = configuration->autosaveDefaultInputMode;
NSLog(@"last hangul input mode: %@", configuration->lastHangulInputMode);
@@ -154,7 +172,6 @@ - (void)loadFromConfiguration {
self->zeroWidthSpaceForLayoutExchangeCheckbox.integerValue = configuration->zeroWidthSpaceForLayoutExchange;
// hangul
- self->inputModeHanjaKeyRecorderCell.keyCombo = SRMakeKeyCombo(configuration->inputModeHanjaKeyCode, configuration->inputModeHanjaKeyModifier);
[self->optionKeyBehaviorComboBox selectItemAtIndex:configuration->optionKeyBehavior];
if (!(0 <= configuration->hangulCombinationModeComposing && configuration->hangulCombinationModeComposing < HangulCharacterCombinationModeCount)) {
configuration->hangulCombinationModeComposing = 0;
@@ -173,9 +190,21 @@ - (void)loadFromConfiguration {
- (void)saveToConfiguration:(id)sender {
CIMConfiguration *configuration = [CIMConfiguration userDefaultConfiguration];
- // common
+ // shortcut
+ configuration->leftCommandKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->leftCommandBehaviorComboBox.stringValue];
+ configuration->leftOptionKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->leftOptionBehaviorComboBox.stringValue];
+ configuration->leftControlKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->leftControlBehaviorComboBox.stringValue];
+ configuration->rightCommandKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->rightCommandBehaviorComboBox.stringValue];
+ configuration->rightOptionKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->rightOptionBehaviorComboBox.stringValue];
+ configuration->rightControlKeyShortcutBehavior = [GureumPreferencesShortcutBehaviors indexOfObject:self->rightControlBehaviorComboBox.stringValue];
configuration->inputModeExchangeKeyCode = self->inputModeExchangeKeyRecorderCell.keyCombo.code;
configuration->inputModeExchangeKeyModifier = self->inputModeExchangeKeyRecorderCell.keyCombo.flags;
+ configuration->inputModeHanjaKeyCode = self->inputModeHanjaKeyRecorderCell.keyCombo.code;
+ configuration->inputModeHanjaKeyModifier = self->inputModeHanjaKeyRecorderCell.keyCombo.flags;
+ configuration->inputModeEnglishKeyCode = self->inputModeEnglishKeyRecorderCell.keyCombo.code;
+ configuration->inputModeKoreanKeyModifier = self->inputModeKoreanKeyRecorderCell.keyCombo.flags;
+
+ // common
configuration->autosaveDefaultInputMode = self->autosaveDefaultInputModeCheckbox.integerValue;
NSInteger index = [GureumPreferencesHangulLayoutLocalizedNames indexOfObject:self->defaultHangulInputModeComboBox.stringValue];
configuration->lastHangulInputMode = GureumPreferencesHangulLayouts[index];
@@ -184,8 +213,6 @@ - (void)saveToConfiguration:(id)sender {
configuration->zeroWidthSpaceForLayoutExchange = self->zeroWidthSpaceForLayoutExchangeCheckbox.integerValue;
// hangeul
- configuration->inputModeHanjaKeyCode = self->inputModeHanjaKeyRecorderCell.keyCombo.code;
- configuration->inputModeHanjaKeyModifier = self->inputModeHanjaKeyRecorderCell.keyCombo.flags;
configuration->showsInputForHanjaCandidates = self->showsInputForHanjaCandidatesCheckbox.integerValue;
configuration->hangulCombinationModeComposing = [GureumPreferencesHangulSyllablePresentations indexOfObject:self->hangulCombinationModeComposingComboBox.stringValue];
configuration->hangulCombinationModeCommiting = [GureumPreferencesHangulSyllablePresentations indexOfObject:self->hangulCombinationModeCommitingComboBox.stringValue];
View
6 GureumOSX/Hangul.strings → OSX/Hangul.strings
@@ -1,3 +1,9 @@
+"ShortcutBehaviorNone" = "동작 없음";
+"ShortcutBehaviorExchangeLanguage" = "언어 전환";
+"ShortcutBehaviorHanjaMode" = "한자 입력";
+"ShortcutBehaviorChangeToEnglish" = "영어로 전환";
+"ShortcutBehaviorChangeToKorean" = "한국어로 전환";
+
"HangulPresentationRemoveFillers" = "채움 문자 제거";
"HangulPresentationAllFillers" = "채움 문자 보임";
"HangulPresentationRemoveNonJungseongFiller" = "중성 채움 문자만 보임";
View
0 GureumOSX/HangulComposer.h → OSX/HangulComposer.h
File renamed without changes.
View
0 GureumOSX/HangulComposer.m → OSX/HangulComposer.m
File renamed without changes.
View
0 GureumOSX/Icons/COPYING → OSX/Icons/COPYING
File renamed without changes.
View
0 ...OSX/Icons/Gureum.iconset/icon_128x128.png → OSX/Icons/Gureum.iconset/icon_128x128.png
File renamed without changes
View
0 .../Icons/Gureum.iconset/icon_128x128@2x.png → OSX/Icons/Gureum.iconset/icon_128x128@2x.png
File renamed without changes
View
0 ...umOSX/Icons/Gureum.iconset/icon_16x16.png → OSX/Icons/Gureum.iconset/icon_16x16.png
File renamed without changes
View
0 ...SX/Icons/Gureum.iconset/icon_16x16@2x.png → OSX/Icons/Gureum.iconset/icon_16x16@2x.png
File renamed without changes
View
0 ...OSX/Icons/Gureum.iconset/icon_256x256.png → OSX/Icons/Gureum.iconset/icon_256x256.png
File renamed without changes
View
0 .../Icons/Gureum.iconset/icon_256x256@2x.png → OSX/Icons/Gureum.iconset/icon_256x256@2x.png
File renamed without changes
View
0 ...umOSX/Icons/Gureum.iconset/icon_32x32.png → OSX/Icons/Gureum.iconset/icon_32x32.png
File renamed without changes
View
0 ...SX/Icons/Gureum.iconset/icon_32x32@2x.png → OSX/Icons/Gureum.iconset/icon_32x32@2x.png
File renamed without changes
View
0 ...OSX/Icons/Gureum.iconset/icon_512x512.png → OSX/Icons/Gureum.iconset/icon_512x512.png
File renamed without changes
View
0 .../Icons/Gureum.iconset/icon_512x512@2x.png → OSX/Icons/Gureum.iconset/icon_512x512@2x.png
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_128x128.psd → OSX/Icons/Gureum_psd/icon_128x128.psd
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_16x16.psd → OSX/Icons/Gureum_psd/icon_16x16.psd
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_256x256.psd → OSX/Icons/Gureum_psd/icon_256x256.psd
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_32x32.psd → OSX/Icons/Gureum_psd/icon_32x32.psd
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_32x32@2x.psd → OSX/Icons/Gureum_psd/icon_32x32@2x.psd
File renamed without changes
View
0 GureumOSX/Icons/Gureum_psd/icon_512x512.psd → OSX/Icons/Gureum_psd/icon_512x512.psd
File renamed without changes
View
0 ...mOSX/Icons/Gureum_psd/icon_512x512@2x.psd → OSX/Icons/Gureum_psd/icon_512x512@2x.psd
File renamed without changes
View
0 GureumOSX/Icons/colemak.png → OSX/Icons/colemak.png
File renamed without changes
View
0 GureumOSX/Icons/colemak@2x.png → OSX/Icons/colemak@2x.png
File renamed without changes
View
BIN OSX/Icons/command.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
0 GureumOSX/Icons/dvorak.png → OSX/Icons/dvorak.png
File renamed without changes
View
0 GureumOSX/Icons/dvorak@2x.png → OSX/Icons/dvorak@2x.png
File renamed without changes
View
0 GureumOSX/Icons/eng.png → OSX/Icons/eng.png
File renamed without changes
View
0 GureumOSX/Icons/eng@2x.png → OSX/Icons/eng@2x.png
File renamed without changes
View
0 GureumOSX/Icons/han.png → OSX/Icons/han.png
File renamed without changes
View
0 GureumOSX/Icons/han2.png → OSX/Icons/han2.png
Diff not rendered.
View
0 GureumOSX/Icons/han2@2x.png → OSX/Icons/han2@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/han3.png → OSX/Icons/han3.png
Diff not rendered.
View
0 GureumOSX/Icons/han390.png → OSX/Icons/han390.png
Diff not rendered.
View
0 GureumOSX/Icons/han390@2x.png → OSX/Icons/han390@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/han3@2x.png → OSX/Icons/han3@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/han3final.png → OSX/Icons/han3final.png
Diff not rendered.
View
0 GureumOSX/Icons/han3final@2x.png → OSX/Icons/han3final@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/han@2x.png → OSX/Icons/han@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/hanroman.png → OSX/Icons/hanroman.png
Diff not rendered.
View
0 GureumOSX/Icons/hanroman@2x.png → OSX/Icons/hanroman@2x.png
Diff not rendered.
View
0 GureumOSX/Icons/icons_psd/icons.psd → OSX/Icons/icons_psd/icons.psd
Diff not rendered.
View
0 GureumOSX/Icons/icons_psd/icons@2x.psd → OSX/Icons/icons_psd/icons@2x.psd
Diff not rendered.
View
0 GureumOSX/Icons/libhangul_logo.png → OSX/Icons/libhangul_logo.png
Diff not rendered.
View
0 GureumOSX/Icons/qwerty.png → OSX/Icons/qwerty.png
Diff not rendered.
View
0 GureumOSX/Icons/qwerty@2x.png → OSX/Icons/qwerty@2x.png
Diff not rendered.
View
0 GureumOSX/Info.plist → OSX/Info.plist
File renamed without changes.
View
0 GureumOSX/MainMenu.xib → OSX/MainMenu.xib
File renamed without changes.
View
0 GureumOSX/Prefix.pch → OSX/Prefix.pch
File renamed without changes.
View
0 GureumOSX/ShortcutRecorder → OSX/ShortcutRecorder
File renamed without changes.
View
0 GureumOSX/en.lproj/InfoPlist.strings → OSX/en.lproj/InfoPlist.strings
File renamed without changes.
View
0 GureumOSX/ko.lproj/InfoPlist.strings → OSX/ko.lproj/InfoPlist.strings
File renamed without changes.
View
0 GureumOSX/main.m → OSX/main.m
File renamed without changes.
View
417 GureumOSX/preferences.xib → OSX/preferences.xib
@@ -14,23 +14,30 @@
<outlet property="hangulCombinationModeCommitingComboBox" destination="115" id="119"/>
<outlet property="hangulCombinationModeComposingComboBox" destination="110" id="120"/>
<outlet property="hangulPreferenceView" destination="93" id="99"/>
+ <outlet property="inputModeEnglishKeyRecorderCell" destination="fZ6-A9-nXK" id="0sv-uz-t8W"/>
<outlet property="inputModeExchangeKeyRecorderCell" destination="101" id="132"/>
<outlet property="inputModeHanjaKeyRecorderCell" destination="125" id="133"/>
+ <outlet property="inputModeKoreanKeyRecorderCell" destination="fB7-qv-YdC" id="lwn-33-JAe"/>
+ <outlet property="leftCommandBehaviorComboBox" destination="3fT-k8-jq4" id="GJZ-kk-ZlH"/>
+ <outlet property="leftControlBehaviorComboBox" destination="8Jj-bU-YcQ" id="vD3-R9-wlr"/>
+ <outlet property="leftOptionBehaviorComboBox" destination="Syh-43-UDq" id="oxP-ct-zJD"/>
<outlet property="optionKeyBehaviorComboBox" destination="149" id="153"/>
<outlet property="preferenceContainerView" destination="72" id="73"/>
+ <outlet property="rightCommandBehaviorComboBox" destination="EfO-Pq-owx" id="ZgX-4S-H7N"/>
+ <outlet property="rightOptionBehaviorComboBox" destination="Iyi-C8-FRX" id="v3s-Gk-BP8"/>
<outlet property="romanModeByEscapeKeyCheckbox" destination="128" id="131"/>
+ <outlet property="shortcutPreferenceView" destination="d3g-yd-5Pi" id="yGr-RR-7LO"/>
+ <outlet property="showsInputForHanjaCandidatesCheckbox" destination="kbw-KS-sBP" id="qlw-Vh-CVc"/>
<outlet property="window" destination="1" id="108"/>
<outlet property="zeroWidthSpaceForBlankComposedStringCheckbox" destination="qS6-9b-zpa" id="ctU-hT-dri"/>
<outlet property="zeroWidthSpaceForLayoutExchangeCheckbox" destination="ofO-Xf-tQi" id="VYd-af-BHG"/>
</connections>
</customObject>
- <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
- <customObject id="-3" userLabel="Application"/>
<window title="환경설정" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" unifiedTitleAndToolbar="YES"/>
<windowPositionMask key="initialPositionMask" rightStrut="YES" topStrut="YES"/>
<rect key="contentRect" x="1280" y="835" width="300" height="40"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="300" height="40"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -71,12 +78,17 @@
</view>
<toolbar key="toolbar" implicitIdentifier="49D5DD9E-1635-40D3-AB36-BE9EF70EE0A6" explicitIdentifier="GureumPreferencesToolbar" displayMode="iconAndLabel" sizeMode="regular" id="4">
<allowedToolbarItems>
- <toolbarItem implicitItemIdentifier="5153CAD9-1E22-4BF9-8601-0E2B2EB3FBDD" explicitItemIdentifier="Gureum" label="구름" paletteLabel="구름" toolTip="구름 입력기를 설정합니다" tag="1" image="Gureum" selectable="YES" id="12">
+ <toolbarItem implicitItemIdentifier="1E4AADE6-A6A5-47B9-888E-669784F4E4C9" explicitItemIdentifier="Shortcut" label="단축" paletteLabel="단축" tag="1" image="command" selectable="YES" id="Aaa-F4-pBb">
+ <connections>
+ <action selector="selectPreferenceItem:" target="-2" id="dEz-Dc-jWe"/>
+ </connections>
+ </toolbarItem>
+ <toolbarItem implicitItemIdentifier="5153CAD9-1E22-4BF9-8601-0E2B2EB3FBDD" explicitItemIdentifier="Gureum" label="구름" paletteLabel="구름" toolTip="구름 입력기를 설정합니다" tag="2" image="Gureum" selectable="YES" id="12">
<connections>
<action selector="selectPreferenceItem:" target="-2" id="74"/>
</connections>
</toolbarItem>
- <toolbarItem implicitItemIdentifier="314402ED-7DEC-4BB0-AC60-98BBFFC1921F" explicitItemIdentifier="Hangul" label="한글" paletteLabel="한글" tag="2" image="libhangul_logo" visibilityPriority="1" selectable="YES" id="13">
+ <toolbarItem implicitItemIdentifier="314402ED-7DEC-4BB0-AC60-98BBFFC1921F" explicitItemIdentifier="Hangul" label="한글" paletteLabel="한글" tag="3" image="libhangul_logo" visibilityPriority="1" selectable="YES" id="13">
<connections>
<action selector="selectPreferenceItem:" target="-2" id="75"/>
</connections>
@@ -87,6 +99,7 @@
<toolbarItem implicitItemIdentifier="NSToolbarCustomizeToolbarItem" id="11"/>
</allowedToolbarItems>
<defaultToolbarItems>
+ <toolbarItem reference="Aaa-F4-pBb"/>
<toolbarItem reference="12"/>
<toolbarItem reference="13"/>
<toolbarItem reference="9"/>
@@ -101,12 +114,171 @@
<outlet property="delegate" destination="-2" id="48"/>
</connections>
</window>
- <customView id="82">
- <rect key="frame" x="0.0" y="0.0" width="363" height="221"/>
+ <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+ <customView id="d3g-yd-5Pi">
+ <rect key="frame" x="0.0" y="0.0" width="329" height="181"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
+ <textField verticalHuggingPriority="750" id="Do4-s3-3rg">
+ <rect key="frame" x="18" y="-225" width="167" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="왼쪽 ⌘(command) 키 동작:" id="02H-D5-WuH">
+ <font key="font" size="13" name="AppleSDGothicNeo-Regular"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <comboBox verticalHuggingPriority="750" id="3fT-k8-jq4">
+ <rect key="frame" x="191" y="-229" width="121" height="26"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" id="g34-IJ-c67">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <objectValues>
+ <string>동작 없음</string>
+ <string>언어 전환</string>
+ <string>한자 입력</string>
+ <string>영어로 전환</string>
+ <string>한국어로 전환</string>
+ </objectValues>
+ </comboBoxCell>
+ <connections>
+ <outlet property="dataSource" destination="-2" id="Edn-3G-gxX"/>
+ </connections>
+ </comboBox>
+ <textField verticalHuggingPriority="750" id="Sbp-lN-W4h">
+ <rect key="frame" x="18" y="-197" width="151" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="왼쪽 ⌥(option) 키 동작:" id="jdq-R7-QYx">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <comboBox verticalHuggingPriority="750" id="Syh-43-UDq">
+ <rect key="frame" x="191" y="-201" width="121" height="26"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" id="eUx-6F-stf">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <objectValues>
+ <string>동작 없음</string>
+ <string>언어 전환</string>
+ <string>한자 입력</string>
+ <string>영어로 전환</string>
+ <string>한국어로 전환</string>
+ </objectValues>
+ </comboBoxCell>
+ <connections>
+ <outlet property="dataSource" destination="-2" id="9no-aM-KlR"/>
+ </connections>
+ </comboBox>
+ <textField verticalHuggingPriority="750" id="tVu-Q2-0Zc">
+ <rect key="frame" x="18" y="-169" width="136" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="왼쪽 ^(control) 키 동작:" id="j0V-UZ-rDc">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <comboBox verticalHuggingPriority="750" id="8Jj-bU-YcQ">
+ <rect key="frame" x="191" y="-173" width="121" height="26"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" id="qz9-TK-OcC">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <objectValues>
+ <string>동작 없음</string>
+ <string>언어 전환</string>
+ <string>한자 입력</string>
+ <string>영어로 전환</string>
+ <string>한국어로 전환</string>
+ </objectValues>
+ </comboBoxCell>
+ <connections>
+ <outlet property="dataSource" destination="-2" id="8hp-Kr-aGB"/>
+ </connections>
+ </comboBox>
+ <textField verticalHuggingPriority="750" id="iup-BQ-fje">
+ <rect key="frame" x="18" y="-253" width="172" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="오른쪽 ⌘(command) 키 동작:" id="jeA-WO-Y3Q">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <comboBox verticalHuggingPriority="750" id="EfO-Pq-owx">
+ <rect key="frame" x="191" y="-257" width="121" height="26"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="1" id="whe-EA-gTK">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <objectValues>
+ <string>동작 없음</string>
+ <string>언어 전환</string>
+ <string>한자 입력</string>
+ <string>영어로 전환</string>
+ <string>한국어로 전환</string>
+ </objectValues>
+ </comboBoxCell>
+ <connections>
+ <outlet property="dataSource" destination="-2" id="Qka-mk-PJQ"/>
+ </connections>
+ </comboBox>
+ <textField verticalHuggingPriority="750" id="oK9-dv-5i6">
+ <rect key="frame" x="18" y="-283" width="167" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="오른쪽 ⌥(option) 키 동작:" id="pJE-0T-AK0">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <comboBox verticalHuggingPriority="750" id="Iyi-C8-FRX">
+ <rect key="frame" x="191" y="-287" width="121" height="26"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="2" id="xYm-eT-yDY">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <objectValues>
+ <string>동작 없음</string>
+ <string>언어 전환</string>
+ <string>한자 입력</string>
+ <string>영어로 전환</string>
+ <string>한국어로 전환</string>
+ </objectValues>
+ </comboBoxCell>
+ <connections>
+ <outlet property="dataSource" destination="-2" id="R5Y-k1-kgI"/>
+ </connections>
+ </comboBox>
+ <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="TqJ-NL-1r6">
+ <rect key="frame" x="18" y="20" width="293" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="※ 스페이스로 초기화합니다" id="aKg-pX-tCS">
+ <font key="font" size="13" name="AppleSDGothicNeo-Bold"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <textField verticalHuggingPriority="750" id="83">
+ <rect key="frame" x="18" y="138" width="126" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="언어 바꾸기 단축키:" id="92">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
<textField verticalHuggingPriority="750" id="100" customClass="SRRecorderControl">
- <rect key="frame" x="183" y="180" width="127" height="22"/>
+ <rect key="frame" x="148" y="137" width="127" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="101" customClass="SRRecorderCell">
<font key="font" metaFont="system"/>
@@ -125,17 +297,146 @@
</userDefinedRuntimeAttributes>
</textFieldCell>
</textField>
- <textField verticalHuggingPriority="750" id="83">
- <rect key="frame" x="17" y="181" width="126" height="20"/>
+ <button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="135">
+ <rect key="frame" x="277" y="126" width="39" height="38"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="언어 바꾸기 단축키:" id="92">
+ <buttonCell key="cell" type="round" title="?" bezelStyle="circular" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" id="136">
+ <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+ <font key="font" metaFont="systemBold" size="14"/>
+ </buttonCell>
+ <connections>
+ <action selector="helpChangeShortcut:" target="-2" id="139"/>
+ </connections>
+ </button>
+ <textField verticalHuggingPriority="750" id="123">
+ <rect key="frame" x="18" y="109" width="126" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="한자 단축키:" id="124">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
+ <textField verticalHuggingPriority="750" id="122" customClass="SRRecorderControl">
+ <rect key="frame" x="148" y="108" width="127" height="22"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="125" customClass="SRRecorderCell">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="allowedFlags">
+ <real key="value" value="10354688"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="requiredFlags">
+ <integer key="value" value="0"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="style">
+ <real key="value" value="1"/>
+ </userDefinedRuntimeAttribute>
+ </userDefinedRuntimeAttributes>
+ </textFieldCell>
+ </textField>
+ <button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="137">
+ <rect key="frame" x="277" y="98" width="39" height="38"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <buttonCell key="cell" type="round" title="?" bezelStyle="circular" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" id="138">
+ <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+ <font key="font" metaFont="systemBold" size="14"/>
+ </buttonCell>
+ <connections>
+ <action selector="helpChangeShortcut:" target="-2" id="140"/>
+ </connections>
+ </button>
+ <textField verticalHuggingPriority="750" id="Hig-0a-HWz">
+ <rect key="frame" x="18" y="79" width="126" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="영어로 바꾸기 단축키:" id="itF-ET-BnJ">
+ <font key="font" size="13" name="AppleSDGothicNeo-Regular"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <textField verticalHuggingPriority="750" id="yQa-4t-Qf6" customClass="SRRecorderControl">
+ <rect key="frame" x="148" y="78" width="127" height="22"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="fZ6-A9-nXK" customClass="SRRecorderCell">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="allowedFlags">
+ <real key="value" value="10354688"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="requiredFlags">
+ <integer key="value" value="0"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="style">
+ <real key="value" value="1"/>
+ </userDefinedRuntimeAttribute>
+ </userDefinedRuntimeAttributes>
+ </textFieldCell>
+ </textField>
+ <button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="5Bm-Vh-ewK">
+ <rect key="frame" x="277" y="67" width="39" height="38"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <buttonCell key="cell" type="round" title="?" bezelStyle="circular" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" id="W2o-6g-ItJ">
+ <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+ <font key="font" metaFont="systemBold" size="14"/>
+ </buttonCell>
+ <connections>
+ <action selector="helpChangeShortcut:" target="-2" id="vmu-LY-5sU"/>
+ </connections>
+ </button>
+ <textField verticalHuggingPriority="750" id="0eR-5n-YeB">
+ <rect key="frame" x="18" y="49" width="129" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="한국어로 바꾸기 단축키:" id="iDs-o0-uih">
+ <font key="font" size="13" name="AppleSDGothicNeo-Regular"/>
+ <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ <textField verticalHuggingPriority="750" id="GQf-yP-GgT" customClass="SRRecorderControl">
+ <rect key="frame" x="148" y="48" width="127" height="22"/>
+ <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="fB7-qv-YdC" customClass="SRRecorderCell">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="allowedFlags">
+ <real key="value" value="10354688"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="requiredFlags">
+ <integer key="value" value="0"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="number" keyPath="style">
+ <real key="value" value="1"/>
+ </userDefinedRuntimeAttribute>
+ </userDefinedRuntimeAttributes>
+ </textFieldCell>
+ </textField>
+ <button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="mPg-nI-u8w">
+ <rect key="frame" x="277" y="39" width="39" height="38"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <buttonCell key="cell" type="round" title="?" bezelStyle="circular" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" id="BxU-jU-CgS">
+ <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+ <font key="font" metaFont="systemBold" size="14"/>
+ </buttonCell>
+ <connections>
+ <action selector="helpChangeShortcut:" target="-2" id="vva-7k-uQe"/>
+ </connections>
+ </button>
+ </subviews>
+ </customView>
+ <customObject id="-3" userLabel="Application"/>
+ <customView id="82">
+ <rect key="frame" x="0.0" y="0.0" width="369" height="193"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <subviews>
<textField verticalHuggingPriority="750" id="86">
- <rect key="frame" x="28" y="64" width="149" height="20"/>
+ <rect key="frame" x="35" y="64" width="149" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="기본 한글 자판:" id="89">
<font key="font" metaFont="system"/>
@@ -144,17 +445,17 @@
</textFieldCell>
</textField>
<button id="85">
- <rect key="frame" x="17" y="90" width="328" height="20"/>
+ <rect key="frame" x="24" y="90" width="328" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="자판을 선택하면 기본 자판으로 자동으로 지정하기" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="90">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<comboBox verticalHuggingPriority="750" id="87">
- <rect key="frame" x="182" y="60" width="163" height="26"/>
+ <rect key="frame" x="189" y="60" width="163" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" usesDataSource="YES" numberOfVisibleItems="5" id="88">
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" usesDataSource="YES" numberOfVisibleItems="5" id="88">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -164,41 +465,30 @@
</connections>
</comboBox>
<button id="128">
- <rect key="frame" x="17" y="39" width="327" height="19"/>
+ <rect key="frame" x="24" y="39" width="327" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="esc 키로 로마자 자판으로 전환 (vi 모드)" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="129">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button id="ofO-Xf-tQi">
- <rect key="frame" x="17" y="18" width="327" height="19"/>
+ <rect key="frame" x="24" y="18" width="327" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="자판 전환 시 스페이스 입력 방지 (IntelliJ 등)" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="pBf-dh-gwk">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<box autoresizesSubviews="NO" verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="130">
- <rect key="frame" x="13" y="142" width="331" height="5"/>
+ <rect key="frame" x="20" y="142" width="331" height="5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<font key="titleFont" metaFont="system"/>
</box>
- <button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="135">
- <rect key="frame" x="312" y="169" width="39" height="38"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <buttonCell key="cell" type="round" title="?" bezelStyle="circular" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" id="136">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="systemBold" size="14"/>
- </buttonCell>
- <connections>
- <action selector="helpChangeShortcut:" target="-2" id="139"/>
- </connections>
- </button>
<textField verticalHuggingPriority="750" id="148">
- <rect key="frame" x="17" y="153" width="149" height="20"/>
+ <rect key="frame" x="24" y="153" width="149" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="⌥(option) 키 동작:" id="151">
<font key="font" metaFont="system"/>
@@ -207,9 +497,9 @@
</textFieldCell>
</textField>
<comboBox verticalHuggingPriority="750" id="149">
- <rect key="frame" x="183" y="149" width="163" height="26"/>
+ <rect key="frame" x="190" y="149" width="163" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
- <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="2" id="150">
+ <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="2" id="150">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -223,7 +513,7 @@
</connections>
</comboBox>
<textField verticalHuggingPriority="750" id="Ifn-ec-Gzf">
- <rect key="frame" x="17" y="116" width="105" height="20"/>
+ <rect key="frame" x="24" y="116" width="105" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="고급 설정" id="JuL-3P-Okt">
<font key="font" metaFont="systemBold"/>
@@ -234,11 +524,11 @@
</subviews>
</customView>
<customView id="93">
- <rect key="frame" x="0.0" y="0.0" width="307" height="225"/>
+ <rect key="frame" x="0.0" y="0.0" width="308" height="197"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" id="109">
- <rect key="frame" x="17" y="92" width="105" height="20"/>
+ <rect key="frame" x="18" y="92" width="105" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="미완성 문자 조합:" id="112">
<font key="font" metaFont="system"/>
@@ -247,7 +537,7 @@
</textFieldCell>
</textField>
<comboBox verticalHuggingPriority="750" id="110">
- <rect key="frame" x="128" y="88" width="162" height="26"/>
+ <rect key="frame" x="129" y="88" width="162" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="111">
<font key="font" metaFont="system"/>
@@ -266,7 +556,7 @@
</connections>
</comboBox>
<textField verticalHuggingPriority="750" id="114">
- <rect key="frame" x="17" y="64" width="105" height="20"/>
+ <rect key="frame" x="18" y="64" width="105" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="미완성 문자 완료:" id="117">
<font key="font" metaFont="system"/>
@@ -275,7 +565,7 @@
</textFieldCell>
</textField>
<comboBox verticalHuggingPriority="750" id="115">
- <rect key="frame" x="127" y="60" width="163" height="26"/>
+ <rect key="frame" x="128" y="60" width="163" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="116">
<font key="font" metaFont="system"/>
@@ -293,73 +583,33 @@
<outlet property="dataSource" destination="-2" id="118"/>
</connections>
</comboBox>
- <textField verticalHuggingPriority="750" id="122" customClass="SRRecorderControl">
- <rect key="frame" x="127" y="183" width="126" height="22"/>
- <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="" drawsBackground="YES" id="125" customClass="SRRecorderCell">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="number" keyPath="allowedFlags">
- <real key="value" value="10354688"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="requiredFlags">
- <integer key="value" value="0"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="style">
- <real key="value" value="1"/>
- </userDefinedRuntimeAttribute>
- </userDefinedRuntimeAttributes>
- </textFieldCell>
- </textField>
- <textField verticalHuggingPriority="750" id="123">
- <rect key="frame" x="17" y="185" width="105" height="20"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="한자 단축키:" id="124">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key=