Windows 10 Linux Bash Shell Strg + Leertaste setzt in Emacs keine Markierung

12

In Windows 10 habe ich Subsystem für Linux Bash installiert. Aber ich habe ein Problem mit der Verknüpfung in Emacs Ctrl+ spacesetzt keinen Markierungspunkt.

Was ich versucht und nicht geholfen habe:

  • Ich habe versucht, das Kontrollkästchen "Tastenkombinationen für Strg aktivieren" im Eigenschaftenmenü für die Windows-Konsole zu deaktivieren

  • Ich habe erfolglos versucht, ein anderes Terminal ConEmu zu verwenden.

Ich frage mich, ob dies irgendwie mit Ubuntu zusammenhängt, das ähnliche Probleme mit Strg + Leertaste hat und Windows Linux Bash Ubuntu-Repositorys verwendet.

Pawel Dubiel
quelle

Antworten:

3

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.)

  1. 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.
  2. 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 USERNAMEund ersetzen Sie USERNAME durch Ihren Linux-Benutzernamen (wenn Sie nicht wissen, was das ist, führen Sie den Befehl whoamian 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 yesin nound speichere die / etc / ssh / sshd_config Datei.

    Wenn hier etwas schief geht, können Sie die Datei wiederherstellen, indem Sie Schritt 1 wiederholen.

  3. Starten Sie den SSH-Server mit dem Befehl sudo service ssh --full-restart.
  4. Melden Sie sich mit PuTTY ( hier herunterladen ) localhostim Feld Hostname an, alles andere bleibt standardmäßig erhalten. Sie werden aufgefordert, Ihren Linux-Benutzernamen und Ihr Passwort einzugeben.
  5. 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.

Trey
quelle
5

Ich benutze ConEmu. Es gibt keinen eleganten Weg, aber er kann mit dem Makro gelöst werden.

  1. Öffnen Sie "Einstellungen" (Klicken Sie oben auf das Symbol).
  2. Klicken Sie auf "Keys & Macros".
  3. Scrollen Sie auf der rechten Seite nach unten, bis Sie "Macro 01" .. "Macro 32" -Optionen sehen, und wählen Sie eine Option aus, die verfügbar ist (egal).
    Nehmen wir für dieses Beispiel Makro 01 .
  4. Wählen Sie "Space" im 1. Dropdown-Menü.
  5. Wählen Sie "Strg" im 2. Dropdown-Menü. Lassen Sie die restlichen 2 Dropdown-Menüs unberührt.
  6. Füge folgendes in das GUI Macro Feld ein:

    keys("\e");keys("x");keys("s");keys("e");keys("t");keys("-");keys("m");keys("a");keys("r");keys("k");keys("-");keys("c");keys("o");keys("m");keys("m");keys("a");keys("n");keys("d");keys("\n")
  7. Oben schickt im Grunde M-x select-mark-commandString an Emacs. Klicken Sie nun auf "Einstellungen speichern".


Am Ende sollte es so aussehen:

Bildbeschreibung hier eingeben

Akira Ishikawa
quelle
funktioniert wie Charme. Fantastisch!
ChrisKelly
2

Unter showkey -aWindows / 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.

Pawel Dubiel
quelle
Schlimmer noch, es scheint auch Ctrl-@ nicht zu passieren, was die andere Bindung für Set-Mark ist. Wenn sich jemand in einer echten Bindung befindet, kann er den Mx-Befehl set-mark verwenden. Das Richtige für den Moment ist wahrscheinlich, eine Schlüsselbindung für etwas anderes festzulegen.
Jim Hunziker
@JimHunziker Da dies set-mark-commandwahrscheinlich der am häufigsten verwendete Befehl in Emacs ist (abgesehen von self-insert-command), ist die Umschulung der Finger eine sehr, sehr schwierige Frage - insbesondere, wenn Sie Emacs seit über 25 Jahren wie ich verwenden.
Trey
@Trey fügte eine weitere Antwort hinzu, wenn es Ihnen nichts ausmacht, xming unter Windows auszuführen
Pawel Dubiel
@PawelDubiel Siehe meine Antwort gerade hinzugefügt. (Ich habe detailliertere Anweisungen gegeben, als Sie später benötigen, um den Lesern zu helfen.) Sie haben PuTTY aus irgendeinem Grund entlassen, aber diesen Grund nicht angegeben. Es ist sicherlich eine Option, die das System viel weniger belastet als xming + ein X-Terminal.
Trey
2

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.

Joel Dice
quelle
1

Dieses Problem wurde in Windows 10 Build 14965 behoben . Prüfen:

[Environment]::OSVersion

Und installieren Sie Updates, wenn Sie nicht haben!

oblio
quelle
Bitte fügen Sie Ihrer Antwort weitere Details hinzu - der Link funktioniert möglicherweise nicht mehr, sobald Ihre Antwort unbrauchbar wird.
djsmiley2k TMW
0

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

sudo apt-get install rxvt-unicode-256color

4 dann öffnen cmd.exeund ausführen

bash.exe -c "urxvtd -q -o -f; bash" 

Jetzt sind wir in der Bash-Konsole und laufen

(DISPLAY=:0 urxvtc &)

5 Zu diesem Zeitpunkt sollten wir bereits ein neues Terminal in Xming sehen. Und wir können Emacs im Terminal-Modus ausführen.

emacs -nw

Und alle Bindungen funktionieren jetzt einwandfrei

Die entsprechende Diskussion finden Sie hier https://github.com/Microsoft/BashOnWindows/issues/531

Pawel Dubiel
quelle
Warum ist dies eine überlegene Lösung für die Verwendung von PuTTY? Wenn Sie Emacs im GUI-Modus ausführen würden, würde ich verstehen, aber Ihre Verwendung von -nwbewirkt, 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.
Trey
@ Trey 500MB sind Sie sicher? auf meinem System ist genau 5 MB
Pawel Dubiel
Ah, ich habe die Einheiten falsch verstanden, du hast recht. Aber die vergleichbare sshd + PuTTY-Nummer ist etwa 25% der anderen Nummer, was auch immer es ist ;-)
Trey