Bir X terminalinde çift tıklama davranışı nasıl yapılandırılır?


17

Farklı Unix / Linux sistemleri altında X terminal uygulamalarında (örneğin xterm) farklı çift tıklama davranışları gözlemledim.

Bazen çift tıklama, bir sonraki alfabetik olmayan karaktere kadar sol ve sağ her şeyi seçer (örneğin imlecin altındaki kelimeyi seçer).

Bazen bir sonraki boşluk / eol seçilene kadar her şey (örn. İmlecin altındaki tam yollar seçilir).

Xterm'de çift tıklama davranışını nasıl yapılandırabilirim (çoğu sistemde mevcut olduğundan)?

Şu anda, çoğu modu için 2. modu daha uygun buluyorum.

Yanıtlar:


20

Bunu X kaynakları ile yaparsınız. Bir dosya var, .Xresourceso bu xterm ile ilgili kaynakları içerir:

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

Benim içinde .xinitrcdosyanın, ben bu kaynaklardaki bazı çizgi olduğunu birleştirme vardır:

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

Bu satırlar xterm çift tıklamaları ve üçlü tıklamaları sevdiğim şeyi yapar:

Çift tıklama, eğik çizgi (/), nokta (.), Yıldız işareti (*) ve alfasayısal olmayan diğer bazı karakterleri içerecek şekilde "sözcük" olarak değerlendirir. Bu "charClass" kaynağı. İstediğimi yapmasını sağlamak için o charClass ile biraz sıkıcı uğraşmak zorunda kaldım. Bu çoğunlukla URL'leri çift tıklamanıza ve bunları vurgulamak için tamamen veya kısmen nitelikli yollara tıklamanıza olanak tanır.

Diğer iki satır, farenin altındaki sözcükten üçlü tıklama başlangıcı yapar ve satırın sonuna gider, ancak yeni satır içermez. Bu şekilde, yürüttüğünüz bir komutu üç kez tıklayabilir, başka bir pencereye yapıştırabilir ve yeni bir satırı olmadığından, diğer pencerede çalıştırmadan önce düzenleyebilirsiniz.

Arch Wiki'nin x kaynakları hakkında bir bölüm de dahil olmak üzere X kaynakları hakkında bir makalesi vardır , ancak bu xterm kaynakları tam değildir.


1
Vikisözler yararlı olabilir, ancak xterm kaynakları için danışılması gereken yer el kitabıdır .
Thomas Dickey

Veya kullanın XTerm*VT100.charClass: 0-32:0,33-65535:1. Daha sonra çift tıklatma "kelime" nin boşluk (ve kontrol karakterleri) hariç herhangi bir simge dizisi olduğunu düşünür.
Newtonx

Örneğin içindeki bir json oneliner'da tırnak içine almak istiyorsanız, boşluk kuralı iyi değildir. Ama sanırım sahip olduğunuz kullanıma bağlı. Bu cevapta verilen pasaj benim için mükemmel.
Jean-Bernard Jansen

Bir hatanız var: cutNewLine-> cutNewline. Belki de daha yeni sürümlerde tanıtıldı.
x-yuri

1
Ve onNClicks: regexen azından daha okunabilir görünüyor.
x-yuri

5

xterm seçim için çift ve üçlü tıklama ile ilgili çeşitli kaynak ayarlarına sahiptir (manuel sayfada tüm ilgili kaynaklar listelenmiştir):

cutNewline(class CutNewline)
"false" ise, bir satırı seçmek için üç kez tıklamak satırın sonundaki Newline'ı içermez . "True" ise, Newline seçilir. Varsayılan "true" dır.

cutToBeginningOfLine(class CutToBeginningOfLine)
"false" ise, bir satır seçmek için üç kez tıklatma yalnızca geçerli sözcükten seçer. "True" ise, tüm çizgi seçilir. Varsayılan "true" dır.

on2Clicks(class On2Clicks)
on3Clicks(class On3Clicks)
Birden çok fare tıklamasına yanıt olarak seçim davranışını belirtin. Tek bir fare tıklaması her zaman Seçim İşlevleri bölümünde açıklandığı şekilde yorumlanır ( POINTER KULLANIMI ). Birden çok fare tıklaması (select-start eylemini etkinleştiren düğmeyi kullanarak) on2Clicks, vb. Kaynak değerlerine göre yorumlanır. Kaynak değeri aşağıdakilerden biri olabilir:

word
CharClass kaynağı tarafından belirlendiği şekilde bir "kelime" seçin . Bkz KARAKTER SINIFLARI bölümü.

line
Bir satır seçin (sayım kaydırma).

group
Bitişik çizgilerden oluşan bir grup seçin (sayma kaydırma). Seçim boş bir satırda durur ve geçerli sayfanın dışına taşmaz.

page
Görünür tüm satırları, yani sayfayı seçin.

all
Kaydedilen satırlar dahil olmak üzere tüm satırları seçin.

regex
Kaynak değerinden sonra gelen normal ifadeyle belirlenen bir "kelime" seçin.

none
Bu kaynakla ilişkilendirilmiş seçim eylemi yok. Xterm bunu listenin sonu olarak yorumlar. Örneğin, on3Clicks öğesini "none" olarak ayarlayarak üçlü (ve daha yüksek) tıklamayı devre dışı bırakmak için kullanabilirsiniz.

İçin varsayılan değerler on2Clicksve on3Clicksvardır "kelimesi" ve "çizgi" , sırasıyla. Orada için varsayılan değerdir on4Clicks veya on5Clicksbu devre dışı kalır hale. Başlangıçta, xtermonXClicks ayarlanan kaynak değerlerine göre maksimum tıklama sayısını belirler.


Kılavuzun size söyledikleri: Bazı dağıtımlar için varsayılan, belgelenen varsayılan değer değildir. Boş bir charClass kaynağı ayarlamak, belgelenen varsayılanı geri yükler. CharClass için belirttiğiniz ne olursa olsun, yalnızca belirttiğiniz girişlerin üzerine yazar; belirtilmemiş girişler belgelenen varsayılana geri yüklenir. En azından benim için böyle görünüyor.
Jeff Learman

Ben yaşamanıza bir yazı aşağıdaki değerleri önermek: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Kabul edilen cevapdakinden daha iyi ve anlaşılması kolay görünüyor.
x-yuri

İkinci düşüncede, şimdilik her iki yaklaşımdan da en iyisini almaya karar verdim (en azından şimdi anladığım şekilde): bir kelime için 2 tıklama, bir WORD için 3 tıklama ( vimanlamda xterm*on3Clicks: regex [^ \n]+), kopyalama için 4 tıklama kabuğundan komutları (mevcut kelime hattın sonuna kadar xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), bütün hatlar için 5 tuşunu ( xterm*on5Clicks: regex [^\n]+).
x-yuri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.