Wie sende ich C- / (also einen Strich) an das Terminal?

13

Ich versuche, Emacs in einem Terminal auszuführen. Ich habe in den Terminal-Einstellungen die Option "Option als Meta verwenden" aktiviert und es funktioniert zu 95% richtig.

Die Tastenfolge ctrl- / (oder in der Emacs-Notation C- /) ist "rückgängig". Diese Tastenfolge bewirkt nur, dass das Terminal eine Glocke klingelt. Wie behebe ich das?

Kevin Peterson
quelle
FWIW, das funktioniert in iTerm2 - iterm2.com - aber ich denke, ich werde mich einfach umbilden, um ^ _ überall zu verwenden, um portabler zu sein.
Steven R. Loomis
@ StevenR.Loomist tragbar? Weder Control- / noch Control-_ arbeiten unter Android ...
Michael
@Michael Ich sagte portabel, weil es in ASCII darstellbar ist (siehe akzeptierte Antwort) und somit Netzwerkverbindungen problemlos übertragen kann. Außerdem scheint es auf den meisten physischen Tastaturen verwendbar zu sein, die ich gesehen habe. Ich habe nicht versucht, eine Tastatur mit dem Android-Gerät zu koppeln. Beziehen Sie sich auf eine weiche oder harte Tastatur?
Steven R. Loomis
@ StevenR.Loomis Software ... der Steuerteil scheint ignoriert zu werden, was zu Versuchen führt, das Einfügen eines Schrägstrichs oder Unterstrichs rückgängig zu machen.
Michael

Antworten:

19

Steuerung- /ist nicht Teil des Satzes von Standardsteuercodes . Es ist in vielen Terminalemulationen nicht direkt als Tastendruck darstellbar. Ein solcher Tastendruck ist nur in bestimmten plattformspezifischen „Scancode-Modi“ oder „GUI-Modus“ richtig erkennbar (wobei die API genau angibt, welche Tasten und Modifikatoren verwendet werden). Ihr Terminal-Emulator piept, weil es sich tatsächlich um einen ungültigen Tastendruck handelt.

Die Standard-Steuercodes beziehen sich nur auf „Control“ -Versionen von

  • @ A- Z [\]^_(ASCII 0 - 31) und
  • ? (ASCII 127)

In den meisten Terminal-Emulator-Programmen, die mit den meisten US-Tastaturlayouts ausgeführt werden, müssen Sie möglicherweise drücken Shift, um einige der „Steuercodes“ zu generieren:

  • C- @ ist ControlShift2(seit @ist Shift2)
  • C- ^ ist ControlShift6(seit ^ist Shift6)
  • C-_ ist ControlShift-(seit _ist Shift-)
  • C-? kann nicht immer sein ControlShift/(da ?ist Shift/); C-? wird normalerweise entweder von Backspace(bei Apple-Tastaturen der Schlüssel mit der Bezeichnung „Löschen“ ohne das zusätzliche Symbol ⌦) oder (bei Apple-Tastaturen der Schlüssel mit ⌦) Deletegeneriert.

In tty-basierten Emacs können Sie normalerweise C-_ undoanstelle von C- / verwenden.

Chris Johnsen
quelle
1
Danke für die gründliche Antwort. Ich werde versuchen, mit verschiedenen Terminaltypen zu spielen, um zu sehen, ob ich es zum Laufen bringen kann.
Kevin Peterson
1
"Verschiedene Terminaltypen"? Meinen Sie andere Terminal-Emulator-Programme oder beziehen Sie sich auf den Wert $ TERM, der in Terminal über Terminal> Einstellungen> Einstellungen> [Profil]> Erweitert> Terminal deklarieren als festgelegt wird ? (Diese Einstellung setzt lediglich den Wert von $ TERM. Sie ändert nichts an der Funktion der Terminal-Emulation.) Control- / ist eine Funktion von X11 und wird von Cocoa oder Terminal nicht unterstützt.
Chris Seite
5

Ctrl- / sendet 0x1f, was seit den Tagen von VT102 Ctrl-_ entspricht. Es gibt viele VT100-Emulatoren, aber es handelt sich tatsächlich um VT102-Emulatoren. iTerm2 funktioniert, weil es diesem Verhalten folgt.

Nur Emulatoren, die genau der VT100-Spezifikation entsprechen, können keine Strg- / Befehle senden. Ich glaube, die Terminal-App ist eine davon.

VT100 maskiert 2 höchstwertige Bits von 7-Bit-ASCII, wenn die Steuertaste gedrückt wird. / ist 0x2f, o ist 0x6f. Wenn die 2 Bits maskiert sind, sind sie beide 0x0f. VT100 kann Ctrl-o aber nicht Ctrl- / senden.

Kenji Noguchi
quelle
Dies sollte die akzeptierte Antwort sein.
Ocodo