Control-Backspace (unix-kill-rubout) untuk readline?


7

Dalam readline(3)saya harus dapat memetakan Control-Backspace ke fungsi yang sama dengan Control-W (unix-kill-rubout). Terlepas dari apa yang saya masukkan ~/.inputrcsaya tidak bisa mendapatkan ini untuk diakui.

\C-\b: unix-kill-rubout

... misalnya tidak berfungsi. Bisakah saya memetakan Control-Backspace ke unix-kill-rubout di readline?

Jawaban:


4

Menambahkan

"\C-_": unix-word-rubout

untuk .inputrctampaknya bekerja untuk saya.

Ini C-_mewakili garis bawah kontrol. Inilah yang terminal saya kirim ketika menekan Ctrl+ Backspace.

Menekan Ctrl+ Vmaka kombinasi tombol akan menggemakan kodenya ke konsol. Bagi saya, menekan Ctrl+ Vlalu Ctrl+ Backspacemenggema ^_dengan ^artinya Ctrl. In .inputrc \C-adalah pengubah Ctrl jadi \C-_apa yang dibutuhkan di sini. Anda dapat menggunakan teknik ini untuk menentukan kombinasi tombol lain yang mungkin ingin Anda gunakan.


Bagaimana Anda memeriksa terminal yang mengirim / menerima ketika Anda menekan beberapa tombol? (misalnya dalam dempul)
NM

Sebaliknya, bagaimana Anda menerjemahkan ini ke emacs keybindings?
NM

3

Sebagai graywh menunjukkan backspace sering diwakili oleh ^?. Untuk mengikat ke ctrl+ bksp di .inputrcfile Anda, Anda mungkin perlu memodifikasi perpustakaan readline Anda. Tutorial ubuntu ini termasuk .keytabfile baru yang dapat menggantikan output default.

Di sistem saya ini izinkan saya menambahkan "\e[9;3~": backward-kill-wordke .inputrc.

Karena perilaku readline agak bervariasi berdasarkan sistem Anda, perlu dicatat bahwa saya menggunakan Konsole di Kubuntu.



2

Saya ragu terminal Anda akan mengirim kode khusus untuk ctrl-backspace. Backspace biasanya ctrl- ?, dan Anda tidak bisa menambahkan pengubah ctrl lain ke karakter ctrl.

Salah satu alternatif mungkin untuk meminta terminal Anda mengirimkan urutan pelarian khusus untuk Ctrl-Backspace, lalu memetakannya di konfigurasi readline Anda.


Backspace secara ^Hresmi. Hapus adalah ^?, tetapi terminal saya mengirimkan versi hapus ketika backspace ditekan. Inilah sebabnya ikatan \C-\btidak berhasil.
jiggunjer

@ jiggunjer Di ASCII, ya, tapi saya sedang berbicara tentang apa yang dilakukan tombol Backspace.
graywh


1

Untuk terminal linux, Anda dapat melakukannya dengan memodifikasi keymap yang Anda muat saat startup. Di ubuntu default saya memuat /etc/console-setup/cached.kmap.gz. Jika Anda menemukan entri yang sesuai dengan Ctrl-Backspace (mungkin Control-Delete sudah terdaftar sebagai Backspace) maka Anda dapat mengubahnya ke Control_w. Tidak yakin tentang emulator terminal, tetapi konsole (emulator terminal KDE default) memiliki pengaturan yang cukup bagus untuk keybinds. Semoga itu bisa membantu :)

Chris


0

Untuk pengguna Mac yang masuk ke beberapa sistem Linux:

Jika Anda tidak memiliki akses ke .inputrc atau file konfigurasi lainnya pada sistem yang sedang Anda akses dan ingin semuanya berfungsi secara universal, apa pun sistem yang Anda masuki, berikut adalah solusi GUI menggunakan Iterm2.

Saya menginstal Iterm2 pada mac saya dari baris perintah pada mac saya dengan menggunakan brew ( https://brew.sh )

brew cask install iterm2

Cara mengikat urutan tombol ke tombol kontrol di Iterm2

  1. Unduh aplikasi gratis "Kode Kunci" dari app store. Instal dari tautan di bawah dan kemudian buka.

  2. Tekan tanda Ctrl+ some keydalam hal ini saya akan menggunakan Ctrl+ w.

    Cara mendapatkan kode hex

  3. Kode heks di kotak merah adalah kode yang ingin kita kirim ke terminal

  4. Sekarang petakan urutan kunci Anda di Iterm2 dengan membukanya dari folder Applications-> Preferences-> Keys -> +.

Cara memetakan perintah ke kode hex

  1. Ini sekarang akan memetakan opsi + ← hapus ke Ctrl+ wdi terminal, tetapi Anda dapat menggunakannya untuk memetakan kunci apa saja ke yang lain. Saya tahu Ctrl+ wadalah contoh buruk untuk Emacs karena tidak mendukung Ctrl+ wtetapi Anda dapat menggunakan metodologi ini untuk pintasan yang kompatibel dengan Emacs.
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.