Xcode 裝逼外掛 ActivatePowerMode

發表於2015-12-22

最近微博上在流傳一個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這個方法,果然返回了相應的顏色。

相關文章