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-command
ten sposób.)
- 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.
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 whoami
po 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ć yes
się no
i zapisz ssh sshd_config / etc / / plik.
Jeśli coś pójdzie nie tak, możesz przywrócić plik, powtarzając krok 1.
- Uruchom serwer SSH za pomocą polecenia
sudo service ssh --full-restart
.
- Korzystając z PuTTY (pobierz tutaj ), zaloguj się
localhost
w polu Nazwa hosta, wszystko inne pozostanie jako domyślne. Zostaniesz poproszony o podanie nazwy użytkownika Linux i hasła.
- 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ć localhost
w 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.
Podczas pracy
showkey -a
w 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.
źródło
set-mark-command
jest to prawdopodobnie najczęściej używane polecenie w Emacsie (pozaself-insert-command
), przekwalifikowanie palców jest bardzo, bardzo stromym pytaniem - szczególnie jeśli używasz Emacsa od ponad 25 lat jak ja.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ą.
źródło
Ten problem został już rozwiązany w kompilacji 14965 systemu Windows 10 . Czek:
I zainstaluj aktualizacje, jeśli jeszcze tego nie zrobiłeś!
źródło
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
4 następnie otwórz
cmd.exe
i uruchomteraz jesteśmy w konsoli bash i uruchamiamy
5 W tym momencie powinniśmy już zobaczyć nowy terminal w Xming. I możemy uruchomić emacsa w trybie terminalowym.
Wszystkie wiązania działają teraz dobrze
powiązana dyskusja znajduje się tutaj https://github.com/Microsoft/BashOnWindows/issues/531
źródło
-nw
sprawia, ż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.