Windows 10 linux bash shell ctrl + space tidak menetapkan tanda di Emacs


12

Di Windows 10 saya menginstal Subsystem untuk Linux Bash. Tapi saya punya masalah dengan pintasan di Emacs Ctrl+ spacetidak menetapkan titik tanda.

Apa yang saya coba dan tidak membantu:

  • Saya mencoba untuk menghapus centang "aktifkan pintasan tombol Ctrl" di menu properti untuk windows konsol

  • Saya mencoba menggunakan terminal berbeda ConEmu tanpa hasil.

Saya bertanya-tanya apakah ini terkait dengan ubuntu yang memiliki masalah serupa dengan ctrl + space, dan windows linux bash menggunakan repositori ubuntu.

Jawaban:


3

Tidak ada solusi untuk ini, dalam hal membuat Ctrl-Space melewati terminal Bash, pada saat penulisan ini (1 Sep 2016) —tapi ada solusi yang mungkin cukup untuk banyak pengguna: gunakan Putty untuk terhubung melalui SSH, yang memaksa penanganan Ctrl-Space. (Dalam mode tty, mustahil untuk membedakan Ctrl-Space dari Ctrl- @, karena mereka adalah kode karakter yang sama, tetapi itu seharusnya tidak menjadi masalah, karena secara default Emacs diatur untuk menangani hal set-mark-commanditu.)

  1. Instal server OpenSSH dengan sudo apt-get install openssh-server. Jika sudah diinstal, hapus ( sudo apt-get remove openssh-server) lalu instal ulang untuk mengatur ulang file konfigurasi.
  2. Edit file / etc / ssh / sshd_config (dengan sudo), sebagai berikut:

    • Jika ada pengaturan garis tanpa PermitRootLoginkomentar, komentari. Tambahkan satu baris PermitRootLogin no.
    • Tambahkan baris AllowUsers USERNAME, ganti USERNAME dengan nama pengguna Linux Anda (jika Anda tidak tahu apa itu, jalankan perintah whoamidi Bash prompt Anda).
    • Idealnya Anda harus mengatur otentikasi tanpa kata sandi menggunakan kunci SSH, tetapi bagaimana melakukannya di luar ruang lingkup pertanyaan ini (ada banyak panduan yang tersedia; cari web untuk "kata sandi ssh-keygen"). Sementara itu, tambahkan atau batalkan komentar pada baris PasswordAuthentication yes.
    • Atur UsePrivilegeSeparation no; kemungkinan Anda akan menemukan baris dalam file yang mengatakan UsePrivilegeSeparation yes; cukup ubah yesto nodan simpan file / etc / ssh / sshd_config .

    Jika terjadi kesalahan di sini, Anda dapat memulihkan file dengan mengulangi langkah # 1.

  3. Mulai server SSH dengan perintah sudo service ssh --full-restart.
  4. Menggunakan Putty (unduh di sini ), masuk dengan localhostdi bidang Hostname, semuanya dibiarkan sebagai default. Anda akan diminta memasukkan nama pengguna dan kata sandi Linux Anda.
  5. Lari emacs. Ctrl-space akan mengatur tanda yang diinginkan.

(Perhatikan bahwa langkah-langkah di atas tidak akan , dengan sendirinya, membuat sistem Anda dapat menerima koneksi SSH dari host lain . Untuk melakukan itu, Anda juga harus mengubah aturan firewall Windows Anda untuk mengizinkan inbound TCP port 22.)

Di jawaban lain Anda berkata, "tapi dempul bukan terminal lokal." Saya tidak yakin apakah Anda tidak sadar bahwa Anda dapat menggunakan localhostcara ini, atau jika Anda menolak Putty karena overhead yang lebih besar dibandingkan terminal lokal. Jika yang terakhir, saya tidak akan khawatir, sesi SSH interaktif adalah beban yang sangat ringan. (Ini tentu jauh lebih sedikit beban daripada menjalankan Sistem X Window sehingga Anda dapat menjalankan GUI Emacs atau xterm!)

Satu-satunya kelemahan nyata untuk menjalankan cara ini versus terminal langsung adalah bahwa acara tempel dikirim surat demi surat, seolah-olah Anda mengetik konten clipboard dengan sangat cepat, yang dapat menyebabkan pasangan listrik, indensi, ekspansi snippet, dll. Ke api. (Tempel seharusnya tidak menyebabkan perintah kunci-chord menyala, karena ada logika untuk mendeteksi pasta yang sedang dalam proses dan menonaktifkan kunci-kunci sampai pasta selesai.)

Dan setidaknya ada satu keuntungan yang sangat besar atas terminal Bash standar juga: acara mouse didukung oleh Putty dalam bentuk yang dapat ditanggapi Emacs, jadi, ironisnya, Anda dapat memindahkan titik dengan mouse di Putty bahkan jika Anda bisa ' t dengan terminal lokal.


5

Saya menggunakan ConEmu. Tidak ada cara yang elegan, tetapi bisa diselesaikan menggunakan makro.

  1. Buka "Pengaturan" (Klik pada ikon di atas).
  2. Klik pada "Tombol & Makro".
  3. Di sisi kanan, gulir ke bawah hingga Anda melihat opsi "Makro 01" .. "Makro 32", dan pilih salah satu yang tersedia (tidak masalah).
    Mari kita ambil Makro 01 untuk contoh ini.
  4. Pilih "Spasi" di menu dropdown pertama.
  5. Pilih "Ctrl" di menu turun ke-2. Biarkan 2 menu dropdown yang tersisa tidak tersentuh.
  6. Tempel di bawah ini di bidang 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. Di atas pada dasarnya mengirim M-x select-mark-commandstring ke emacs. Sekarang klik "Simpan pengaturan".


Seharusnya terlihat seperti ini pada akhirnya:

masukkan deskripsi gambar di sini


bekerja seperti pesona. Fantastis!
chriskelly

2

Ketika berjalan showkey -adi konsol windows / ubuntu-bash itu menunjukkan bahwa ctrl + ruang hanya mengirim ruang kosong.

Dan itu masalah yang sama dengan sesi ssh ke mesin linux lain ctrl + ruang dikirim sebagai ruang kosong.

Perilaku yang sama adalah dengan terminal berbasis windows lainnya (conemu, consolez, MobaXTerm) - kecuali dempul dapat menangani ini dengan baik tetapi dempul bukan terminal lokal.

Saya pikir terminal Windows tidak memiliki pemetaan untuk beberapa urutan. Masalah yang sama adalah dengan kombinasi lain seperti ctrl + 1 ctrl + 2 .. dll. Di sini diperlukan terminal yang dapat menangani pemetaan keyboard untuk itu sendiri seperti dempul misalnya.

Saya percaya masalah ini harus diperbaiki dalam rilis masa depan terminal windows bash.


Lebih buruk lagi, tampaknya tidak lulus ctrl- @, baik, yang mengikat lainnya untuk set-mark. Jika seseorang dalam ikatan nyata, mereka dapat menggunakan Mx set-mark-command. Hal yang benar untuk dilakukan saat ini, mungkin, adalah menetapkan kunci yang mengikat sesuatu yang lain.
Jim Hunziker

@JimHunziker Mengingat bahwa set-mark-commanditu mungkin perintah yang paling sering digunakan di Emacs (selain dari self-insert-command), melatih kembali jari seseorang untuk itu adalah pertanyaan yang sangat, sangat curam — terutama jika Anda telah menggunakan Emacs selama 25+ tahun seperti saya.
Trey

@Trey menambahkan jawaban lain, jika Anda tidak keberatan menjalankan xming di windows
Pawel Dubiel

@ PawelDubiel Lihat jawaban saya baru saja ditambahkan. (Saya memberikan instruksi yang lebih rinci daripada yang diperlukan bagi Anda untuk membantu pembaca nanti.) Anda menolak Putty karena suatu alasan, tetapi tidak mengatakan apa alasannya. Ini tentu saja opsi yang menempatkan beban jauh lebih sedikit pada sistem daripada xming + terminal X.
Trey

2

Proyek ini memungkinkan Anda untuk menggunakan MinTTY sebagai terminal alternatif: https://github.com/mintty/wsltty . Ini berasal dari Putty, tetapi tidak memerlukan SSH. Dan seperti Putty, ia menangani Ctrl-space dengan baik.


1

Masalah ini sekarang diperbaiki di Windows 10 build 14965 . Memeriksa:

[Environment]::OSVersion

Dan instal pembaruan jika Anda belum!


Harap tambahkan detail lebih lanjut ke jawaban Anda - tautan mungkin berhenti berfungsi pada titik di mana jawaban Anda menjadi tidak berguna.
djsmiley2k TMW

0

Ada peretasan karena kami dapat menginstal X Server untuk Windows

1 instal xming for windows terlebih dahulu

2 mulai xming

3 kemudian dari windows bash install

sudo apt-get install rxvt-unicode-256color

4 lalu buka cmd.exedan jalankan

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

sekarang kita berada di bash console dan jalankan

(DISPLAY=:0 urxvtc &)

5 Pada titik ini, kita seharusnya sudah melihat terminal baru di Xming. Dan kita dapat menjalankan emacs dalam mode terminal.

emacs -nw

Dan semua binding sekarang berfungsi dengan baik

diskusi terkait ada di sini https://github.com/Microsoft/BashOnWindows/issues/531


Mengapa ini merupakan solusi terbaik untuk menggunakan Putty? Jika Anda akan menjalankan Emacs dalam mode GUI, saya akan memahaminya, tetapi penggunaan Anda -nwmembuatnya berjalan di terminal, seperti halnya dengan Putty, kecuali Anda sekarang harus menjalankan seluruh sistem windowing kedua — dari tes cepat saya, itu akan dikenakan biaya hampir 500 MB memori di luar menjalankan sshd dan Putty dan akan memiliki biaya CPU yang lebih tinggi.
Trey

@trey 500MB Anda yakin? pada sistem saya persis 5mb
Pawel Dubiel

Ah, saya salah baca unitnya, Anda benar. Tetapi nomor sshd + PutTY yang sebanding adalah sekitar 25% dari angka lainnya, apa pun itu ;-)
Trey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.