Zum Zeitpunkt des Schreibens (1. September 2016) gibt es keine Lösung , um Strg-Leertaste das Bash-Terminal passieren zu lassen. Es gibt jedoch eine Problemumgehung, die für viele Benutzer ausreichen könnte: Verwenden Sie PuTTY, um eine Verbindung über herzustellen SSH, das den Umgang mit Ctrl-Space erzwingt. (Im tty-Modus ist es unmöglich, Strg-Leertaste von Strg-@ zu unterscheiden, da es sich um denselben Zeichencode handelt, dies sollte jedoch kein Problem sein, da Emacs standardmäßig so eingerichtet ist set-mark-command
.)
- Installieren Sie den OpenSSH-Server mit
sudo apt-get install openssh-server
. Wenn es bereits installiert war, entfernen Sie es ( sudo apt-get remove openssh-server
) und installieren Sie es erneut, um die Konfigurationsdateien zurückzusetzen.
Bearbeiten Sie die Datei / etc / ssh / sshd_config (mit sudo) wie folgt:
- Wenn eine unkommentierte Zeileneinstellung vorhanden ist
PermitRootLogin
, kommentieren Sie sie aus. Fügen Sie eine Zeile hinzu PermitRootLogin no
.
- Fügen Sie eine Zeile hinzu
AllowUsers USERNAME
und ersetzen Sie USERNAME durch Ihren Linux-Benutzernamen (wenn Sie nicht wissen, was das ist, führen Sie den Befehl whoami
an der Bash-Eingabeaufforderung aus).
- Im Idealfall sollten Sie die kennwortlose Authentifizierung mit SSH-Schlüsseln einrichten. Die Vorgehensweise ist jedoch nicht Gegenstand dieser Frage (es stehen zahlreiche Anleitungen zur Verfügung; durchsuchen Sie das Web nach "kennwortlosem ssh-keygen"). In der Zwischenzeit können Sie die Zeile hinzufügen oder auskommentieren
PasswordAuthentication yes
.
- Set
UsePrivilegeSeparation no
; wahrscheinlich finden Sie eine Zeile in der Datei, in der steht UsePrivilegeSeparation yes
; ändere einfach die yes
in no
und speichere die / etc / ssh / sshd_config Datei.
Wenn hier etwas schief geht, können Sie die Datei wiederherstellen, indem Sie Schritt 1 wiederholen.
- Starten Sie den SSH-Server mit dem Befehl
sudo service ssh --full-restart
.
- Melden Sie sich mit PuTTY ( hier herunterladen )
localhost
im Feld Hostname an, alles andere bleibt standardmäßig erhalten. Sie werden aufgefordert, Ihren Linux-Benutzernamen und Ihr Passwort einzugeben.
- Laufen
emacs
. Strg-Leertaste setzt die Markierung wie gewünscht.
(Beachten Sie, dass die obigen Schritte nicht dazu führen , dass Ihr System SSH-Verbindungen von anderen Hosts akzeptiert . Dazu müssen Sie auch Ihre Windows-Firewallregeln ändern, um eingehenden TCP-Port 22 zuzulassen.)
In einer anderen Antwort sagten Sie: "Aber Kitt ist kein lokales Terminal." Ich bin mir nicht sicher, ob Sie sich dessen nicht bewusst waren localhost
, oder ob Sie PuTTY aufgrund des höheren Overheads im Vergleich zu einem lokalen Terminal entlassen haben. In letzterem Fall ist eine interaktive SSH-Sitzung eine extrem leichte Last. (Es ist sicherlich viel weniger Last als das Ausführen eines X Window Systems, so dass Sie ein GUI Emacs oder ein xterm ausführen können!)
Der einzige wirkliche Nachteil beim Ausführen dieser Methode im Vergleich zu einem geraden Terminal besteht darin, dass Einfügeereignisse Buchstabe für Buchstabe gesendet werden, als ob Sie den Inhalt der Zwischenablage sehr schnell eingegeben hätten, was zu elektrischen Paaren, Einrückungen, Auszügen usw. führen kann Feuer. (Das Einfügen sollte nicht dazu führen, dass Tastaturbefehle ausgelöst werden, da es eine Logik gibt, um ein laufendes Einfügen zu erkennen und Tastaturakkorde zu deaktivieren, bis das Einfügen abgeschlossen ist.)
Und es gibt mindestens einen großen Vorteil gegenüber dem Standard-Bash-Terminal: Mausereignisse werden von PuTTY in einer Form unterstützt, auf die Emacs reagieren kann, sodass Sie ironischerweise den Punkt mit der Maus in PuTTY verschieben können, selbst wenn Sie t mit dem lokalen Terminal.
Unter
showkey -a
Windows / Ubuntu-Bash wird angezeigt, dass Strg + Leertaste nur ein einfaches Leerzeichen sendet.Und es ist das gleiche Problem mit SSH-Sitzung auf einem anderen Linux-Computer. Strg + Leertaste wird als Leerzeichen gesendet.
Das gleiche Verhalten ist bei jedem anderen Windows-basierten Terminal (conemu, consolez, MobaXTerm) zu beobachten - außer, dass Putty damit gut umgehen kann, Putty jedoch kein lokales Terminal ist.
Ich denke, Windows-Terminals haben für einige Sequenzen keine Zuordnungen. Das gleiche Problem tritt bei anderen Kombinationen wie Strg + 1 Strg + 2 auf. Hier ist ein Terminal erforderlich, das die Tastaturzuordnungen für sich selbst wie zum Beispiel Kitt handhaben kann.
Ich glaube, dieses Problem sollte in zukünftigen Versionen des Windows Bash-Terminals behoben werden.
quelle
set-mark-command
wahrscheinlich der am häufigsten verwendete Befehl in Emacs ist (abgesehen vonself-insert-command
), ist die Umschulung der Finger eine sehr, sehr schwierige Frage - insbesondere, wenn Sie Emacs seit über 25 Jahren wie ich verwenden.In diesem Projekt können Sie MinTTY als alternatives Terminal verwenden: https://github.com/mintty/wsltty . Es ist von PuTTY abgeleitet, benötigt aber kein SSH. Und wie bei PuTTY ist auch hier der Strg-Raum in Ordnung.
quelle
Dieses Problem wurde in Windows 10 Build 14965 behoben . Prüfen:
Und installieren Sie Updates, wenn Sie nicht haben!
quelle
Es gibt einen Hack, da wir X Server für Windows installieren können
1 Installieren Sie zuerst xming für Windows
2 xming starten
3 dann von Windows Bash installieren
4 dann öffnen
cmd.exe
und ausführenJetzt sind wir in der Bash-Konsole und laufen
5 Zu diesem Zeitpunkt sollten wir bereits ein neues Terminal in Xming sehen. Und wir können Emacs im Terminal-Modus ausführen.
Und alle Bindungen funktionieren jetzt einwandfrei
Die entsprechende Diskussion finden Sie hier https://github.com/Microsoft/BashOnWindows/issues/531
quelle
-nw
bewirkt, dass es in einem Terminal ausgeführt wird, genau wie bei PuTTY, außer dass Sie jetzt ein ganzes zweites Fenstersystem ausführen müssen - von Mein schneller Test, das kostet Sie fast 500 MB Speicher, abgesehen von sshd und PuTTY, und hat ähnlich höhere CPU-Kosten.