Bagaimana cara membedakan Cm dari RETURN?

14

Ketika dalam mode javascript mencoba menggunakan C-c C-m imendapatkan kesalahan yang mengatakan " C-c RETtidak terdefinisi?"

Apa yang membuat Emacs percaya saya mendesak RET?

Bagaimana saya bisa membuat pengikatan tombol ini berfungsi dengan baik?

pengguna3139545
sumber
2
Kemungkinan duplikat dengan Benar membedakan Ctrl + i dan Tab
Drew
1
Masalah yang sama, titik masuk yang berbeda, saya pikir akan menyenangkan jika kedua pertanyaan tetap ada untuk orang-orang yang berasal dari pencarian yang berbeda.
Jordon Biondo
1
Kemungkinan rangkap dari Bagaimana mengikat Ci berbeda dari TAB?
Gilles 'SO- stop being evil'

Jawaban:

19

Emacs "berpikir" bahwa C-madalah RETkarena "Control M" adalah ASCII kontrol karakter "carriage return". Meskipun alasan ini adalah "historis" Emacs dapat berjalan di terminal dan karenanya perlu mendukung cara terminal masih bekerja sekarang.

Coba buka jendela terminal, ketikkan " ls", dan tekan C-m. Anda akan melihat bahwa itu ditafsirkan sebagai "kembali", meskipun Anda tidak di Emacs.

Lihat Karakter kontrol di Wikipedia untuk detail tentang karakter kontrol.

Untuk membedakan C-mdari RETdalam GUI Emacs, orang dapat mengubah C-ike C-mdalam jawaban @nispio :

(define-key input-decode-map [?\C-m] [C-m])

;; now we can do this:

(defun my-command ()
  (interactive)
  (message "C-m is not the same as RET any more!"))

(global-set-key (kbd "<C-m>") #'my-command)

Lihat juga

Constantine
sumber
2
Ini brilian, terima kasih. Sekarang saya dapat memiliki C-mpeta awalan untuk banyak kursor.
John Wiegley