Wie konfiguriere ich das Doppelklickverhalten in einem X-Terminal?

15

Unter verschiedenen Unix / Linux-Systemen habe ich in X-Terminal-Anwendungen (z. B. xterm) ein unterschiedliches Doppelklickverhalten beobachtet.

Manchmal markiert ein Doppelklick alles links und rechts bis zum nächsten nicht-alphabetischen Zeichen (z. B. das Wort unter dem Cursor).

Manchmal wird alles bis zum nächsten Leerzeichen / EOL ausgewählt (z. B. werden vollständige Pfade unter dem Cursor ausgewählt).

Wie kann ich das Doppelklick-Verhalten in xterm konfigurieren (da es auf den meisten Systemen verfügbar ist)?

Derzeit finde ich den 2. Modus für die meisten Anwendungsfälle praktischer.

maxschlepzig
quelle

Antworten:

18

Du machst es mit X Ressourcen. Ich habe eine Datei, .Xresourcesdie die folgenden xterm-bezogenen Ressourcen enthält:

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

In meiner .xinitrcDatei habe ich eine Zeile, die in diesen Ressourcen zusammengeführt wird:

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

Diese Zeilen machen xterm Doppelklicks und Dreifachklicks, was ich mag:

Ein Doppelklick betrachtet ein "Wort" als Schrägstrich (/), Punkt (.), Stern (*) und einige andere nicht alphanumerische Zeichen. Das ist die "charClass" -Ressource. Ich musste mühsam mit dieser Zeichenklasse herumspielen, damit sie tat, was ich wollte. So können Sie zumeist auf URLs und vollständig oder teilweise qualifizierte Pfade doppelklicken, um sie hervorzuheben.

Die anderen beiden Zeilen beginnen mit einem Dreifachklick ab dem Wort unter der Maus und gehen bis zum Ende der Zeile, enthalten jedoch keine neuen Zeilen. Auf diese Weise können Sie einen Befehl, den Sie gerade ausgeführt haben, dreimal anklicken, in ein anderes Fenster einfügen und, da er keine neue Zeile enthält, bearbeiten, bevor Sie ihn in dem anderen Fenster ausführen.

Das Arch-Wiki enthält einen Artikel zu X-Ressourcen , einschließlich eines Abschnitts zu X- Term-Ressourcen. Diese X- Term-Ressourcen sind jedoch nicht vollständig.

Bruce Ediger
quelle
1
Wikis können nützlich sein, aber der Ort, an dem Sie nach xterm-Ressourcen suchen können, ist die Handbuchseite .
Thomas Dickey
Oder benutze XTerm*VT100.charClass: 0-32:0,33-65535:1. Ein Doppelklick betrachtet dann ein "Wort" als eine beliebige Folge von Symbolen mit Ausnahme von Leerzeichen (und Steuerzeichen).
Newtonx
Die Whitespace-Regel ist nicht gut, wenn Sie wissen möchten, was in Anführungszeichen steht, beispielsweise in einem JSON-Oneliner. Aber ich denke, es hängt von der Verwendung ab, die Sie haben. Der in dieser Antwort bereitgestellte Ausschnitt ist perfekt für mich.
Jean-Bernard Jansen
Du hast einen Fehler: cutNewLine-> cutNewline. Vielleicht wurde das in neueren Versionen eingeführt.
X-Yuri
Und onNClicks: regexscheint zumindest lesbarer.
X-Yuri
4

xterm Es stehen verschiedene Ressourceneinstellungen für Doppel- und Dreifachklicks zur Auswahl (die Handbuchseite listet alle relevanten Ressourcen auf):

cutNewline(class CutNewline)
Wenn "false", wird beim dreifachen Klicken auf eine Zeile die neue Zeile am Ende der Zeile nicht berücksichtigt . Bei "true" wird die Newline ausgewählt. Der Standardwert ist "true".

cutToBeginningOfLine(Klasse CutToBeginningOfLine)
Wenn "falsch", wird durch dreifaches Klicken auf eine Zeile nur das aktuelle Wort vorwärts ausgewählt. Bei "true" wird die gesamte Zeile ausgewählt. Der Standardwert ist "true".

on2Clicks(Klasse On2Clicks)
on3Clicks(Klasse On3Clicks) Geben Sie das
Auswahlverhalten als Reaktion auf mehrere Mausklicks an. Ein Mausklick wird immer wie beschrieben in dem interpretierten Auswahlfunktionen Abschnitt (siehe POINTER USAGE ). Mehrfache Mausklicks (mit der Schaltfläche, die die Select-Start-Aktion aktiviert) werden entsprechend den Ressourcenwerten von on2Clicks usw. interpretiert. Der Ressourcenwert kann einer der folgenden Werte sein:

word
Wählen Sie ein "Wort" aus, das von der charClass- Ressource bestimmt wird. Siehe den Abschnitt CHARACTER CLASSES .

line
Wählen Sie eine Zeile aus (Zeilenumbruch wird gezählt).

group
Wählen Sie eine Gruppe benachbarter Zeilen aus (Zeilenumbruch wird gezählt). Die Auswahl bleibt in einer leeren Zeile stehen und erstreckt sich nicht über die aktuelle Seite hinaus.

page
Markieren Sie alle sichtbaren Linien, dh die Seite.

all
Markieren Sie alle Zeilen, also auch die gespeicherten.

regex
Wählen Sie ein "Wort" aus, das durch den regulären Ausdruck bestimmt wird, der im Ressourcenwert folgt.

none
Dieser Ressource ist keine Auswahlaktion zugeordnet. Xterm interpretiert es als das Ende der Liste. Sie können es beispielsweise verwenden, um das Dreifachklicken (und höher) zu deaktivieren, indem Sie on3Clicks auf "none" setzen.

Die Standardwerte für on2Clicksund on3Clickssind "word" bzw. "line" . Es gibt keinen Standardwert für on4Clicks oder on5Clicks, wodurch diese inaktiv werden. Beim Start bestimmt xterm die maximale Anzahl von Klicks anhand der eingestellten onXClicks Ressourcenwerte.

Thomas Dickey
quelle
Was das Handbuch nicht sagt: Bei einigen Distributionen ist der Standard nicht der dokumentierte Standard. Durch das Festlegen einer leeren charClass-Ressource wird der dokumentierte Standard wiederhergestellt. Was auch immer Sie für charClass angeben, überschreibt nur die von Ihnen angegebenen Einträge. Nicht angegebene Einträge werden auf den dokumentierten Standardwert zurückgesetzt. Zumindest scheint es so für mich zu funktionieren.
Jeff Learman
Ich habe laufe in einen Beitrag , die folgenden Werte vorschlagen: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Scheint besser und leichter zu verstehen als die in der akzeptierten Antwort.
X-Yuri
Beim zweiten Gedanken habe ich mich entschieden, das Beste aus beiden Ansätzen zu machen (zumindest so, wie ich es jetzt verstehe): 2 Klicks für ein Wort, 3 Klicks für ein WORT (im vimwahrsten Sinne des Wortes xterm*on3Clicks: regex [^ \n]+), 4 Klicks zum Kopieren von Shell - Befehle (vom aktuellen Wort zu dem Ende der Zeile, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 Klick für ganze Linien ( xterm*on5Clicks: regex [^\n]+).
X-Yuri