Wenn ich die folgende .emacs-Datei verwende, kann ich erwartungsgemäß mit den Home / End-Tasten zum Anfang / Ende der aktuellen Zeile springen.
(keyboard-translate ?\C-h ?\C-?)
(add-to-list 'load-path "/home/sam/programs/go/go/misc/emacs/" t)
(require 'go-mode-load)
(global-set-key [kp-home] 'beginning-of-line) ; [Home]
(global-set-key [home] 'beginning-of-line) ; [Home]
(global-set-key [kp-end] 'end-of-line) ; [End]
(global-set-key [end] 'end-of-line) ; [End]
Wenn ich jedoch eine Bildschirmsitzung öffne, funktioniert dies nicht (die Taste [home] bringt mich aus irgendeinem Grund immer noch an den Anfang des Puffers).
Hier ist meine .screenrc-Datei, wenn irgendjemand irgendetwas Ungewöhnliches darin entdecken kann:
term xterm
defutf8 on
defflow off
startup_message off
# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
#use bash as the default login shell
defshell -bash
BEARBEITEN: Anscheinend besagt die Verwendung von Mx describe-key (wie von nschum vorgeschlagen), dass [begin] ausgelöst wird, wenn ich die Home-Taste auf meiner Tastatur drücke, wenn Emacs auf dem Bildschirm ausgeführt wird. Wenn ich Emacs außerhalb des Bildschirms starte, bezieht sich describe-key wie erwartet auf [home]. Es sieht so aus, als ob "defutf8 on" der einzige tastaturbezogene Eintrag in meinem .screenrc ist - gibt es noch etwas, das Probleme verursachen könnte?
quelle
Antworten:
Wenn Sie ein Programm ausführen
screen
,screen
kann (und wird) das Programm dies tun:screen
hat eine eigene Terminalbeschreibung. Es wird versucht, die Schlüsselsequenzen des zugrunde liegenden Terminals in diese umzuwandeln.screen
suchen Sie nach benutzerdefinierten Terminalbeschreibungen, die mit beginnenscreen.$TERM
. ncurses bietet einige nützliche an.screen
filtert (ignoriert) einige Schlüsselsequenzen, die nicht in die Vorstellung passen, wie Eingaben erfolgen sollen.Höchstwahrscheinlich liegt Ihr Problem im ersten Fall. Wenn Sie tun
(vorausgesetzt , dass Sie die am häufigsten häufig vorgeschlagene Wert verwenden für
TERM
, ob Sie sind mitxterm
), können Sie ein paar Zeilen wie folgt fest:Die letzte Spalte ist die Sequenz (
\E
das Escape- Zeichen), diescreen
an Ihr Programm gesendet wird, wenn es die mittlere Spalte vonxterm
usw. empfängt .Das Problem mit dem
.screenrc
ist , dass es die überschreibt$TERM
Wert zuxterm
, verwirrendscreen
:Sie würden davon ausgehen, dass die Konvertierung abgeschlossen ist, aber das Testen zeigt, dass dies nicht der Fall ist. Diese Art von Problem ist der Grund, warum ncurses benutzerdefinierte Einträge bereitstellt. Zum Beispiel ist der Eintrag von ncurses Datenbank ist derjenige, dass bestimmte Wirkung auf meiner Maschine nimmt
.screenrc
Einstellung (weil „xterm“ ist aliased zu „xterm-neu“):Sie können das bemerken
use=screen+fkeys
. Das heißt im Endeffekt: Fahren Sie fort und verwenden Sie die Schlüssel,screen
die verwendet werden, da dies die einfachste Lösung ist. Nun gibt es ein subtiles Problem:screen+fkeys
sieht so aus:weil (auf dem Testbildschirm) diese Schlüssel und nicht die in der
$TERM
Beschreibung des äußeren Terminals angegebenen gesendet wurden . Der innere Wert$TERM
ist auf festgelegtxterm
,screen
verwendet diesen Zwischeneintrag jedoch, wenn spezielle Schlüssel wie "home / end" für Ihre Sitzung übermittelt werden.quelle