Saya tidak suka melompat di antara keyboard utama dan tombol gerakan, jadi saya menambahkan yang berikut ini ke file layout xkb saya.
hidden partial xkb_symbols "movement"
{
key <AD08> { [ NoSymbol, NoSymbol, Up, Up ] };
key <AC08> { [ NoSymbol, NoSymbol, Down, Down ] };
key <AC07> { [ NoSymbol, NoSymbol, Left, Left ] };
key <AC09> { [ NoSymbol, NoSymbol, Right, Right ] };
key <AD09> { [ NoSymbol, NoSymbol, Prior, Prior ] };
key <AB09> { [ NoSymbol, NoSymbol, Next, Next ] };
key <AB07> { [ NoSymbol, NoSymbol, Home, Home ] };
key <AB08> { [ NoSymbol, NoSymbol, End, End ] };
key <AC06> { [ NoSymbol, NoSymbol, Delete, Delete ] };
}
Lalu saya memasukkan ini ke tata letak di titik kemudian dalam file. Sekarang saya harus memiliki tombol kursor yang dapat diakses melalui AltGr + j, k, l, i (atau h, t, n, c karena saya menggunakan dvorak) dll. Ini berfungsi dalam banyak kasus (seperti Firefox, urxvt, Eclipse, area teks utama LyX) tetapi beberapa program tidak melakukan apa pun ketika saya mencoba, katakanlah, memindahkan kursor menggunakan "pintasan" ini (seperti dialog NetBeans dan LyX).
Jadi, adakah cara untuk membuat program-program lain ini juga menghargai keinginan saya? Dan mengapa mereka tidak bekerja sejak awal? Saya tidak menggunakan DE; hanya WM yang mengagumkan.
Edit:
- Berikut ini adalah file layout keyboard yang lengkap namun disederhanakan. Saya memiliki ini
/usr/share/X11/xkb/symbols/nonpop
dan saya memuatnyasetxkbmap nonpop
. - Saya perhatikan bahwa di MonoDevelop bergerak di sekitar pekerjaan tetapi memilih tidak. Yaitu, jika saya menekan Shift + Kanan maka teks dipilih seperti biasa, tetapi jika saya menekan AltGr + Shift + n maka kursor hanya bergerak tanpa memilih. Sebagai contoh di Firefox kedua cara dapat digunakan untuk memilih.
- Di sini pada akhirnya mereka berbicara tentang overlay yang terlihat seperti sesuatu yang mungkin bisa menjadi solusi, tetapi saya belum menemukan cara menggunakannya.
sumber
Jawaban:
Kenapa mereka tidak bekerja?
Menurut artikel ArchWiki yang Anda sebutkan:
Server X mendapatkan kode kunci dari perangkat input dan mengubahnya menjadi status dan kunci .
state adalah bitmask dari pengubah X (Ctrl / Shift / etc).
keysym adalah (menurut
/usr/include/X11/keysymdef.h
) bilangan bulat ituSetiap karakter dicetak memiliki Keysym sendiri, seperti
plus
,a
,A
, atauCyrillic_a
, tetapi kunci lain juga menghasilkan Keysyms mereka, sepertiShift_L
,Left
atauF1
.Aplikasi dalam acara pers / pelepasan kunci mendapatkan semua informasi ini.
Beberapa aplikasi melacak keyyms seperti
Control_L
sendiri, yang lain hanya mencari bit pengubah di negara bagian .Jadi apa yang terjadi, ketika Anda menekan AltGr+ j:
Anda menekan AltGr. Aplikasi mendapat acara KeyPressed dengan kode kunci 108 (
<RALT>
) dan keysym 0xfe03 (ISO_Level3_Shift
), menyatakan 0.Anda menekan j(yang memetakan ke "h" di dvorak tanpa pengubah). Aplikasi mendapat acara KeyPressed dengan kode kunci 44 (
<AC07>
), keysym 0xff51 (Left
) dan status 0x80 (modifier Mod5 aktif).Anda lepaskan j. Aplikasi mendapat acara KeyRelease untuk kunci
<AC07>
/Left
dengan parameter yang sama.Kemudian lepaskan AltGr- acara KeyRelease untuk AltGr. (Omong-omong, keadaan di sini masih 0x80, tapi itu tidak masalah.)
Ini bisa dilihat jika Anda menjalankan
xev
utilitas.Jadi, itu semua berarti bahwa, meskipun aplikasi mendapatkan kode keysym yang sama (
Left
) seperti dari tombol normal<LEFT>
, ia juga mendapatkan kode keysym dan status pengubah dari AltGr. Kemungkinan besar, program-program yang tidak berfungsi, menonton modifikator dan tidak ingin bekerja ketika beberapa aktif.Cara membuatnya bekerja
Tampaknya, kami tidak dapat mengubah setiap program untuk tidak mencari pengubah. Maka satu-satunya pilihan untuk keluar dari situasi ini adalah untuk tidak menghasilkan kunci pengubah dan bit negara.
1. Kelompok terpisah
Satu-satunya metode yang datang ke pikiran saya adalah: mendefinisikan kunci gerakan kursor dalam kelompok dan saklar yang terpisah, dengan tekan tombol terpisah, untuk kelompok yang sebelum menekan tombol j, k, l, i(
h
,t
,n
,c
) (kelompok menempel adalah metode yang disukai untuk satu kali perubahan grup, seperti yang saya mengerti).Sebagai contoh:
Sekarang, jika Anda pertama kali menekan AltGrdan kemudian (secara terpisah) salah satu tombol gerakan, ini akan berfungsi.
Namun, ini tidak terlalu berguna, lebih tepat
LockGroup
daripada kait dan tekan AltGr sebelum dan sesudah beralih kelompok. Bahkan mungkin lebih baik untukSetGroup
- maka AltGr akan memilih grup itu hanya ketika sedang ditekan, tetapi yang mengungkapkan ke aplikasi keysym AltGr (ISO_Group_Shift
/ISO_Group_Latch
/ apa pun yang didefinisikan) (tetapi negara pengubah tetap bersih).Tapi ... ada juga kemungkinan bahwa aplikasi tersebut juga membaca kode kunci (kode dari kunci asli). Maka akan terlihat kunci kursor "palsu".
2. Hamparan
Solusi "tingkat rendah" yang lebih banyak adalah overlay (seperti yang dijelaskan artikel yang sama ).
Overlay berarti bahwa beberapa (keyboard nyata) kunci mengembalikan kode kunci tombol lain. Server X mengubah kode kunci dan menghitung status pengubah dan kode kunci untuk kode kunci baru tersebut, sehingga aplikasi tidak akan memperhatikan perubahan tersebut.
Namun overlay sangat terbatas:
Adapun sisanya, implementasi sangat mirip dengan metode dengan grup terpisah:
SetControls
berarti mengubah bit kontrol saat tombol ditekan dan mengembalikannya pada rilis kunci. Seharusnya ada fungsi yang serupaLatchControls
, tetapixkbcomp
memberi sayapada kompilasi keymap.
(Ngomong-ngomong, saya juga menggunakan dvorak dan juga telah memetakan kembali beberapa tombol gerakan ke tingkat tinggi dari tombol alfabet. Dan juga menemukan beberapa fungsi yang rusak (pemilihan catatan Xfce dan pergantian desktop dengan Ctrl-Alt-Kiri / Kanan). Terima kasih kepada pertanyaan Anda dan jawaban ini, sekarang saya tahu apa itu overlay :).)
sumber
Overlay1_Enable
. Saya memiliki gejala yang sama seperti di sini: github.com/GalliumOS/galliumos-distro/issues/362Saya memiliki masalah yang sama. Sangat menyakitkan.
Jadi judulnya adalah "Bagaimana membuat semua aplikasi menghargai tata letak xkb yang dimodifikasi?" Yah, saya pikir satu-satunya cara adalah memperbaiki semua program yang melakukannya secara tidak benar. Ayo lakukan itu!
Nah, setelah melaporkan bug itu di NetBeans ( Pembaruan: Saya sudah mencoba versi terbaru dan berfungsi sekarang! ), Saya pikir saya akan terus melaporkan bug ini untuk setiap aplikasi. Aplikasi berikutnya dalam daftar adalah Speedcrunch .
Namun, setelah mencari laporan bug serupa saya menemukan masalah ini . Orang lain mengalami masalah yang sama, hebat!
Setelah membaca komentar, Anda akan memahami bahwa bug ini harus ada di semua aplikasi QT. Berikut ini adalah laporan bug QT . Tidak diselesaikan, tetapi sepertinya masalah ini diselesaikan di Qt5 .
Namun, jika Anda melihat komentar, ada solusinya! Inilah cara kerjanya. Jika Anda melakukan ini:
Maka Anda dapat mengubahnya ke ini:
Dan itu benar-benar akan menyelesaikan masalah untuk beberapa aplikasi! Misalnya, Speedcrunch sekarang berfungsi untuk saya! Yay!
Ringkasan
Saat ini aplikasi apa pun harus berfungsi dengan benar. Jika tidak, maka Anda harus menggunakannya
type[Group1]="ONE_LEVEL"
. Jika sudah memilikinya, maka Anda harus memperbarui perangkat lunak Anda. Jika masih tidak berfungsi, maka itu khusus untuk aplikasi dan Anda harus mengirimkan laporan bug.UPDATE (2017-09-23)
Sampai hari ini, semua aplikasi menghargai tata letak keyboard saya. Semua kecuali satu.
Serius, penanganan keyboard di Chromium adalah sampah . Ada beberapa masalah dengan itu:
foo
,bar
dan beberapa kunci tidak Backspace difoo
, maka akan tetap bekerja sebagai Backspace dibar
bahkan jika didefinisikan ulang di sana.Selama bertahun-tahun saya mengabaikan masalah ini dengan tidak menggunakan kromium. Namun, saat ini banyak hal yang cenderung menggunakan Electron , yang sayangnya dibangun di atas Chromium.
Cara yang tepat untuk menyelesaikan ini adalah dengan mengirimkan laporan bug di Chromium dan berharap yang terbaik. Saya tidak tahu berapa lama waktu yang dibutuhkan untuk menyelesaikan masalah yang hanya memengaruhi beberapa pengguna ... tapi itu sepertinya satu-satunya jalan keluar. Masalah dengan ini adalah bahwa kromium sebenarnya berfungsi dengan baik dengan
neo(de)
tata letak. Tata letak Neo memiliki tombol panah pada level5, tapi saya tidak bisa membuatnya berfungsi di tata letak khusus saya.Laporan bug yang masih terbuka:
sumber
Cara membuatnya bekerja - Solusi 3
Menggunakan Level tambahan dan Aksi RedirectKey
Solusi berikut menggunakan tombol Alt kiri untuk memberikan kunci kursor pada jkli, Home / End / PageUp / PageDown pada uopö dan Delete pada Backspace.
Tombol Alt kiri tetap dapat digunakan untuk keperluan lain untuk semua kunci lainnya (seperti untuk menu aplikasi). Alt kiri (Mod1) dihapus dari keadaan pengubah ketika blok kursor digunakan sehingga aplikasi tidak dapat melihatnya.
sumber