Mengikat Super ke Ctrl
Bagaimana dengan mengikat Windows/Logo/Super
kiri Anda kunci untuk bertindak sebagai Ctrl
lainnya kunci?
Anda dapat mencapainya dengan perintah xmodmap berikut:
remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L
Dengan asumsi Anda menyimpan baris di atas sebagai super_as_ctrl.xmodmap
Anda dapat menguji efeknya dengan mengeksekusi
xmodmap super_as_ctrl.xmodmap
Untuk membuat perubahan permanen (bertahan login ulang/reboot) ganti nama file menjadi .Xmodmap
di folder rumah Anda.
(Hal di atas telah diuji pada sistem live Ubuntu 11.10, tetapi seharusnya sama untuk distribusi Linux lainnya)
Menyesuaikan pintasan Salin/Tempel untuk program terminal Anda
Setelah mengikat Super
ke Ctrl
Anda sekarang dapat menggunakan Super-C
untuk menyalin hampir di mana-mana. Satu-satunya pengecualian umum adalah program terminal Anda. Namun Anda dapat mendefinisikan ulang pintasan di sana.
Saya menemukan bahwa bahkan gnome-terminal
memiliki opsi ini sekarang (saya tidak punya sampai saya terbiasa dengan Ctrl-Shift-C
omong-omong). Jika Anda menggunakan yang itu, buka Edit / Keyboard Shortcuts...
di menu dan tetapkan Ctrl-C
untuk menyalin dan Ctrl-V
untuk menempel. Harus serupa untuk konsole
dll.
Dan jangan khawatir, Anda tidak akan kehilangan kemampuan untuk menghentikan program menggunakan pintasan. Setelah memutar ulang pintasan penyalinan untuk terminal, Anda cukup menggunakan Ctrl-Shift-C
seperti Anda menggunakan Ctrl-C
sebelum. Terminal tidak membedakan di sini apakah Shift ditekan atau tidak. Dan shortcut tersebut tidak tertangkap lagi untuk di copy. Alternatifnya, pasang kembali penghentian ke pintasan lain, seperti yang disarankan MountainX dalam jawabannya.
XF86Copy dll. tidak berfungsi
Mengenai simbol kunci untuk salin dan tempel:Ternyata tidak berpengaruh. Saya mengujinya dengan cepat dengan menugaskan tindakan penyalinan ke Shift-ScrollLock (itu tidak digunakan dan saya ingin menguji dengan kunci bukan pengubah):
xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'
Menekannya tidak berpengaruh, tidak dengan XF86AudioMute. Namun itu berhasil saat menetapkan huruf 'a'. Jadi saya kira ada masalah khusus dengan simbol kunci khusus XF86 ini.
Jika Anda ingin mengikat hanya beberapa urutan bentuk Super+x, Super+c, Super+v ke urutan lain seperti Ctrl+x, Ctrl+c, Ctrl+v, misalnya sehingga (seperti yang diinginkan OP) ini urutan Super-key tertentu umumnya akan dipetakan untuk memotong &menempel tanpa memengaruhi penggunaan kunci Super lainnya di sistem Anda, dimungkinkan hanya dengan menggunakan ekstensi XKB. Prosedur di bawah menguraikan langkah-langkah dan memberikan dua contoh detail yang berbeda untuk dua pengaturan keyboard awal yang berbeda; mudah-mudahan 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 sistemnya. Biasanya ada di /usr/share/X11/xkb, dan saya tidak yakin bagaimana menemukannya jika tidak ada; Anda bisa mencari sistem Anda untuk direktori bernama "xkb". Bagaimanapun, setelah Anda menemukannya, Anda dapat memodifikasi sistem di tempat, atau Anda dapat menggunakan direktori pilihan Anda. Keuntungan menggunakan direktori sistem adalah Anda dapat dengan lebih mudah meminta perubahan Anda, tetapi kekurangannya adalah pembaruan sistem di masa mendatang mungkin akan menimpa perubahan Anda (Anda telah diperingatkan). Bagaimanapun, semua nama file yang disebutkan selanjutnya adalah relatif terhadap direktori ini, yang akan saya rujuk bila diperlukan sebagai $XKBLOCAL$, dan semua perintah mengasumsikan bahwa itu adalah direktori Anda saat ini.
-
Tentukan apa "tipe" kunci XKB dari kunci x,c,v saat ini. Cara termudah untuk melakukannya adalah melalui perintah
xkbcomp -a $DISPLAY - | grep -C 6 c,
(perhatikan koma sengaja disertakan dalam pola). Dalam contoh penyiapan 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 pengaturan 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 pada contoh pertama, kunci yang relevan bertipe "ALPHABETIC" sedangkan pada contoh kedua bertipe "FOUR_LEVEL". Bergantung pada pengaturan keyboard Anda, Anda mungkin menemukan bahwa itu adalah jenis yang sama sekali berbeda. Berikut ini, jenisnya akan dirujuk sebagai $TYPE$, yang harus Anda ganti dengan string sebenarnya ALPHABETIK atau apa pun dalam perintah di bawah ini.
-
Temukan definisi $TYPE$ dan salin ke file baru di direktori $XKBLOCAL$/types. Inilah perintah yang melakukan hal itu:
xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Nama file "cutpaste" yang saya pilih bebas, gunakan nama apa pun yang Anda suka, tetapi perhatikan bahwa Anda harus merujuk ke file ini secara konsisten di langkah selanjutnya. Pada penyiapan pertama, file ini mendapatkan isinyatype "ALPHABETIC" { modifiers= Shift+Lock; map[Shift]= Level2; map[Lock]= Level2; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; };
dan dalam contoh lain 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 preamble dan postamble yang membuatnya menjadi klausa XKB yang tepat, dan ubah nama tipe dan definisi tipe untuk menambahkan satu level lagi yang dihasilkan oleh pengubah yang sesuai dengan Super. Anda harus memeriksa pengubah apa yang ada di sistem Anda, kemungkinan Mod4 seperti yang digunakan di bawah ini. Modifikasi yang diperlukan harus terlihat 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 ke simbol/cutpaste file baru kedua, dan tambahkan pembukaan dan postamble serupa, dan modifikasi definisi untuk menggunakan tipe baru dan tambahkan tindakan ke definisi untuk menangani kunci yang diinginkan diproduksi oleh versi Super. Hasil 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 (tidak signifikan) juga untuk menjaga panjang garis di bawah sedikit kontrol.
-
Temukan nama set aturan yang saat ini digunakan XKB. Itu mudah, ditunjukkan pada hasil
setxkbmap -query
. Dalam kasus saya, itu adalah "evdev". -
Salin versi sistem dari rules/evdev (atau apa pun nama set aturan Anda) ke $XKBLOCAL$/rules/evdev dan tambahkan aturan yang menunjuk ke opsi yang telah kita buat. Anda memiliki dua pilihan di sini:Anda dapat menyalin semua evdev atau hanya bagian yang menyebutkan model keyboard, tata letak, varian, dan opsi yang sebenarnya Anda gunakan. Tentu saja, jika Anda memodifikasi file sistem yang ada, Anda tidak perlu menyalin apa pun, hanya mengedit.
Dalam hal ini, yang ditambahkan adalah identik terlepas dari penyiapan keyboard awal, jadi hanya ada satu contoh. Anda menemukan bagian dari file aturan yang dimulai dengan
! option = symbols
dan tambahkan bariscutpaste:super = +cutpaste
ke bagian itu, dan Anda juga menemukan bagian dari file aturan yang dimulai dengan! option = types
dan bariscutpaste:super = +cutpaste
ke bagian itu juga. -
Salin versi sistem 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 dapat menyalin seluruh file atau hanya sebagian yang direferensikan oleh model, tata letak, varian, dan opsi yang Anda gunakan. Anda hanya perlu menemukan bagian dari file ini yang dimulai dengan
! option
dan tambahkan baris seperti ini:cutpaste:super Add super equivalents of cut and paste operations
ke bagian itu. -
Oke, sekarang semua file konfigurasi sudah ada. Jika Anda memodifikasi file sistem, sekarang Anda dapat mengaktifkan opsi baru dengan
setxkbmap -option cutpaste:super
. Di sisi lain, jika tidak, Anda harus memberi tahu setxkbmap di mana direktori $XKBLOCAL$ Anda berada. Yang lebih buruk, server juga tidak tahu di mana direktori itu berada, dan setxkbmap tidak (atau mungkin tidak bisa, karena pada akhirnya server mungkin berjalan di komputer lain) memberitahukannya. 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 lengkapnya adalahsetxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Mudah-mudahan ini bisa membantu/menarik bagi seseorang, karena dokumentasi/referensi XKB definitif yang bagus masih langka. Salah satu referensi yang sangat membantu adalah http://madduck.net/docs/extending-xkb/.
Inilah yang saya lakukan. Ini bukan solusi akhir, tetapi saya mencoba mencapai solusi akhir dan tidak dapat mencapainya setelah banyak usaha. Jadi saya memilih sesuatu yang sederhana dan berfungsi lebih dari 90% dari yang saya butuhkan. Saya dapat menerapkannya di komputer mana pun yang saya kunjungi (atau instalasi Linux baru) dalam hitungan menit. Sangat sederhana.
Di aplikasi terminal X, atur preferensi pintasan. Saya telah melakukan ini di Gnome dan KDE. Di Konsole, misalnya, buka Menu> Settings> Configure Shortcuts. Ada menu serupa di terminal Gnome X. Cukup pilih pintasan (misalnya, "salin") dan masukkan urutan tombol yang diinginkan.
Jika pintasan salin &tempel terminal bertentangan dengan perintah terminal, ada juga perbaikan yang mudah untuk itu. Misalnya, bagaimana jika seseorang ingin menggunakan CTRL-C untuk menyalin (agar terminal X sesuai dengan standar CUA)?
Dalam hal ini, Anda dapat mengubah binding kunci stty dengan mudah (di .bashrc). Melanjutkan CTRL-C untuk contoh penyalinan, katakanlah Anda ingin kunci interupsi sekarang menjadi CTRL-b (untuk "break"). Ini menyelesaikannya:
echo "stty intr \^b" >> ~/.bashrc
Kemudian sumber .bashrc.
Seluruh solusinya sesederhana menggunakan pengaturan terminal X untuk mengubah pintasan dan kemudian, secara opsional, menyelesaikan konflik dengan stty dengan perintah gema satu baris. Sangat sederhana dan mencakup hampir semua yang saya butuhkan.