Bagaimana cara mengkonfigurasi perilaku klik ganda di terminal X?

15

Di bawah sistem Unix / Linux yang berbeda, saya telah mengamati perilaku klik ganda yang berbeda dalam aplikasi terminal X (misalnya xterm).

Terkadang klik dua kali memilih semuanya kiri dan kanan sampai karakter non-alfabet berikutnya (mis. Memilih kata di bawah kursor).

Terkadang semuanya sampai kosong / kosong berikutnya dipilih (mis. Jalur penuh di bawah kursor dipilih).

Bagaimana saya bisa mengkonfigurasi perilaku klik dua kali - katakan - dalam xterm (karena itu tersedia di sebagian besar sistem)?

Saat ini, saya menemukan mode ke-2 lebih nyaman untuk kebanyakan kasus penggunaan.

maxschlepzig
sumber

Jawaban:

19

Anda melakukannya dengan sumber X. Saya punya file,, .Xresourcesyang berisi sumber daya terkait xterm ini:

XTerm*VT100.cutNewLine: false
XTerm*VT100.cutToBeginningOfLine: false
XTerm*VT100.charClass: 33:48,35:48,37:48,42:48,45-47:48,64:48,95:48,126:48

Dalam .xinitrcfile saya , saya memiliki beberapa baris yang menggabungkan sumber daya tersebut:

if [ -f $userresources ]; then
    /usr/X11/bin/xrdb -merge $userresources
fi

Baris-baris itu membuat klik dua kali xterm dan klik tiga kali melakukan apa yang saya suka:

Klik dua kali pertimbangkan "kata" untuk memasukkan garis miring (/), titik (.), Tanda bintang (*) dan beberapa karakter non-alfanumerik lainnya. Itulah sumber daya "charClass". Saya harus melakukan mengutak-atik charClass yang membosankan untuk membuatnya melakukan apa yang saya inginkan. Itu sebagian besar memungkinkan Anda mengklik dua kali pada URL dan jalur yang memenuhi syarat sepenuhnya atau sebagian untuk menyorotnya.

Dua baris lainnya membuat klik tiga kali mulai dari kata di bawah mouse, dan pergi ke akhir baris, tetapi tidak termasuk baris baru. Dengan begitu, Anda dapat mengklik tiga kali pada perintah yang baru saja Anda jalankan, menempelkannya di jendela lain, dan karena tidak memiliki baris baru, Anda dapat mengeditnya sebelum menjalankannya di jendela lain.

Arch Wiki memiliki artikel tentang sumber daya X , termasuk bagian tentang sumber daya xterm, tetapi sumber daya xterm itu tidak lengkap.

Bruce Ediger
sumber
1
Wiki dapat bermanfaat, tetapi tempat untuk berkonsultasi dengan sumber daya xterm adalah halaman manualnya .
Thomas Dickey
Atau gunakan XTerm*VT100.charClass: 0-32:0,33-65535:1. Klik dua kali kemudian akan menganggap "kata" sebagai urutan simbol yang tidak termasuk spasi putih (dan karakter kontrol).
Newtonx
Aturan spasi putih tidak baik jika Anda ingin mendapatkan apa yang ada di dalam tanda kutip, di json oneliner misalnya. Tapi saya rasa itu tergantung pada penggunaan yang Anda miliki. Cuplikan yang disediakan dalam jawaban ini sangat cocok untuk saya.
Jean-Bernard Jansen
Anda mendapat kesalahan: cutNewLine-> cutNewline. Mungkin itu diperkenalkan di versi yang lebih baru.
x-yuri
1
Dan onNClicks: regexsepertinya setidaknya lebih mudah dibaca.
x-yuri
5

xterm memiliki beberapa pengaturan sumber daya yang terkait dengan mengklik dua kali dan tiga kali lipat untuk pemilihan (halaman buku panduan mencantumkan semua sumber daya yang relevan):

cutNewline(kelas CutNewline)
Jika "false", klik tiga untuk memilih jalur tidak termasuk Newline di akhir baris. Jika "benar", Baris Baru dipilih. Standarnya adalah "benar".

cutToBeginningOfLine(kelas CutToBeginningOfLine)
Jika "false", mengklik tiga kali untuk memilih satu baris hanya memilih dari kata saat ini maju. Jika "benar", seluruh baris dipilih. Standarnya adalah "benar".

on2Clicks(class On2Clicks)
on3Clicks(class On3Clicks)
Menentukan perilaku seleksi sebagai respons terhadap beberapa klik mouse. Satu klik mouse selalu diinterpretasikan seperti yang dijelaskan di bagian Fungsi Pemilihan (lihat PENGGUNAAN POINTER ). Beberapa klik mouse (menggunakan tombol yang mengaktifkan aksi pilih-mulai) ditafsirkan sesuai dengan nilai sumber daya on2Clicks, dll. Nilai sumber daya dapat berupa salah satu dari ini:

word
Pilih "kata" sebagaimana ditentukan oleh sumber daya charClass . Lihat bagian KARAKTER KARAKTER .

line
Pilih garis (menghitung pembungkus).

group
Pilih sekelompok garis yang berdekatan (menghitung pembungkus). Pilihan berhenti pada baris kosong, dan tidak meluas di luar halaman saat ini.

page
Pilih semua garis yang terlihat, yaitu halaman.

all
Pilih semua baris, yaitu, termasuk baris yang disimpan.

regex
Pilih "kata" sebagaimana ditentukan oleh ekspresi reguler yang mengikuti nilai sumber daya.

none
Tidak ada tindakan pemilihan yang dikaitkan dengan sumber ini. Xterm mengartikannya sebagai akhir dari daftar. Misalnya, Anda dapat menggunakannya untuk menonaktifkan klik tiga kali (dan lebih tinggi) dengan menyetel on3Clicks ke "none".

Nilai default untuk on2Clicksdan on3Clicksmasing -masing adalah "kata" dan "baris" . Tidak ada nilai default untuk on4Clicks atau on5Clicks, membuat mereka tidak aktif. Saat startup, xterm menentukan jumlah klik maksimum berdasarkan nilai onXClicks sumber daya yang ditetapkan.

Thomas Dickey
sumber
Apa yang tidak diberitahukan manual kepada Anda: Untuk beberapa distribusi, standarnya bukan standar yang didokumentasikan. Mengatur sumber daya charClass kosong mengembalikan default yang didokumentasikan. Apa pun yang Anda tentukan untuk charClass hanya menimpa entri yang Anda tentukan; entri yang tidak ditentukan dikembalikan ke standar yang didokumentasikan. Setidaknya, begitulah tampaknya bekerja untuk saya.
Jeff Learman
Aku telah lari ke pos yang menyarankan nilai berikut: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Tampak lebih baik dan lebih mudah dipahami daripada yang ada di jawaban yang diterima.
x-yuri
Setelah dipikir-pikir, untuk saat ini saya memutuskan untuk mendapatkan yang terbaik dari kedua pendekatan (setidaknya seperti yang saya mengerti sekarang): 2 klik untuk satu kata, 3 klik untuk KATA (dalam vimarti, xterm*on3Clicks: regex [^ \n]+), 4 klik untuk menyalin perintah dari shell (dari kata saat ini ke akhir baris, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 kali klik untuk seluruh garis ( xterm*on5Clicks: regex [^\n]+).
x-yuri