Windows 10 linux bash shell ctrl + spacja nie ustawia znaku w Emacsie

12

W Windows 10 zainstalowałem Subsystem dla Linux Bash. Ale mam problem ze skrótem w Emacsie Ctrl+ spacenie ustawia znacznika punktu.

Co próbowałem i nie pomogłem:

  • Próbowałem odznaczyć „włącz skróty klawiszowe Ctrl” w menu właściwości konsoli Windows

  • Próbowałem użyć innego terminalu ConEmu bez powodzenia.

Zastanawiam się, czy jest to w jakiś sposób związane z Ubuntu, który ma podobne problemy z ctrl + spacją, a Windows Linux Bash używa repozytoriów Ubuntu.

Paweł Dubiel
źródło

Odpowiedzi:

3

W chwili pisania tego tekstu (1 września 2016 r.) Nie ma rozwiązania tego problemu , jeśli chodzi o przechodzenie Ctrl-Space przez terminal Bash - ale istnieje obejście, które może być wystarczające dla wielu użytkowników: użyj PuTTY, aby połączyć się przez SSH, który wymusza obsługę Ctrl-Space. (W trybie tty nie można odróżnić Ctrl-Space od Ctrl- @, ponieważ są one tym samym kodem znaków, ale nie powinno to stanowić problemu, ponieważ domyślnie Emacs jest skonfigurowany do obsługi w set-mark-commandten sposób.)

  1. Zainstaluj serwer OpenSSH za pomocą sudo apt-get install openssh-server. Jeśli został już zainstalowany, usuń go ( sudo apt-get remove openssh-server), a następnie zainstaluj ponownie, aby zresetować pliki konfiguracyjne.
  2. Zmodyfikuj plik / etc / ssh / sshd_config (z sudo) w następujący sposób:

    • Jeśli istnieje nieskomentowane ustawienie linii PermitRootLogin, skomentuj to. Dodaj linię PermitRootLogin no.
    • Dodaj wiersz AllowUsers USERNAME, zastępując USERNAME swoją nazwą użytkownika Linux (jeśli nie wiesz, co to jest, uruchom polecenie whoamipo znaku zachęty Bash).
    • Najlepiej jest skonfigurować uwierzytelnianie bez hasła przy użyciu kluczy SSH, ale jak to zrobić jest poza zakresem tego pytania (dostępnych jest wiele przewodników; wyszukaj w sieci hasło „hasło bez klucza haseł ssh”). W międzyczasie dodaj lub odkomentuj linię PasswordAuthentication yes.
    • Zestaw UsePrivilegeSeparation no; prawdopodobnie znajdziesz w pliku wiersz z napisem UsePrivilegeSeparation yes; Wystarczy zmienić yessię noi zapisz ssh sshd_config / etc / / plik.

    Jeśli coś pójdzie nie tak, możesz przywrócić plik, powtarzając krok 1.

  3. Uruchom serwer SSH za pomocą polecenia sudo service ssh --full-restart.
  4. Korzystając z PuTTY (pobierz tutaj ), zaloguj się localhostw polu Nazwa hosta, wszystko inne pozostanie jako domyślne. Zostaniesz poproszony o podanie nazwy użytkownika Linux i hasła.
  5. Uruchom emacs. Ctrl-spacja ustawi znak zgodnie z potrzebami.

(Należy pamiętać, że powyższe kroki same w sobie nie spowodują , że system będzie w stanie akceptować połączenia SSH z innych hostów. W tym celu należy również zmienić reguły zapory systemu Windows, aby zezwolić na przychodzący port TCP 22.)

W innej odpowiedzi powiedziałeś: „ale kit nie jest lokalnym terminalem”. Nie jestem pewien, czy nie byłeś świadomy tego, że możesz użyć localhostw ten sposób, czy też zwalniałeś PuTTY z powodu większego obciążenia w porównaniu z lokalnym terminalem. Jeśli to drugie, nie martwiłbym się, interaktywna sesja SSH jest wyjątkowo lekkim obciążeniem. (To z pewnością znacznie mniejsze obciążenie niż uruchomienie X Window System, więc możesz uruchomić GUI Emacs lub xterm!)

Jedyną prawdziwą wadą działania w ten sposób w porównaniu z prostym terminalem jest to, że zdarzenia wklejania są wysyłane litera po literze, tak jakbyś bardzo szybko wpisywał zawartość schowka, co może powodować pary elektryczne, wcięcia, rozwinięcie fragmentu itp. ogień. (Wklejanie nie powinno powodować uruchamiania poleceń akordów klawiszowych, ponieważ istnieje logika umożliwiająca wykrycie wklejania w toku i wyłączanie akordów klawiszowych do czasu zakończenia wklejania).

Jest też co najmniej jedna bardzo duża przewaga nad standardowym terminalem Bash: zdarzenia myszy są obsługiwane przez PuTTY w formie, na którą Emacs może zareagować, więc, o ironio, możesz przesunąć punkt za pomocą myszy w PuTTY, nawet jeśli możesz ' t z terminalem lokalnym.

Trey
źródło
5

Używam ConEmu. Nie ma eleganckiego sposobu, ale można go rozwiązać za pomocą makra.

  1. Otwórz „Ustawienia” (kliknij ikonę u góry).
  2. Kliknij „Klawisze i makra”.
  3. Po prawej stronie przewiń w dół, aż zobaczysz opcje „Makro 01” .. „Makro 32” i wybierz dowolną dostępną (nie ma znaczenia).
    Weźmy Makro 01 dla tego przykładu.
  4. Wybierz „Spacja” w 1. menu rozwijanym.
  5. Wybierz „Ctrl” w 2. menu rozwijanym. Pozostaw pozostałe 2 menu rozwijane nietknięte.
  6. Wklej poniżej w polu Makro GUI :

    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. Powyżej w zasadzie wysyła M-x select-mark-commandciąg znaków do emacsa. Teraz kliknij „Zapisz ustawienia”.


W końcu powinno to wyglądać tak:

wprowadź opis zdjęcia tutaj

Akira Ishikawa
źródło
działa jak urok. Fantastyczny!
chriskelly
2

Podczas pracy showkey -aw konsoli Windows / ubuntu-bash pokazuje, że ctrl + spacja po prostu wysyła zwykłą spację.

To samo dotyczy sesji ssh z dowolną inną maszyną linuxową ctrl + spacja jest wysyłana jako spacja.

To samo zachowanie występuje w przypadku dowolnego innego terminalu opartego na systemie Windows (conemu, consolez, MobaXTerm) - z tym wyjątkiem, że kit dobrze sobie z tym radzi, ale kit nie jest terminalem lokalnym.

Myślę, że terminale systemu Windows nie mają mapowań dla niektórych sekwencji. Ten sam problem występuje w przypadku innych kombinacji, takich jak ctrl + 1 ctrl + 2 .. itd. Tutaj wymagany jest terminal, który może obsługiwać mapowania klawiatury dla siebie jak na przykład kit.

Uważam, że ten problem powinien zostać rozwiązany w przyszłych wersjach terminalu Windows Bash.

Paweł Dubiel
źródło
Co gorsza, wydaje się, że nie przechodzi również przez ctrl- @, co jest drugim wiązaniem dla set-mark. Jeśli ktoś jest w prawdziwym powiązaniu, może użyć polecenia Mx set-mark-command. Prawdopodobnie na razie należy ustawić klucz wiążący z czymś innym.
Jim Hunziker,
@JimHunziker Biorąc pod uwagę, że set-mark-commandjest to prawdopodobnie najczęściej używane polecenie w Emacsie (poza self-insert-command), przekwalifikowanie palców jest bardzo, bardzo stromym pytaniem - szczególnie jeśli używasz Emacsa od ponad 25 lat jak ja.
Trey
@Trey dodał kolejną odpowiedź, jeśli nie przeszkadza ci uruchamianie xminga w systemie Windows
Paweł Dubiel
@PawelDubiel Zobacz właśnie dodaną odpowiedź. (Podałem bardziej szczegółowe instrukcje, niż trzeba, aby pomóc późniejszym czytelnikom.) Z jakiegoś powodu odrzuciłeś PuTTY, ale nie powiedziałeś, z jakiego powodu. Jest to z pewnością opcja, która powoduje znacznie mniejsze obciążenie systemu niż xming + terminal X.
Trey
2

Ten projekt pozwala na użycie MinTTY jako alternatywnego terminala: https://github.com/mintty/wsltty . Pochodzi z PuTTY, ale nie wymaga SSH. I podobnie jak PuTTY, dobrze radzi sobie z Ctrl-spacją.

Joel Dice
źródło
1

Ten problem został już rozwiązany w kompilacji 14965 systemu Windows 10 . Czek:

[Environment]::OSVersion

I zainstaluj aktualizacje, jeśli jeszcze tego nie zrobiłeś!

oblio
źródło
Dodaj więcej szczegółów do swojej odpowiedzi - link może przestać działać w pewnym momencie, w którym twoja odpowiedź stanie się bezużyteczna.
djsmiley2k
0

Jest hack, ponieważ możemy zainstalować X Server dla Windows

1 pierwsza instalacja xminga dla systemu Windows

2 zacznij xming

3 następnie z Windows bash install

sudo apt-get install rxvt-unicode-256color

4 następnie otwórz cmd.exei uruchom

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

teraz jesteśmy w konsoli bash i uruchamiamy

(DISPLAY=:0 urxvtc &)

5 W tym momencie powinniśmy już zobaczyć nowy terminal w Xming. I możemy uruchomić emacsa w trybie terminalowym.

emacs -nw

Wszystkie wiązania działają teraz dobrze

powiązana dyskusja znajduje się tutaj https://github.com/Microsoft/BashOnWindows/issues/531

Paweł Dubiel
źródło
Dlaczego jest to lepsze obejście od używania PuTTY? Jeśli miałbyś uruchomić Emacsa w trybie GUI, zrozumiałbym to, ale twoje użycie -nwsprawia, że ​​działa w terminalu, tak jak w PuTTY, tyle że teraz musisz uruchomić cały drugi system okienkowy - z mój szybki test, który będzie kosztował prawie 500 MB pamięci poza uruchomieniem sshd i PuTTY i będzie miał podobnie wyższy koszt procesora.
Trey
@trey 500 MB jesteś pewien? w moim systemie jest dokładnie 5 MB
Paweł Dubiel
Ach, źle odczytałem jednostki, masz rację. Ale porównywalny numer sshd + PuTTY to około 25% innej liczby, cokolwiek to jest ;-)
Trey