簡體   English   中英

Pharo:自定義智能角色

[英]Pharo: customizing smart characters

設置瀏覽器的“代碼完成”部分中的“智能字符”復選框(至少)有兩件事:

1)鍵入時,它會加倍一些字符:',“,(,[,{

2)它可以選擇一段代碼,按( (即Shift+9 ),所選代碼被括號括起來:( () 。我也可以通過按(再次。 ()來刪除括號。我也可以這樣做[][{}{ ,即Shift+[

我不喜歡這些東西中的第一個,所以我想禁用它,但我喜歡第二件事,並希望保留它。 我怎樣才能做到這一點? 關閉復選框將禁用這兩個選項。

PS我知道當復選框關閉時,添加/刪除括號的工作方式是Cmd+Shift+9 (不如Shift+9方便)和Cmd+[適用於[] ,雖然我不知道任何工作快捷方式可以添加/當復選框關閉時刪除{}

該設置稱為“智能字符”,它可以為您提供查看位置的線索。 打開Finder,輸入smartCharacters ,然后按Enter鍵 您應該看到一些部分匹配以及NECControllerNECPreferences class的完全匹配(前者只調用后者)。 如果你稍微研究一下這些類,你會看到smartCharacters存儲一個布爾值,而smartCharactersMapping返回一個字典,將一些字符映射到它們的“對應物”,即$[ to $]等等。 現在看看smartCharactersMapping發件人,你會看到它的調用位置。

您最有可能感興趣的調用者是NECController>>smartCharacterWithEvent 因此,在這個非常丑陋的方法中設置一個斷點來查看它的作用。 您不關心前兩種情況(編輯器有選擇而沒有智能映射),因為您希望防止插入第二個匹配字符。 所以有趣的是這一點:

self newSmartCharacterInsertionStringForLeft: char right: opposite

該方法只有一個實現者和一個發送者,因此注釋掉原始方法並返回“左”字符應該是安全的,即:

newSmartCharacterInsertionStringForLeft: left right: right
    ^String with: left

換句話說,不是創建一個包含左右字符的字符串,也可能是它們之間的空格,只需返回一個包含您鍵入的單個字符的新字符串。 可能不是解決這個問題的最優雅的方法,但它應該有效,並且應該向您展示如何在將來解決類似的問題。

(理想情況下,你會找到一個更好的解決方案,在這里作為替代答案發布,並將其貢獻給Pharo代碼庫 - 畢竟,Pharo是開源的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM