wie zu deaktivieren, Nachschlagen (Wörterbuch, Thesaurus, Wikipedia) - Funktionalität in ein NSTextView?
Eines meiner Projekte ist ein Test app, wo ein student sollte nicht in der Lage, leicht Wörter nachschlagen, während Sie Tippen.
Ist es relativ leicht zu deaktivieren Sie die automatische Rechtschreibprüfung in ein NSTextView über setContinuousSpellCheckingEnabled:
und setAutomaticSpellingCorrectionEnabled:
.
Ich habe gerade entdeckt, dass es sehr trivial, für Studenten, Tippen Sie einfach mit drei Fingern auf jedes ausgewählte Wort in jeder app und schon erscheint ein hilfreich-Fenster mit einem Wörterbuch, thesaurus und sogar einen Wikipedia-Eintrag, wenn das Wort dort gefunden werden können.
Dies ist die große Funktionalität für 99% der MacOS-apps, aber nicht für meine Test-app.
Nun nach ein paar Monaten, Apple hat mir auch eine (undokumentierte und feine) Lösung, die funktioniert für 10.8 nur und ich kann schließlich geben Sie es in den Antworten unten, aber ich müssen eine Lösung, die funktioniert für 10.7 (die ist, wo diese Funktionalität kam).
Gibt es drei mögliche Pläne von Angriff auf dieses problem, aber ich bin mir nicht sicher, wie an diesen drei:
1)
Brauche ich, um zu blockieren, dass diese Lookup-Funktionalität geschieht in diesem text-Ansicht.
2)
Hab ich schon versucht zu löschen die Wörterbuch-Einstellungen (wenn Sie vorhanden ist; wenn der Benutzer noch nie geöffnet Wörterbuch.app, es gibt keine Präferenzen) und der dictionary-cache-Dateien (in "~/Library/Cache
", aber das scheint nicht zur Verbesserung der situation.
3)
Oder gibt es eine Möglichkeit zu erkennen, dass die Trackpad-Einstellung, die sagt: "Verwenden Sie "suchen", wenn dabei ein drei-Finger-Tippen"? Es ist wahrscheinlich in einigen Kom.apple -.*.plist irgendwo oder nachweisbar über "defaults
" aber ich bin nicht sicher, wo.
EDIT:
Nur ein bisschen Zeit übrig, um hoffentlich dieses problem lösen und award ein Kopfgeld. Hier ist der Ansatz, dass ich den Versuch mit "defaults
":
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerTapGesture -bool false
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDoubleTapGesture -bool false
Aber ich bin mir nicht 100% sicher, dass diese die richtigen gesten/keywords zu geben. Und auch nach Sie Sie selbst eingeben (und überprüfen, Sie wurden korrekt gespeichert über "defaults read com.apple.driver.AppleBluetoothMultitouch.trackpad
"), das Wörterbuch LookUp-Fenster weiterhin angezeigt wird.
Nun, hier ist der einzige, was funktioniert, aber es funktioniert nur unter MacOS 10.8 (das ist, wo diese Methoden ausgesetzt waren/brachte). Einfach überschreiben diese beiden Methoden in Ihrer NSTextView: Unterklasse:
- (void)quickLookWithEvent:(NSEvent *)event;
- (void)quickLookPreviewItems:(id)sender;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass die Wörterbuch-Suche, umgesetzt in eine von zwei Arten, als Dienst oder über die
NSTextInputClient
Protokoll. Also, ich würde überschreiben-validRequestorForSendType:returnType:
im text Unterklasse, um zu sehen, wenn es aufgerufen wird, für einen drei-finger-Tippen. Eh, es klingt wie Sie für Ihre app, die Sie zurückgeben möchtenNO
für alle Dienste. Sollten Sie auch überschreibenwriteSelectionToPasteboard:types:
zurückNO
.Wenn das nicht es tun, versuchen Sie die Methoden überschreiben von
NSTextInputClient
um zu sehen, ob Sie aufgerufen wird. Insbesondere die-attributedString
und-attributedSubstringForProposedRange:actualRange:
Methoden, wie die Wörterbuch-Suche, die Beschaffung der text. Machen beide zurücknil
sollte verhindern, dass es funktioniert. Wohlgemerkt, dieNSTextInputClient
Protokoll ist zentral für die Verwendung von Eingabe-Methoden und die drücken-und-halten Sie Zugang zu Zeichen mit Akzenten und diakritischen Zeichen, so dass Sie brechen kann, die. Ich weiß nicht, ob Sie in der Lage sein, zu unterscheiden zwischen den Anforderungen, die aus normalen input-Methode vs. aus dem Wörterbuch-lookup-Geste.Wenn alle Stricke reißen, können Sie implementieren Sie einen benutzerdefinierten text anzeigen anstatt
NSTextView
. Es ist nicht trivial, aber Sie haben volle Kontrolle über sein Verhalten.validRequestorForSendType:returnType:
" hat keine Treffer Haltepunkte oder NSLogs, wenn dabei ein drei-Finger-Tippen. Aber der folgende Absatz -- überschreiben "attributeSubstringForProposedRange:
" & "attributedString
" beide Treffer bei einem TFT-Lookup. Wenn der erste Aufruf fehlschlägt, dann "attributedString
" ist die fallback-Methode, die aufgerufen wird. Die Rückgabe von NULL für beide Ergebnisse in einem "NSInternalInconsistencyException
" geworfen "LUTSMDocumentTextAccessor
", aber die app läuft ohne Absturz oder nachfolgenden schlechtes Verhalten. Dieser ist auf der Suche sehr vielversprechend, Ken. Ich Frage mich, was der Nachteil ist?attributedString
" Methoden aufgerufen wird, für nichts, abgesehen von drei Fingern Tippen Sie auf "lookup". Ich hoffe, dass ich nicht versehentlich deaktivieren Sie etwas in der app, indem Sie NULL zurückgeben von diesen beiden Methoden.NSTextInputClient
Methoden, um zu sehen, ob Sie überzeugen können, dem Wörterbuch-lookup IM an nicht auch erwarten können, erhalten Sie eine Zeichenfolge. Ein weiterer Gedanke, den Sie überschreiben können-[NSView inputContext]
zurücknil
zu deaktivieren, IMs völlig. Wie für Nachteile, haben Sie versucht, Asian IMs? Haben Sie versucht, drücken und halten Eingabe von Zeichen mit Akzent? IMs wie diese sind, was ich erwarten würde brechen könnte.NSResponder
Geste Methoden?@""
stattnil
von denenNSTextInputClient
Methoden.NSMakeRange(0,1)
", weil die Rückgabe einer leeren Zeichenfolge bewirkt, dass andere (private oder undokumentierte?) Methoden aufgerufen werden, für die Suche, um herauszufinden, welches Wort ausgewählt ist. Zurück von einem Charakter, noch wirft Sie eine "Lookup: Unhandled exception 'NSRangeException' caught in -[LULookupDefinitionModule showDefinitionByHotKey]]
" - Zeile in der Xcode-Konsole, obwohl. Oh, wenn ich nur könnte swizzle "showDefinitionByHotKey
" entfernt.Diese Antwort auf eine ähnliche Frage, die das problem behebt ohne das auslösen von Ausnahmen bei der trade-off, dass es eine private API: https://stackoverflow.com/a/20618984/959140
Einfach überschreiben
-(void)quickLookWithEvent:(NSEvent *)event
in der Unterklasse und gar nichts mit der Veranstaltung.-(void)quickLookWithEvent:(NSEvent *)event
ist eine öffentliche API ab OSX 10.8.Wenn das Wörterbuch-Bildschirm erscheint, gehen Sie zu "Datei" (oder vielleicht war es auch Bearbeiten) /Einstellungen, und deaktivieren Sie alle Optionen, so dass keine eigentliche Wörterbuch-Optionen aktiviert sind, und schließen Sie die app, und es nicht mehr auftaucht - zum größten Teil - einmal in eine Weile, während Sie versuchen, verwenden Sie das mousepad, wählen Sie eine Zeichenfolge von text zum kopieren und/oder zu schneiden, es zeigt sich aber nicht ständig wie vorher...