使用 Xcode 命令行工具的解决方案
对于那些想要构建 @Ken Thomases' solution 但没有安装 Xcode(这是几个 GiB 并且除非认真使用,否则花费这么多空间完全没用)的人,可以使用 Xcode 命令行工具来构建它。
互联网上有几个关于如何安装 Xcode 命令行工具的教程。这里的要点是,与成熟的 Xcode 相比,它只占用了一小部分空间。
安装后,步骤如下:
- 创建一个名为whatever.m的文件
- 在whatever.m 中输入以下内容:
#include <Carbon/Carbon.h>
int main (int argc, const char * argv[]) {
NSArray* sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)@{ (__bridge NSString*)kTISPropertyInputSourceID : @"com.apple.keylayout.French" }, FALSE));
TISInputSourceRef source = (__bridge TISInputSourceRef)sources[0];
OSStatus status = TISSelectInputSource(source);
if (status != noErr)
return -1;
return 0;
}
- 将
French 替换为您想要的布局。
- 保存文件
- 在whatever.m所在的文件夹中打开终端
- 运行此命令:
clang -framework Carbon whatever.m -o whatever
您的应用程序在同一文件夹中创建为whatever,可以按以下方式执行:
.\whatever
另外
我从未创建过任何 Objective-C 程序,所以这可能不是最理想的,但我想要一个可以将键盘布局作为命令行参数的可执行文件。对于任何有兴趣的人,这是我想出的解决方案:
在第 2 步中使用此代码:
#import <Foundation/Foundation.h>
#include <Carbon/Carbon.h>
int main (int argc, const char * argv[]) {
NSArray *arguments = [[NSProcessInfo processInfo] arguments];
NSArray* sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)@{ (__bridge NSString*)kTISPropertyInputSourceID : [@"com.apple.keylayout." stringByAppendingString:arguments[1]] }, FALSE));
TISInputSourceRef source = (__bridge TISInputSourceRef)sources[0];
OSStatus status = TISSelectInputSource(source);
if (status != noErr)
return -1;
return 0;
}
在第 6 步中,运行以下命令:
clang -framework Carbon -framework Foundation whatever.m -o whatever
您现在可以从命令行切换到任何布局,例如:
./whatever British
注意:它只允许切换到系统上已配置的布局!