Windows 10 Linux bash shell ctrl + spazio non imposta il segno in Emacs


12

In Windows 10 ho installato Sottosistema per Linux Bash. Ma ho un problema con il collegamento in Emacs Ctrl+ spacenon imposta il punto.

Cosa ho provato e non ho aiutato:

  • Ho provato a deselezionare "Abilita scorciatoie da tastiera Ctrl" nel menu delle proprietà per la console di Windows

  • Ho provato a utilizzare diversi terminali ConEmu senza successo.

Mi chiedo se questo sia in qualche modo legato a Ubuntu che ha problemi simili con Ctrl + Spazio e Windows Linux Bash sta usando repository Ubuntu.

Risposte:


3

Non ci sono soluzioni a questo, in termini di far passare Ctrl-Spazio attraverso il terminale Bash, al momento in cui scrivo (1 settembre 2016), ma esiste una soluzione alternativa che può essere sufficiente per molti utenti: utilizzare PuTTY per connettersi tramite SSH, che forza la gestione di Ctrl-Spazio. (Nella modalità tty, è impossibile distinguere Ctrl-Spazio da Ctrl- @, perché hanno lo stesso codice carattere, ma questo non dovrebbe essere un problema, poiché per impostazione predefinita Emacs è impostato per gestirlo in set-mark-commandquel modo.)

  1. Installa il server OpenSSH con sudo apt-get install openssh-server. Se era già installato, rimuoverlo ( sudo apt-get remove openssh-server) e quindi reinstallarlo per ripristinare i file di configurazione.
  2. Modifica il file / etc / ssh / sshd_config (con sudo), come segue:

    • Se è presente un'impostazione di linea PermitRootLoginnon commentata, commentarla. Aggiungi una linea PermitRootLogin no.
    • Aggiungi una riga AllowUsers USERNAME, sostituendo USERNAME con il tuo nome utente Linux (se non sai di cosa si tratta, esegui il comando whoamial tuo prompt di Bash).
    • Idealmente, dovresti impostare l'autenticazione senza password usando le chiavi SSH, ma come farlo non rientra nell'ambito di questa domanda (ci sono molte guide disponibili; cerca nel web "senza password ssh-keygen"). Nel frattempo, aggiungi o decommenta la linea PasswordAuthentication yes.
    • Impostare UsePrivilegeSeparation no; probabilmente troverai una riga nel file dicendo UsePrivilegeSeparation yes; basta cambiare yesin noe salvare il file / etc / ssh / sshd_config .

    Se qualcosa va storto qui, è possibile ripristinare il file ripetendo il passaggio 1.

  3. Avviare il server SSH con il comando sudo service ssh --full-restart.
  4. Usando PuTTY (scarica qui ), accedi con localhostnel campo Nome host, tutto il resto è lasciato come predefinito. Ti verrà chiesto di inserire il tuo nome utente Linux e la tua password.
  5. Corri emacs. Ctrl-spazio imposterà il segno come desiderato.

(Notare che i passaggi precedenti non renderanno di per sé il sistema in grado di accettare connessioni SSH da altri host. A tale scopo, sarà necessario modificare le regole del firewall di Windows per consentire la porta TCP in ingresso 22.)

In un'altra risposta hai detto "ma lo stucco non è un terminale locale". Non sono sicuro che non fossi a conoscenza del fatto che potresti utilizzare localhostin questo modo o se stavi licenziando PuTTY a causa delle maggiori spese generali rispetto a un terminale locale. Se quest'ultimo, non mi preoccuperei, una sessione SSH interattiva è un carico estremamente leggero. (È sicuramente molto meno carico dell'esecuzione di un sistema X Window in modo da poter eseguire una GUI Emacs o un xterm!)

L'unico vero svantaggio di correre in questo modo rispetto a un terminale semplice è che gli eventi incolla vengono inviati lettera per lettera, come se si digitasse il contenuto degli appunti molto velocemente, il che può causare coppie elettriche, rientri, espansione di frammenti, ecc. fuoco. (L'incolla non dovrebbe causare l'attivazione dei comandi key-chord, in quanto esiste la logica per rilevare una pasta in corso e disabilitare gli accordi chiave fino al termine della pasta.)

E c'è anche un grande vantaggio rispetto al terminale Bash standard: gli eventi del mouse sono supportati da PuTTY in una forma a cui Emacs può rispondere, quindi, ironicamente, puoi spostare il punto con il mouse in PuTTY anche se puoi ' t con il terminale locale.


5

Uso ConEmu. Non esiste un modo elegante, ma può essere risolto utilizzando la macro.

  1. Apri "Impostazioni" (fai clic sull'icona in alto).
  2. Fai clic su "Chiavi e macro".
  3. Sul lato destro, scorrere verso il basso fino a visualizzare le opzioni "Macro 01" .. "Macro 32" e selezionare quella disponibile (non importa).
    Prendiamo Macro 01 per questo esempio.
  4. Seleziona "Spazio" nel 1 ° menu a discesa.
  5. Seleziona "Ctrl" nel 2 ° menu a discesa. Lascia intatti i restanti 2 menu a discesa.
  6. Incolla di seguito nel campo Macro 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. Sopra sostanzialmente invia una M-x select-mark-commandstringa a emacs. Ora fai clic su "Salva impostazioni".


Dovrebbe apparire così alla fine:

inserisci qui la descrizione dell'immagine


funziona come il fascino. Fantastico!
chriskelly,

2

Quando viene eseguito showkey -anella console windows / ubuntu-bash, mostra che ctrl + spazio invia solo uno spazio semplice.

Ed è lo stesso problema con la sessione ssh su qualsiasi altra macchina linux ctrl + spazio viene inviato come spazio semplice.

Lo stesso comportamento è con qualsiasi altro terminale basato su Windows (conemu, consolez, MobaXTerm) - tranne che lo stucco può gestirlo bene ma lo stucco non è un terminale locale.

Penso che i terminali di Windows non abbiano mappature per alcune sequenze. Lo stesso problema è con altre combinazioni come ctrl + 1 ctrl + 2 .. ecc. Qui è richiesto un terminale che può gestire le mappature della tastiera per se stesso come lo stucco per esempio.

Credo che questo problema dovrebbe essere risolto nelle versioni future del terminale Windows Bash.


Ancor peggio, non sembra nemmeno passare ctrl- @, che è l'altro legame per il set-mark. Se qualcuno è in un vero e proprio legame, può usare Mx set-mark-command. La cosa giusta da fare per ora, probabilmente, è impostare un legame chiave con qualcos'altro.
Jim Hunziker,

@JimHunziker Dato che set-mark-commandè probabilmente il comando più frequentemente usato in Emacs (a parte self-insert-command), riqualificare le proprie dita è una domanda molto, molto ripida, specialmente se usi Emacs da oltre 25 anni come me.
Trey,

@Trey ha aggiunto un'altra risposta, se non ti dispiace eseguire xming su Windows
Pawel Dubiel,

@PawelDubiel Vedi la mia risposta appena aggiunta. (Ho dato istruzioni più dettagliate di quelle necessarie per aiutare i lettori successivi.) Per qualche motivo hai respinto PuTTY, ma non hai detto quale fosse. È certamente un'opzione che carica molto meno il sistema rispetto a xming + un terminale X.
Trey,


1

Questo problema è stato risolto nella build 14965 di Windows 10 . Dai un'occhiata:

[Environment]::OSVersion

E installa gli aggiornamenti se non l'hai fatto!


Aggiungi ulteriori dettagli alla tua risposta: il link potrebbe smettere di funzionare in un momento in cui la tua risposta diventa inutile.
djsmiley2k TMW,

0

C'è un trucco poiché possiamo installare X Server per Windows

1 prima installazione di xming per windows

2 iniziare xming

3 quindi da Windows bash install

sudo apt-get install rxvt-unicode-256color

4 quindi apri cmd.exeed esegui

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

ora siamo nella console bash ed eseguiamo

(DISPLAY=:0 urxvtc &)

5 A questo punto, dovremmo già vedere un nuovo terminale in Xming. E possiamo eseguire emacs in modalità terminale.

emacs -nw

E ora tutti gli attacchi funzionano bene

la relativa discussione è qui https://github.com/Microsoft/BashOnWindows/issues/531


Perché questa è una soluzione alternativa all'utilizzo di PuTTY? Se avessi intenzione di eseguire Emacs in modalità GUI, lo capirei, ma il tuo utilizzo -nwlo farà funzionare in un terminale, proprio come farebbe con PuTTY, tranne per il fatto che ora devi eseguire un intero secondo sistema di finestre - da il mio test rapido, ti costerà quasi 500 MB di memoria oltre a eseguire un SSH e PuTTY e avrà un costo CPU altrettanto elevato.
Trey,

@trey 500MB sei sicuro? sul mio sistema è esattamente 5mb
Pawel Dubiel

Ah, ho letto male le unità, hai ragione. Ma il numero sshd + PuTTY comparabile è circa il 25% dell'altro numero, qualunque esso sia ;-)
Trey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.