2016-05-05 9 views
4

Das Kontrollkästchen "Smart-Zeichen" in "Code Completion" Abschnitt Customizing-Einstellungen Browser ist (mindestens) zwei Dinge:Pharo: smart Zeichen

1) Es einige Zeichen verdoppelt, wenn getippt:‘,“, (, [{

2) Es ermöglicht, dass ich ein Stück Code auswählen kann, drücken ( (dh Shift+9), und der gewählte Code von Klammern umgeben wird. () ich kann auch Klammern entfernen, indem ( erneutes drücken ich auch. kann dies mit [] durch Drücken von [ und mit {} durch Drücken von {, dhtun.

Ich mag nicht das erste dieser Dinge, also möchte ich es deaktivieren, aber ich mag die zweite Sache und will es behalten. Wie kann ich das erreichen? Wenn Sie das Kontrollkästchen deaktivieren, werden beide deaktiviert.

P.S. Ich weiß, dass das Hinzufügen/Entfernen von Klammern durch Cmd+Shift+9 funktioniert (das ist weniger bequem als Shift+9) und Cmd+[ funktioniert für [], obwohl ich keine funktionierende Verknüpfung zum Hinzufügen/Entfernen {}, wenn das Kontrollkästchen deaktiviert ist.

Antwort

3

Die Einstellung heißt "Smart Characters", die Ihnen einen Anhaltspunkt geben soll, wo Sie suchen müssen. Öffnen Sie einen Finder, geben Sie smartCharacters ein und drücken Sie Geben Sie ein. Sie sollten einige Teilübereinstimmungen sowie eine genaue Übereinstimmung für NECController und NECPreferences class sehen (und ersteres nennt letzteres). Wenn Sie die beteiligten Klassen ein wenig untersuchen, werden Sie sehen, dass smartCharacters einen booleschen Wert speichert und dass smartCharactersMapping ein Wörterbuch zurückgibt, das einige Zeichen ihren "Gegenstücken" zuordnet, d. H. bis $] und so weiter. Sieh dir nun die Absender von smartCharactersMapping an und du wirst sehen, von wo aus es aufgerufen wird.

Der Anrufer, an dem Sie am wahrscheinlichsten interessiert sind, wäre NECController>>smartCharacterWithEvent. Setze also einen Haltepunkt in diese sehr hässliche Methode, um zu sehen, was sie tut. Die ersten beiden Fälle sind Ihnen egal (der Editor hat eine Auswahl und es gibt keine intelligente Zuordnung), da Sie verhindern wollen, dass das zweite übereinstimmende Zeichen eingefügt wird. So ist der interessante Teil für Sie ist dieses Bit:

self newSmartCharacterInsertionStringForLeft: char right: opposite 

Das Verfahren hat nur ein Implementierer und dass ein Sender, so sollte es sicher sein, die ursprüngliche Methode zu kommentieren und nur die „linke“ Charakter zurückzukehren, das heißt:

newSmartCharacterInsertionStringForLeft: left right: right 
    ^String with: left 

mit anderen Worten, anstatt einen String mit dem linken und rechten Zeichen der Schaffung und möglicherweise Räume zwischen ihnen, kehren nur eine neue Zeichenfolge mit dem einzelnen Zeichen, das Sie eingegeben haben. Vielleicht nicht die eleganteste Art, das zu lösen, aber es sollte funktionieren und Ihnen zeigen, wie Sie ähnliche Probleme in Zukunft lösen können.

(Idealerweise haben Sie eine bessere Lösung zu finden, poste es hier als eine alternative Antwort und tragen es in die Pharo Code-Basis -. Pharo ist Open Source, nachdem alle)

+0

Dank. Die von Ihnen vorgeschlagene Substitution 'newSmartCharacterInsertionStringForLeft: left right: right ^ String mit: left' macht den Namen der Methode irreführend, also habe ich den Aufruf dieser Methode (' self newSmartCharacterInsertionStringForLeft: char rechts: entgegengesetzt) ​​auskommentiert '), ersetzen Sie es nur mit' String mit: char'.

+0

Aber das war immer noch zu tief (eine ganze Menge Code, der zu diesem Punkt führte, wurde nutzlos, aber wurde immer noch ausgeführt), also kletterte ich auf und kommentierte den ganzen zweiten Teil von 'smartCharacterWithEvent:' Methode, beginnend bei 'entgegengesetzt: = ', bis zum Ende, und ersetzt durch'^nil'. –

+0

Warum in aller Welt kann ich meinen Kommentar nicht nach 5 Minuten bearbeiten? :( und 600 Zeichen pro Kommentar Einschränkung scheint zu restriktiv ... Und wie kann ich einen Zeilenumbruch hier einfügen? –