Bagaimana saya bisa memetakan tombol shift kiri dan kanan secara individual?

10

Pertama, maafkan ketidaktahuan saya tentang X dan XKB; Saya sudah mencoba meretas bersama solusi dengan harapan dapat mencapai apa yang saya inginkan tanpa memerlukan pemahaman yang terperinci tentang itu.

Saya mencoba membuat peta keyboard XKB pada Ubuntu 12.04 yang memungkinkan saya untuk menentukan mana dari dua tombol shift yang merupakan pengubah Level2. Secara khusus, 4kunci seharusnya hanya menghasilkan $ketika pergeseran yang tepat diadakan, bukan yang kiri.

Bacaan saya sejauh ini:

Saya telah mencoba mendefinisikan jenis kustom, dan kemudian merujuknya secara eksplisit di peta simbol:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Saya kemudian memilih peta dengan GUI Keyboard Layout Ubuntu.

Ini jelas menonaktifkan keyboard alfanumerik selain dari 4tombol, tetapi tanda dolar masih bisa diketik dengan tombol shift.

Saya sadar menulis pertanyaan besar dengan banyak informasi yang tidak berguna jadi saya akan berhenti di sini; tolong minta apa pun yang saya lewatkan.

Ada ide?

mbfisher
sumber

Jawaban:

2

Saya tidak tahu apakah itu solusi yang Anda inginkan tetapi satu kemungkinan untuk menonaktifkan kunci shift kiri adalah menggunakan xmodmap. Buat file ~/.Xmodmapdengan konten

clear shift
add shift = Shift_R

dan lari xmodmap ~/.Xmodmap.


Lihat komentar / obrolan:

Anda mungkin mengalami masalah jika ada beberapa modifikasi lain yang dibuat untuk xkbmap Anda oleh beberapa program lain sehingga pengaturan ulang ke xkbmap default dengan sesuatu seperti itu setxkbmap usmungkin diperlukan.

Jika Anda ingin membuat beberapa tombol merespons hanya satu tombol shift, Anda dapat membuat tata letak keyboard saat xmodmap -pke > .Xmodmapini dengan ini memberi Anda .XmodmapDaftar semua kunci Anda dalam bentuk keycode XX = functions. Dalam tugas ini setiap kode kunci dapat memiliki beberapa fungsi di sisi kanan. Masing-masing sesuai dengan pengubah berbeda + tombol itu. Anda dapat menyisipkan hapus + tambah dari atas dan menambahkan sesuatu seperti add mod5 = Shift_L. Tombol shift kanan akan sesuai dengan mod2 sedangkan yang kiri adalah mod5. Anda dapat melanjutkan dan memindahkan fungsi mod2 dari tombol yang ingin Anda panggil dengan tombol shift kiri ke mod5 hanya dengan menyisipkan NoSymboldan spasi sampai Anda mencapai kolom kanan ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N).

Trudbert
sumber
Senang untuk membantu. Apa itu bekerja?
Trudbert
Maaf, hari yang sibuk. Saya masih memiliki kedua tombol shift yang tersedia setelah menjalankan xmodmap, haruskah saya perlu melakukan hal lain untuk mendapatkan perubahan?
mbfisher
Coba xmodmap -e "hapus shift" setelah itu Anda tidak akan memiliki kunci shift yang tersedia jika itu bekerja dengan baik harusnya juga
Trudbert
Tidak, masih punya tombol shift. # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher
aneh. Tidak ada pesan kesalahan? clear harus menghapus semua yang berhubungan dengan modifier sehingga tidak ada yang tersisa. Saya akan mendapatkan tangan saya pada sistem linux dalam satu jam atau lebih dan melihat ini lagi.
Trudbert
2

Inilah yang akhirnya berhasil! Saya menggunakan xmodmapdan ~/.Xmodmapfile daripada konfigurasi xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2 baris komentar (menatap dengan !) menunjukkan judul kolom sebelum dan sesudah perubahan saya. Ini memungkinkan saya untuk menentukan col 2 sebagai Shift_L dan col 3 sebagai Shift_R, karena saya telah memetakan shift_R sebagai Mode_switch.

Perubahan dilakukan dengan menjalankan:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usmengatur peta AS default sehingga Anda bekerja dari yang bersih, dan xmodmapmenambahkan perubahan khusus untuk itu.

Ketika menerapkan !, @, #, $dan %karakter hanya dapat diketik dengan tombol shift kanan, dan ^, &, *, (dan )hanya dapat diketik dengan tombol shift kiri.

Saya sekarang dapat melanjutkan dengan memetakan semua tombol di sisi kiri keyboard untuk hanya dimodifikasi oleh tombol shift kanan (yaitu karakter aplhabetical dan modifikasi huruf besar mereka) dan sebaliknya; solusi ini berarti saya hanya perlu memetakan kembali sisi kiri.

Tautan bermanfaat lain yang ditemukan di sepanjang jalan:

Terima kasih banyak kepada @Trudbert yang telah memberikan saya sebagian besar jawaban!

mbfisher
sumber