Di Linux, bagaimana saya bisa memetakan SHIFT_L / SHIFT_R ketika ditekan tanpa kunci tambahan?

13

Hari ini saya menemukan artikel yang sangat bagus dari Steven Losh di mana ia menyajikan beberapa peningkatan produktivitas pemetaan keyboard. Diantaranya adalah pemetaan dinamis tombol shift kiri dan kanan.

Ide

Ketika Shift_L atau Shift_R ditekan tanpa tombol tambahan, mereka dipetakan ke masing-masing '(' dan ')', jika tidak mereka berfungsi seperti biasa.

Masalah

Dia melakukan semua ini di bawah OSX. Saya mencoba untuk mencapai hal yang sama di Linux. Tidak ada cara langsung untuk ini karena saya mengerti Anda tidak bisa menggunakan xmodmap untuk mengonfigurasi satu kunci untuk Shift_L saja, dan yang lain untuk Shift saat digunakan sebagai kunci pengubah.

Saya telah sedikit mencari di Google dan menemukan orang-orang mencoba melakukan hal yang sama di bawah Windows yang tampaknya mungkin menggunakan AutoHotKey, tetapi saya tidak dapat menemukan apa pun untuk Linux.

Apakah ada cara untuk mengatasi ini di Linux?

insang
sumber
Saya belum mencobanya tetapi ini mungkin membantu askubuntu.com/q/24916/11352
Mansuro
2
Hampir duplikat untuk pertanyaan ini . =)
teika kazura

Jawaban:

4

Wow! Komentar pengguna teika kazura pada pertanyaan asli cukup benar - bukan saja ini secara efektif merupakan duplikat dari pertanyaan lain itu , tetapi jawaban yang diberikan di sana ("gunakan xcape ") menyelesaikan masalah ini!

Setelah mengkloning repo xcape dan kompilasi (saya harus menginstal libXtst-devel di kotak Fedora saya, pertama), saya bisa mendapatkan perilaku persis yang diminta dengan perintah berikut:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Setelah pengujian yang diakui sepintas, tampaknya bekerja dengan sangat baik. Bagus!

Pilihan lain

Jika Anda menggunakan tombol Shift sebagai pengubah mouse (yaitu jika Anda pernah menggeser-klik apa pun), Anda mungkin ingin memasukkan opsi batas waktu xcape dan menemukan nilai batas waktu yang nyaman, sehingga tombol Shift tunggal yang digunakan dalam kombinasi dengan mouse tidak dapat dapat menghasilkan tanda kurung palsu. Dari xcape README:

-t <timeout ms>

Jika Anda memegang kunci lebih lama dari batas waktu ini, xcape tidak akan menghasilkan peristiwa kunci. Standarnya adalah 500 ms.

Jadi, dengan memasukkan -tbendera dengan nilai batas waktu yang berfungsi untuk Anda, Anda masih dapat menggeser-klik dengan mouse selama Anda menahan Shift selama setidaknya timeout ms milidetik.

(Kredit, sekali lagi, untuk teika kazura karena menunjukkan pertanyaan lain, dan juga untuk don_crissti untuk jawaban asli di sana.)

FeRD
sumber
Satu masalah dengan metode ini adalah saya cukup sering menekan [Shift] + [LMouse] untuk memilih beberapa teks dalam editor. Menariknya Sublime Text juga menggunakan [Ctrl] + [LMouse] sehingga pertanyaan tentang memetakan kembali [Ctrl] juga menyebabkan masalah.
AnnanFay
@Annan Sudahkah Anda bereksperimen dengan menyesuaikan opsi batas waktu xcape? Dari README: " -t <timeout ms>Jika Anda memegang kunci lebih lama dari batas waktu ini, xcape tidak akan menghasilkan peristiwa kunci. Defaultnya adalah 500 ms." ... Kecuali xcape mengganggu acara key-down pengubah (saya tidak ingat), itu seharusnya mencegahnya menghasilkan penekanan tombol palsu, sementara masih membiarkan Anda menggunakannya sebagai pengubah pilihan mouse selama Anda memegangnya cukup lama .
FeRD
@Annan Senang mendengarnya, saya telah memperbarui jawaban saya untuk menyarankan penggunaan -tbendera!
FeRD
1

Ini tantangan yang menarik, dan saya setuju bahwa xinput tampaknya tidak cocok untuk itu. Saya menghabiskan beberapa waktu mengutak-atik sekitar dengan kemampuan xmodmap ini, dan datang begitu putus asa dekat untuk mencapai apa yang ingin Anda lakukan ... tanpa benar-benar mengelola untuk sampai ke sana.

Menggunakan xmodmap, dimungkinkan untuk menetapkan parenleft sebagai simbol kunci bergeser pada tombol shift kiri:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

yang agak berfungsi, setidaknya dalam pengujian pada kotak Fedora 17 saya, tetapi tidak dengan cara yang memuaskan. Saya menemukan bahwa, dengan pemetaan ini di tempat, tombol shift masih berfungsi normal, dan tidak membuat parens palsu, tetapi (frustasi) itu tidak andal menghasilkan parens kiri juga. Untuk alasan apa pun, kunci tersebut tampaknya tidak dapat memodifikasi sendiri , yang memecah tugas yang dialihkan ... pada awalnya. Untuk alasan apa pun, memukul shift kiri beberapa kali berturut-turut pada akhirnya akan menyebabkannya mulai memproduksi parens kiri, tetapi hanya setelah pers keempat atau kelima.

Salah satu perilaku yang saya lakukan pemberitahuan, bagaimanapun, bahwa Anda mungkin dapat bekerja dengan sebagai "cukup dekat" analog: Saya menemukan bahwa setelah pemetaan parenleft dan parenright ke Shift_L dan Shift_R, saya dipercaya bisa mengetik parens oleh "rolling" di kedua tombol shift - dengan kata lain, dengan pemetaan ini:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

menekan Shift_L diikuti oleh Shift_R, lalu melepaskan keduanya, akan menampilkan paren kanan, atau paren kiri di arah lain. (Pemetaan paren bisa dibalik, tentu saja; saya tidak bisa memutuskan mana yang terasa lebih "alami".)

Itu sedekat ketika saya sampai pada perilaku yang tepat yang Anda cari; sepertinya tidak mungkin menggunakan xmodmap sendiri.

Saya setengah yakin bahwa itu tidak mungkin, titik, tetapi kemudian saya menyadari bahwa setidaknya ada satu kunci yang berfungsi persis seperti yang Anda gambarkan: Kunci Super ("Windows"). Di bawah Gnome Shell, ini adalah kunci pengubah (mod4), yang menghasilkan efek berbeda (memicu Tinjauan) ketika ditekan sendirian. Jadi, setidaknya secara teori, dimungkinkan untuk menerapkan pemuatan tombol shift yang Anda inginkan dengan cara yang sama.

... Tapi, saya sama sekali tidak tahu bagaimana hal itu akan dilakukan, atau seberapa invasifnya untuk terjebak dalam proses yang diperlukan setiap kali Anda menekan tombol Shift. :-)

FeRD
sumber