Ist es möglich, die Rautetaste (#, Nummer) in einer Tastenkombination in Sublime Text 3 zu verwenden?

Ist es möglich, die Rautetaste (#, Nummer) in einer Tastenkombination in Sublime Text 3 zu verwenden?

Auf britischen Tastaturen hat das Rautesymbol (#, anderswo auch als Pfundzeichen bezeichnet) eine eigene Taste (mit einer Tilde darüber).

Vermutlich weil es sich nicht um eine Standardtaste auf US-Tastaturen handelt, ist sie nicht aufgeführt in derListe der benannten Schlüssel in der Dokumentationzur Verwendung in benutzerdefinierten Tastenanschlägen.

Gibt es eine Möglichkeit, beim Erstellen benutzerdefinierter Tastaturbelegungen darauf zu verweisen?

Antwort1

Die kurze Antwort auf Ihre Frage ist, dass dies möglich ist, die von Ihnen benötigte Bindung jedoch möglicherweise nicht Ihren Erwartungen entspricht. Dies liegt an Ihrem Tastaturlayout und/oder an einem kleinen logischen „Schluckauf“, den Sie bei der Art und Weise, wie Sublime die Tasten zuordnet, nicht erwarten.

Den Grund dafür zu erklären und wie Sie bestimmen, wie Ihre Bindung für diesen (oder einen anderen) Schlüssel aussehen muss, ist allerdings etwas komplizierter.

Generell verwendet Sublime Scancodes, um zu bestimmen, welche Taste Sie drücken. Scancodes basieren auf der Position der Taste auf der Tastatur und nicht auf den Zeichen, die sie tatsächlich erzeugen.

Dies hat zur Folge, dass Sublime die von Ihnen gedrückten Tasten so erkennt, als würden sie sich auf einer US-Tastatur befinden, auch wenn dies nicht der Fall ist. Die Tastenliste in der von Ihnen in Ihrer Frage genannten Liste geht von einem standardmäßigen US-Tastaturlayout aus.

Um Probleme mit der Tastenbelegung zu diagnostizieren oder zu sehen, wie Sublime Ihre Eingaben liest, können Sie die Eingabeprotokollierung aktivieren, indem Sie die Sublime-Konsole über View > Show Consoledas Menü öffnen und den folgenden Befehl eingeben:

sublime.log_input(True)

Wenn die Eingabeprotokollierung aktiviert ist, meldet Sublime in der Konsole eine Meldung zu jedem Eingabeereignis, das es erkennt. Die Eingabeprotokollierung bleibt aktiv, bis Sie denselben Befehl mit FalseSublime ausführen oder es neu starten.

Im Allgemeinen werden Sie eines der folgenden Elemente sehen:

  • chr evt: #, was Ihnen mitteilt, dass Sie eineCharakter
  • key evt: backspace, was Ihnen mitteilt, dass Sie eineSchlüssel
  • key evtgefolgt von chr evt, was bedeutet, dass die von Ihnen gedrückte Taste so etwas wie eintoter Schlüsseldabei wird versucht, einem Zeichen ein diakritisches Zeichen hinzuzufügen.
  • gar nichts, wenn die Taste wirklich tot ist oder etwas außerhalb von Sublime (z. B. das Betriebssystem) das Tastaturereignis aufgefressen hat, bevor Sublime es sehen konnte

Um eine Taste an etwas zu binden, das ein Ereignis meldet chr, sollte Ihre Zuordnung nur das folgende Zeichen enthalten:

{ "keys": ["#"], "command": "echo"},

Um eine Taste zu binden, die als keyEreignis gemeldet wird, verwenden Sie die Taste so, wie sie im Ereignis gemeldet wird, einschließlich aller Modifikatoren ( controlfunktioniert genauso gut wie ctrl):

{ "keys": ["backspace"], "command": "echo"},

Dennoch entspricht das, was die Eingabeprotokollierung meldet, möglicherweise nicht immer Ihren anfänglichen Erwartungen. Dies ist einer der Punkte, die in den Kommentaren zu Ihrer ursprünglichen Frage erwähnt wurden.

Tastenkombinationen, die Zeichen erzeugen, werden als chrEreignisse gemeldet, d. h. sie berücksichtigen den Umschaltzustand. Tasten, die kein Zeichen erzeugen, werden als keyEreignisse gemeldet und umfassen den Modifikator und diegedrückte Taste.

Dieser Teil wird hervorgehoben, weil er möglicherweise nicht Ihren ersten Erwartungen entspricht.

Beispielsweise können Sie auf einem US-Tastaturlayout eine Taste gemeinsam nutzen #und dabei die verschobene Version dieser Taste verwenden.3#

Daher:

  • 3:chr evt: 3 (0x33)
  • shift+3:chr evt: # (0x23)

Dies ist logisch: Wenn Sie 3nur die Taste drücken, erhalten Sie ein wörtliches 3, während Sie mit der Umschalttaste ein Rautezeichen erhalten.

Beachten Sie jedoch Folgendes:

  • Ctrl+3:key evt: control+3
  • Ctrl+#:key evt: control+3
  • Ctrl+Shift+3:shift+control+3

Das heißt: Um das #Zeichen zu erhalten, muss ich die Umschalttaste drücken, aber das gemeldete Tastenereignis bezieht sich auf die 3Taste, weil das tatsächlich die Taste ist, die ich drücke.

verwandte Informationen