Bagaimana cara memetakan CTRL + A, CTRL + E berfungsi sebagai Rumah, Akhiri seluruh sistem?

5

Apakah ada cara untuk memetakan CTRL + A dan CTRL + E untuk bekerja di seluruh sistem sebagai pindah ke awal baris, dan pindah ke akhir baris sesuai?

Yaitu saya ingin pintasan ini berfungsi dengan lancar di aplikasi apa pun, tidak hanya di terminal (misalnya di OSX).

Sistem utama saya adalah Ubuntu dengan desktop Unity, tetapi akan lebih baik untuk memiliki solusi universal yang akan menjadi desktop-agnostik, atau setidaknya didukung di Gnome, XFCE dan LXDE.

ccpizza
sumber
Ctrl-A juga digunakan oleh screen, yang saya gunakan (kecuali tmuxtersedia). Jadi, Anda harus mengetikkan Ctrl-A dua kali untuk mendapatkannya. Bukankah klik mouse lebih cepat untuk mencapai posisi yang diinginkan.
ott--
xmodmap tidak akan melakukan apa yang diminta (dan tautan yang disarankan tidak menjawab pertanyaan khusus ini).
Thomas Dickey
@MariusMatutiae: xmodmaptidak dapat melakukan kombinasi tombol, hanya dapat digunakan untuk memetakan kunci tunggal. @ott: tidak, mouse perlu melihat layar dan menunjuk ke tempat yang tepat yang merupakan tekanan ekstra baik untuk mata dan jari.
ccpizza
Dengan asumsi bahwa Anda menggunakan jendela terminal, lihat utilitas stty.
fpmurphy
@ fpmurphy1: di terminal CTRL + A dan CTRL + E sudah berfungsi sebagai Home / End, dengan asumsi shell default (bash) digunakan.
ccpizza

Jawaban:

4

xmodmapmungkin tampaknya memberikan jawaban, tetapi tidak, karena kode kunci yang dimanipulasi adalah kunci yang ada pada keyboard, bukan kunci yang dimodifikasi . A controlAadalah kunci yang dimodifikasi.

xmodmap hanya dapat menetapkan kembali kode kunci yang ada atau (nama mereka) kunci, seperti yang tercantum dalam halaman manualnya:

keycode NUMBER = KEYSYMNAME ... = KEYSYMNAME ... KEYSYMNAME = KEYSYMNAME ...
keycode any
keysym

Untuk melihat kode kunci yang xmodmaptahu tentang, jalankan

xmodmap -pk

yang menunjukkan sesuatu seperti ini (disingkat kejelasan):

There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.

    KeyCode Keysym (Keysym) ...
    Value   Value   (Name)  ...

      8     0x0061 (a)      0x0041 (A)      0x00e5 (aring)  0x00c5 (Aring)  
      9     0x0073 (s)      0x0053 (S)      0x00df (ssharp) 0x00cd (Iacute) 
     10     0x0064 (d)      0x0044 (D)      0x08ef (partialderivative)      0x00ce (Icircumflex)    
     11     0x0066 (f)      0x0046 (F)      0x08f6 (function)       0x00cf (Idiaeresis)     
     12     0x0068 (h)      0x0048 (H)      0x01ff (abovedot)       0x00d3 (Oacute) 
     13     0x0067 (g)      0x0047 (G)      0x00a9 (copyright)      0x01bd (doubleacute)    
     14     0x007a (z)      0x005a (Z)      0x07d9 (Greek_OMEGA)    0x00b8 (cedilla)
     ...

xev menunjukkan apa yang sebenarnya terjadi:

KeyPress event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364614, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XmbLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364773, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

Pengubah kontrol adalah 0x4di negara bagian; the XLookupString(salah satu dari beberapa fungsi terkait untuk mengkombinasikan peristiwa-peristiwa penting) mentransformasikan keyym untuk "a" menjadi ^A(control / A).

Karena tidak ada keysym untuk salah satu tombol kontrol, menetapkan ulang kode kunci menggunakan xmodmaptidak akan mungkin untuk masalah OP.

Untuk mengatasi masalah OP, orang harus memiliki cara untuk memberi tahu sistem operasi untuk (pada dasarnya) menolak untuk memberikan acara terpisah untuk controldan A- tetapi Linux dan X tidak bekerja seperti itu. Membatasi ruang lingkup untuk aplikasi tertentu (xterm) atau serangkaian aplikasi (program berbasis Gtk), orang mungkin membahasnya secara terpisah. Tetapi solusi yang berlaku di seluruh sistem sepertinya tidak bisa dilakukan.

Thomas Dickey
sumber
Pengguna dapat menggunakan xev untuk menentukan acara apa yang dipicu oleh penekanan tombol
steve
Saya menerima ini sebagai jawaban yang pada dasarnya mengatakan bahwa imo mana yang merupakan jawaban yang valid.
ccpizza
Ini mengecewakan :(
forgetso