Jika Anda ingin mengikat hanya beberapa urutan dari bentuk Super + x, Super + c, Super + v ke urutan lain seperti Ctrl + x, Ctrl + c, Ctrl + v, misalnya sehingga (seperti OP yang diinginkan) ini urutan Super-key tertentu umumnya akan memetakan untuk memotong & menempel tanpa mempengaruhi penggunaan lain dari kunci Super pada sistem Anda, dimungkinkan hanya menggunakan ekstensi XKB. Prosedur di bawah ini menguraikan langkah-langkah dan memberikan dua contoh berbeda dari detail untuk dua pengaturan keyboard awal yang berbeda; semoga itu akan memberikan informasi yang cukup untuk beradaptasi dengan sistem Anda. Ini mengasumsikan Anda merasa nyaman dengan membuat dan mengedit file di sistem Anda, termasuk yang ada di lokasi sistem seperti /usr/share/X11/xkb
.
Putuskan di mana Anda ingin pohon konfigurasi XKB Anda berada. Pertama temukan satu sistem. Biasanya di / usr / share / X11 / xkb, dan saya tidak yakin bagaimana menemukannya jika tidak ada; Anda bisa mencari direktori di sistem Anda dengan nama "xkb". Bagaimanapun, setelah Anda menemukannya, Anda dapat memodifikasi sistem satu di tempat, atau Anda dapat menggunakan direktori pilihan Anda. Keuntungan menggunakan direktori sistem adalah Anda dapat lebih mudah melakukan perubahan, tetapi kekurangannya adalah bahwa pembaruan sistem di masa depan mungkin akan menimpa perubahan Anda (Anda telah diperingatkan). Bagaimanapun, semua nama file yang disebutkan selanjutnya adalah relatif terhadap direktori ini, yang akan saya rujuk ketika dibutuhkan sebagai $ XKBLOCAL $, dan semua perintah menganggap itu adalah direktori Anda saat ini.
Tentukan "tipe" XKB apa dari kunci x, c, v saat ini. Cara termudah untuk melakukan ini adalah melalui perintah xkbcomp -a $DISPLAY - | grep -C 6 c,
(perhatikan koma sengaja dimasukkan dalam pola). Dalam pengaturan contoh pertama saya, ini menghasilkan:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
sedangkan dalam contoh setup saya yang lain ini menghasilkan
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
Hasilnya adalah bahwa dalam contoh pertama, kunci yang relevan bertipe "ALPHABETIC" sedangkan dalam contoh kedua mereka bertipe "FOUR_LEVEL". Bergantung pada pengaturan keyboard Anda, Anda mungkin menemukan bahwa mereka semua dari jenis lain. Dalam apa yang berikut, tipe akan disebut sebagai $ TYPE $, yang harus Anda ganti dengan string ALPHABETIC yang sebenarnya atau apa pun dalam perintah di bawah ini.
Temukan definisi $ TYPE $ dan salin ke file baru di direktori $ / types $ XKBLOCAL. Berikut adalah perintah yang tidak hanya itu: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Nama file "cutpaste" yang saya pilih adalah sewenang-wenang, gunakan nama apa pun yang Anda suka, tetapi perhatikan bahwa Anda harus merujuk file ini secara konsisten pada langkah-langkah selanjutnya. Pada pengaturan pertama, file ini mendapatkan konten
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
dan dalam contoh lain ia mendapatkan isinya
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Edit tipe file / cutpaste untuk melakukan dua hal: tambahkan mukadimah dan mukadimah yang membuatnya menjadi klausa XKB yang tepat, dan ubah nama tipe dan definisi tipe untuk menambahkan satu tingkat lagi yang dihasilkan oleh pengubah yang sesuai dengan Super. Anda harus memeriksa apa yang pengubah pada sistem Anda, kemungkinan Mod4 seperti yang digunakan di bawah ini. Modifikasi yang diperlukan harus jelas dari dua contoh versi final dari tipe / cutpaste, yaitu:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
dan
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Salin definisi simbol kunci yang dihasilkan oleh grep pada langkah kedua menjadi simbol file / cutpaste baru kedua, dan tambahkan basa-basi dan postamble yang serupa, dan modifikasi definisi untuk menggunakan tipe baru dan tambahkan tindakan ke definisi untuk menangani kunci yang diinginkan diproduksi oleh versi Super. Hasil dari ini dalam dua contoh kami adalah:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
dan
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Perhatikan bahwa dalam contoh kedua saya memeras beberapa spasi putih (tidak signifikan) juga untuk menjaga panjang garis di bawah sedikit kontrol.
Temukan nama aturan yang ditetapkan bahwa XKB sedang menggunakan. Itu mudah, ini ditunjukkan pada hasil setxkbmap -query
. Dalam kasus saya, itu "evdev".
Salin versi sistem aturan / evdev (atau apa pun nama aturan Anda set) adalah $ XKBLOCAL $ / rules / evdev dan tambahkan aturan yang menunjuk ke opsi yang telah kami buat. Anda memiliki dua pilihan di sini: Anda dapat menyalin semua evdev atau hanya bagian-bagian yang menyebutkan model keyboard, tata letak, varian, dan opsi yang sebenarnya Anda gunakan. Tentu saja, jika Anda memodifikasi file sistem di tempat, Anda tidak perlu melakukan penyalinan, cukup mengedit.
Dalam hal ini, apa yang ditambahkan adalah identik terlepas dari pengaturan keyboard awal, jadi hanya ada satu contoh. Anda menemukan bagian dari file aturan yang dimulai dengan ! option = symbols
dan menambahkan baris cutpaste:super = +cutpaste
ke bagian itu, dan Anda juga menemukan bagian dari file aturan yang dimulai dengan ! option = types
dan baris cutpaste:super = +cutpaste
ke bagian itu juga.
Salin versi sistem dari evdev.lst dan tambahkan baris untuk opsi baru Anda. Perhatikan bahwa nama file ini hanya sesuai dengan nama file aturan dengan .lst ditambahkan. Seperti pada langkah sebelumnya, Anda bisa menyalin seluruh file atau hanya bagian yang dirujuk oleh model, tata letak, varian, dan opsi yang Anda gunakan. Anda hanya perlu menemukan bagian dari file ini yang dimulai dengan ! option
dan menambahkan baris seperti ini: cutpaste:super Add super equivalents of cut and paste operations
ke bagian itu.
OK, sekarang semua file konfigurasi sudah ada. Jika Anda memodifikasi file sistem, sekarang Anda dapat memanggil opsi baru dengan setxkbmap -option cutpaste:super
. Di sisi lain, jika tidak, Anda harus membiarkan setxkbmap tahu di mana direktori $ XKBLOCAL $ Anda. Yang lebih parah, server tidak tahu di mana direktori itu berada, dan setxkbmap tidak (atau mungkin tidak bisa, karena pada akhirnya server mungkin berjalan di komputer lain) mengatakannya. Jadi, Anda harus mem-pipe output dari setxkbmap ke xkbcomp, dan juga memberi tahu perintah itu di mana direktori $ XKBLOCAL Anda berada. Oleh karena itu, baris perintah penuh setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Semoga ini membantu / menarik bagi seseorang, karena dokumentasi / referensi XKB definitif yang baik jarang. Satu referensi yang sangat membantu adalah http://madduck.net/docs/extending-xkb/ .