Shift + Up wird von Emacs in einem Terminal nicht erkannt


15

Sehr oft benutze ich Shift+ Up/Down, um eine Region in Emacs auszuwählen. Es funktioniert gut im GUI-Modus, aber wenn emacsmit der -nwOption aufgerufen wird, kann ich Zeilen nur mit Shift+ auswählen Down. Das Shift+ Upfunktioniert nicht, ich bekomme diese Fehlermeldung im Minipuffer:

<select> is undefined

Wie kann ich dieses Problem lösen?

Antworten:


13

Ein Textterminal überträgt nur Zeichen (genauer gesagt Bytes), keine Schlüssel. Schlüssel und Schlüsselbänder (Schlüssel mit Modifikatoren) werden als Zeichenfolgen codiert. Schlüssel, die druckbare Zeichen einfügen, werden als solche gesendet. Funktionstasten werden als Escape-Sequenzen gesendet. Die meisten Escape-Sequenzen bestehen aus dem Zeichen Escape ( ?\ein Emacs-Syntax), gefolgt von zwei oder mehr druckbaren Zeichen. Siehe Steuerungstasten und Auf- / Ab-Tasten im Terminal zur Verwendung durch Emacs und Wie funktionieren Tastatureingaben und Textausgaben? für mehr Informationen.

Emacs hat einen Mechanismus, um Escape-Sequenzen in einen eigenen Schlüsselbegriff zu übersetzen. Die Übersetzungstabelle input-decode-mapwird beim Start von Emacs initialisiert (genauer gesagt, wenn ein neuer Frame geöffnet ist: Diese Variable hat an jedem Terminal einen anderen Wert). Manchmal kennt Emacs nicht alle vom Terminal gesendeten Escape-Sequenzen.

In Ihrem Fall scheint Emacs die falsche Interpretation für die von Shift+ gesendete Escape-Sequenz zu haben Up. Sie müssen es erklären, um es als S-upeher als zu interpretieren select. Stellen Sie zunächst fest, wie die Escape-Sequenz lautet. *scratch*Drücken Sie im Puffer Ctrl+ und Qdann Shift+ Up. Der Befehl C-qbewirkt, dass das nächste Zeichen, nämlich das Escape-Zeichen, wörtlich eingefügt wird, gefolgt von der restlichen Escape-Sequenz. Angenommen, Shift+ Upsendet \e[1;2Aauf unserem System, dann müssten Sie den entsprechenden Eintrag in neu definieren input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

Grundsätzlich input-decode-mapsollte pro Endgerät eingestellt werden. In der Praxis gibt es sehr selten zwei Terminals, in denen dieselbe Escape-Sequenz unterschiedliche Schlüssel codiert, sodass eine globale Einstellung problemlos funktioniert.


Ihre Antwort scheint meine Frage hier zu beantworten - emacs.stackexchange.com/questions/33988 . Are the (define-key ...)Kommandos sollen in init.el gehen? Gibt es ein detailliertes Beispiel, das ich mir ansehen kann?
Vfclists

@vfclists- define-keyBefehle werden in Ihre Init-Datei eingefügt . Das können ~/.emacs.d/init.eloder ein paar andere Orte sein. Sie finden viele Beispiele für die Verwendung von, define-keyindem Sie suchen define-key, aber herauszufinden, welche Karte gebunden werden soll, ist eine andere Sache. Mehrere Karten beteiligt sind: global-map, input-decode-map, function-key-map, keyboard-translate-map. Ich weiß nicht, wie ich Ihre Frage beantworten soll, weil ich Spacemacs nicht kenne. Ich empfehle nicht die Verwendung von Paketen wie Spacemacs, die Standardschnittstellen chaotisch neu definieren.
Gilles 'SO- hör auf böse zu sein'

Ich habe zu normalen Emacs gewechselt, um den Organisationsmodus zu erlernen, und es ist mir gelungen, mit ihnen zu arbeiten, input-decode-mapnachdem ich einige Beispiele gefunden hatte. Kann ich annehmen, dass dies input-decode-mapzutrifft, wenn der Benutzer Text in einen Puffer eingibt?
vfclists

@vfclists input-decode-mapist eine der zutreffenden Keymaps. Einzelheiten finden Sie im Handbuch .
Gilles 'SO- hör auf böse zu sein'

5

In Emacs wird die Region durch den Punkt (Cursor) und die Markierung (eine vorherige Position des Cursors, die "markiert" wurde) begrenzt.

Um eine Region auszuwählen, müssen Sie diese Markierung platzieren und dann Ihren Punkt verschieben.

Am einfachsten platzieren Sie die Marke durch Drücken von C-SPC. Bewegen Sie dann einfach den Mauszeiger, und Sie sehen, wie sich die "Region" erweitert.

Zum "Abwählen der Region" können Sie C-SPCerneut drücken .

Da "Shift + Bewegung" in anderen Programmen eine häufig verwendete Tastenkombination ist, wird standardmäßig dieses Verhalten "Bereich auswählen" emuliert. Im Terminal funktioniert dies jedoch nicht, da die Umschalttaste nicht als Zusatztaste an den Emacs gesendet werden kann.

Beachten Sie, dass die C-SPCMethode im Allgemeinen viel leistungsfähiger ist als andere Methoden zum Auswählen einer Region: Sie sind nicht auf Auf / Ab / Links / Rechts für die Bewegung beschränkt (Sie können beispielsweise die Suche verwenden ...), und dies ist nicht erforderlich dass Sie eine unangenehme Tastenkombination für lange Zeit beibehalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.