发布于 2015-12-29 08:43:41 | 312 次阅读 | 评论: 0 | 来源: 分享
Xcode 编程开发软件
Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。其运行于苹果公司的Mac操作系统下。
最近微博上在流传一个Atom编辑器的插件:activate-power-mode,装上这个插件后打字会有震屏和火花效果,非常牛逼,效果如下:
据说有人用了,并且还是机械键盘,差点被同事打断手了。(伯乐在线小编转注:哈哈,这是看到@程序员的那些事 微博的转发语呢。戳这里:《亮瞎程序员双眼的编辑器插件横空出世!》)
于是我花了几天的下班时间,写了个Xcode版的插件,模仿了这个效果:
插件下载地址为:https://github.com/poboke/ActivatePowerMode,也可以在Alcatraz上搜索ActivatePowerMode
进行安装。
这些功能实现起来也不难,主要是获取光标所在位置的代码颜色花了比较多时间。
我一开始以为代码高亮的颜色是由NSAttributedString
控制的,但是我获取到的属性里只有字体字号等属性,没有NSForegroundColorAttributeName
这个字段,所以只能用别的方法寻找。
用逆向思维思考一下,因为代码高亮是由配色方案管理的,切换配色方案时,代码颜色就会改变。而配色方案是根据单词的类型来设置颜色的,所以猜想可能存在某个方法,可以读取或设置某个范围的文字的颜色,这样才方便配色方案功能的实现。
先用关键字color
在Xcode的私有类头文件里搜索,把搜到的方法名输出到一个文本里。然后再用关键字NSRange
搜索,很快就发现了一个可疑的方法:- (id)colorAtCharacterIndex:(unsigned long long)arg1 effectiveRange:(struct _NSRange *)arg2 context:(id)arg3
。然后再hook这个方法,果然返回了相应的颜色。