Ist es möglich, den Hash-Schlüssel (#, Pfund) in einer Schlüsselbindung in Sublime Text 3 zu verwenden?

612
Dan

Auf britischen Tastaturen hat das Hash-Symbol (#, auch Pfund anderswo genannt) eine eigene Taste (mit einer Tilde darüber).

Vermutlich weil es sich bei US-Tastaturen nicht um eine Standardtaste handelt, wird sie nicht in der Liste der benannten Tasten in der Dokumentation für die Verwendung in benutzerdefinierten Tastenanschlägen aufgeführt.

Gibt es eine Möglichkeit, darauf zu verweisen, wenn Sie benutzerdefinierte Schlüsselbindungen erstellen?

1
Ein bisschen spät, aber wenn Sie in der Sublime-Konsole `sublime.log_input (True)` eingeben und dann die Taste drücken, erfahren Sie, wie Sublime dies sieht. Sie können diesen Schlüssel dann in Ihrer Bindung verwenden. OdatNurd vor 6 Jahren 2
@OdatNurd Danke, das ist nützlich zu wissen. Die Konsole gibt mir `chr evt: # (0x23)`. Es stellt sich heraus, dass ich entweder `#` oder `~` an Befehle binden kann, aber keine sinnvollen Kombinationen wie `ctrl + #` oder `alt + #`. Ich vermute nicht, dass es eine Möglichkeit gibt, den `0x23`-Code zu verwenden? Ich habe in der Standard-Keymap nichts auf diese Weise referenziert. Dan vor 6 Jahren 0
Sie können nur das Zeichen / den Namen verwenden, nicht den Hex-Code. Was sehen Sie als Ausgabe im Protokoll, wenn Sie die Tastenkombination Strg + # und Alt + # drücken? Möglicherweise stellt die Taste bei einem anderen Tastaturlayout etwas anderes dar, wenn sie mit Modifikatoren verwendet wird. OdatNurd vor 6 Jahren 1
@OdatNurd Gute Idee, ungerade Ergebnisse. Kombinationen von "#" erscheinen, als wären sie stattdessen mit "" (Apostroph) kombiniert, z. B. "key evt: shift + control +" `, mit Ausnahme von" ctrl + # ", das sich als" key evt: control + "` und dann registriert chr evt: (0x1c) `. Alle Kombinationen mit dem eigentlichen Apostroph-Schlüssel erscheinen so, als wären sie mit einem Backtick kombiniert worden. Dan vor 6 Jahren 0

1 Antwort auf die Frage

2
OdatNurd

Die kurze Antwort auf Ihre Frage ist, dass dies möglich ist, aber die Bindung, die Sie benötigen, könnte aufgrund Ihres Tastaturlayouts und / oder eines logischen "Schluckaufs", den Sie nicht erwarten, möglicherweise nicht das sein, was Sie erwarten dass Sublime Schlüssel abbildet.

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 etwas komplizierter.

Im Allgemeinen 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 tatsächlich erstellten Zeichen.

Das Ergebnis davon ist, dass Sublime Tasten sieht, die Sie drücken, als ob sie auf einer US-Tastatur wären, auch wenn sie es nicht sind. Die Liste der Tasten in der Liste, die Sie in Ihrer Frage erwähnen, setzt ein Standardlayout der US-Tastatur voraus.

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

sublime.log_input(True) 

Während die Eingabeprotokollierung aktiviert ist, meldet Sublime in der Konsole eine Meldung zu jedem eingegebenen Ereignis. Die Eingabeprotokollierung bleibt in Kraft, bis Sie denselben Befehl mit FalseSublime ausführen oder neu starten.

Im Allgemeinen sehen Sie eine der folgenden Optionen:

  • chr evt: #, das sagt Ihnen, dass Sie einen Charakter gedrückt haben
  • key evt: backspace, was Ihnen mitteilt, dass Sie eine Taste gedrückt haben
  • key evtgefolgt von chr evt, was bedeutet, dass die Taste, die Sie gedrückt haben, einer toten Taste ähnelt, die versucht, einem Buchstaben einen Diakriten hinzuzufügen.
  • Nichts, wenn der Schlüssel wirklich tot ist oder etwas außerhalb von Sublime (z. B. das Betriebssystem) das Tastaturereignis verzehrt hat, bevor Sublime die Gelegenheit hatte, es zu sehen

Um einen Schlüssel an etwas zu binden, das ein chrEreignis meldet, sollte Ihr Mapping nur den Charakter enthalten:

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

Um einen Schlüssel zu binden, der als keyEreignis gemeldet wird, würden Sie den Schlüssel so verwenden, wie er im Ereignis gemeldet wird, einschließlich aller Modifizierer ( controlfunktioniert ebenso wie ctrl):

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

Bei allem, was gesagt wird, sind die Berichte zur Eingabeprotokollierung möglicherweise nicht immer das, was Sie ursprünglich erwarten würden. Dies ist einer der Punkte, die in den Kommentaren zu Ihrer ursprünglichen Frage erwähnt werden.

Tastenkombinationen, die Zeichen generieren, werden als chrEreignisse gemeldet, d. H. Sie berücksichtigen den Schichtzustand. Tasten, die keinen Charakter generieren, werden als keyEreignisse gemeldet und enthalten den Modifikator und die gedrückte Taste .

Dieses Bit wird betont, weil es vielleicht nicht das ist, was Sie anfangs erwarten.

Zum Beispiel auf einem US-Tastaturlayout #und 3teilen Sie sich eine Taste mit #der verschobenen Version der Taste.

Somit:

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

Das macht logisch Sinn. Wenn Sie nur die 3Taste drücken, erhalten Sie ein Literal 3, während Sie mit shift einen Hash-Charakter erhalten.

Beachten Sie jedoch Folgendes:

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

Das ist; Um den #Charakter zu erhalten, muss ich die Umschalttaste drücken, aber das gemeldete Schlüsselereignis bezieht sich auf die 3Taste, da dies wirklich die Taste ist, die ich drücke.