Gunakan Super in emacs -nw di linux

15

Saya telah berjuang untuk menemukan pertanyaan sederhana dan langsung untuk jawabannya dan karena itu saya memutuskan untuk bertanya di sini.

T: Apakah ada cara untuk menggunakan Super in Emacs yang diluncurkan di Terminal di Linux?

PS : Saya membaca banyak informasi tentang xmodmaptetapi saya pikir kuncinya adalah bahwa terminal emulator tidak dapat mewakili kunci Super. Namun, (kbd "s-SPC")mengembalikan sesuatu dan saya berpikir untuk menggunakan fasilitas terjemahan .Xdefaults/X. Apakah saya di jalan yang benar? Mengingat hasilnya kbd, apa yang harus saya masukkan sebagai XTerm.VT100.translations?

Andrea Richiardi
sumber

Jawaban:

21

Anda akan lebih nyaman dengan X11 Emacs, yang dapat menerima input keyboard dan menampilkan teks tanpa melalui pengkodean dan decoding untuk terminal . Alasan utama untuk menggunakan editor mode teks adalah untuk menjalankannya di dalam layar atau tmux pada mesin jarak jauh, tetapi berkat Tramp, biasanya lebih mudah untuk mengedit file jarak jauh di Emacs lokal Anda. Yang sedang berkata, Anda dapat melakukan apa yang Anda inginkan selama emulator terminal Anda bekerja sama, seperti halnya dengan Xterm.

Ketika Anda menekan tombol atau kombinasi tombol di terminal, itu dikirim ke aplikasi yang berjalan di terminal sebagai urutan satu atau lebih karakter. Misalnya, ketika Anda menekan a, aplikasi menerima a. Ketika Anda menekan Enter, aplikasi menerima karakter CR(alias ^M(diucapkan "control-emm"), alias nomor 13, alias \ratau \015). Kombinasi kunci yang terlibat Altbiasanya ditransmisikan sebagai karakter ESC( ^[alias alias \eatau \033) diikuti oleh urutan untuk kombinasi tombol atau kunci tanpa Alt. Tombol fungsi dan kombinasi tombol lainnya ditransmisikan sebagai urutan keluar yang dimulai dengan \e[atau \eO.

Urutan lolos tidak sepenuhnya standar, dan terminal biasanya mengabaikan atribut tertentu untuk kunci tertentu. Sebagai contoh, hyper dan super modifier biasanya diabaikan. Anda dapat melihat apa yang dikirim terminal Anda untuk kombinasi tombol dengan menekan Ctrl+ Vdiikuti oleh kombinasi tombol tersebut di prompt shell, atau C-qatau C-h cdiikuti oleh kombinasi tombol di Emacs.

Xterm memungkinkan Anda mengkonfigurasi urutan escape untuk setiap tombol melalui sumber X . Sebagian besar pengaturan membaca sumber daya dari ~/.Xresourcessaat X dimulai, dan Anda dapat memuat file secara manual xrdb -merge ~/.Xresources.

XTerm.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <Key> Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <Key> percent: string("\033[37;6~")

Sebuah konvensi umum menggunakan urutan melarikan diri dari bentuk ESC [ number1 ; number2 ~untuk tombol fungsi dengan pengubah. number1menunjukkan tombol fungsi ( 15untuk 24untuk F5ke F12- untuk alasan historis, F1 melalui F4memiliki escape sequence yang berbeda) dan number2menunjukkan modifikator ( 2untuk Shift, 5untuk Ctrl, 3untuk Meta, 8untuk Ctrl+ Meta, dan tambahkan 1 untuk + Shift- tidak, itu sangat tidak konsisten).

Anda harus menentukan pengubah Hyper dan Super melalui nomor mereka, sebagai Mod1melalui Mod5. Jalankan xmodmap -pmuntuk melihat pemetaan keyyms ke pengubah. Misalnya, jika Super_Lterikat ke Mod5, maka baris berikut (gunakan case persis ini) mendefinisikan pengikatan untuk Super+ Space:

    ~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\

Emacs menerjemahkan urutan pelarian ke dalam representasi kunci internal melalui input-decode-mapataulocal-function-key-map (atau function-key-mapsebelum Emacs 23).

(define-key local-function-key-map "\033[32;16~" [(super ?\ )])

Posting ini terbuat dari bahan daur ulang 80% dari Apakah ada terminal linux yang dapat menangani semua kombinasi tombol?

Gilles 'SO- berhenti menjadi jahat'
sumber
Ini adalah jawaban yang bagus, mencakup semua pengetahuan yang saya temukan sedikit tersebar di sekitar. Hanya satu pertanyaan: di mana Anda menemukan / bagaimana Anda memilih 32; 16 ~ dan mengapa itu tidak cocok dengan ikatan emacs di bawah ini? Saya mengerti asal usul angka tetapi saya ingin bertanya apakah Anda dapat menautkan ke tabel pemetaan di suatu tempat untuk number1 dan number2 .
Andrea Richiardi
@AndreaRichiardi Saya memilih 32 karena itu adalah nilai ASCII / Unicode untuk karakter spasi dan 16 karena binding standar menggunakan nilai hingga 8 untuk Ctrl, Meta dan Shift. 33 di bawah ini adalah salah ketik. Anda dapat memilih apa saja asalkan tidak bertentangan dengan kunci lain.
Gilles 'SANGAT berhenti menjadi jahat'
Saya harus mengikat urutan ke fungsi jadi saya untuk sementara terpecahkan (global-set-key "\033[32;16~" 'set-rectangular-region-anchor). Tetapi untuk melengkapi, saya mencoba di define-keyatas Anda , tetapi saya tidak bisa kemudian memicu (global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor). Itu hanya mencetak; 16 ~ di buffer. Akan lebih baik untuk mengikat urutan itu ke (kbd "s-SPC") sehingga saya memiliki urutan kunci terikat dan saya dapat menetapkan ulang ke perintah lain.
Andrea Richiardi
C-h lmengembalikan yang berikut ini dengan menekan s-SPC sekarang: ESC [ 3 2 ; 1 6 ~tetapi emacs masih mengeluh bahwaM-[ 32 is undefined
Andrea Richiardi
@AndreaRichiardi Setelah memperbaiki lebih banyak kesalahan ketik di bagian xterm (yang tampaknya telah Anda perbaiki sejak Emacs menerima urutan karakter yang dimaksud), itu berfungsi untuk saya. Apakah itu berfungsi jika Anda menggunakan function-key-mapbukan local-function-key-map? Ini mungkin masalah kapan Anda mengatur local-function-key-map, karena tergantung terminal.
Gilles 'SANGAT berhenti menjadi jahat'
0

Jika Anda ingin menginstal paket Emacs dan mengkonfigurasi terminal Anda, saya menulis paket Emacs yang dapat mengajarkan Emacs dan terminal bagaimana mengenali dengan benar semua tombol keyboard PC dan kombinasi tombol pengubah:

https://github.com/CyberShadow/term-keys

Pengkodean pengubah Super tidak diaktifkan secara default, tetapi paket dapat disesuaikan dan memungkinkan mengkonfigurasi kombinasi tombol pengubah mana yang dikodekan. Untuk mengaktifkan kombinasi kunci penyandian yang menyertakan Super modifier, setel term-keys/want-key-p-funcke fungsi yang mengembalikan tkapan (elt mods 3)tidak ada nihil (lihat implementasi default untuk penjelasan).

Vladimir Panteleev
sumber
0

Saya memiliki yang berikut ini di file init saya:

(global-set-key [f7] nil)
(global-set-key [f8] nil)
(define-key function-key-map [(f7)] 'event-apply-super-modifier)
(define-key function-key-map [(f8)] 'event-apply-hyper-modifier)

Ini memungkinkan saya untuk mengirim kunci super dan hyper menggunakan tombol fungsi.

Realraptor
sumber
-1

Jawaban singkat: gunakan Konsole.

Penjelasan:

  • Emacs ' local-function-key-mapmemiliki pemetaan entri C-x @ suntuk event-apply-super-modifier.
  • Konsolepeta Super(tombol logo Windows) ke urutan pelarian ^X@s(yang tampaknya tidak didokumentasikan di mana pun, saya menemukannya secara kebetulan). Anda dapat mencoba ini dengan membuka Konsoledan menekan mis Ctrl-v Win-o.
ubolonton
sumber
Terima kasih atas jawabannya tetapi mengubah istilahnya bukanlah solusi yang saya cari.
Andrea Richiardi