"Xterm" oder "xterm" in der Konfigurationsdatei

7

Nachdem ich angefangen hatte, Arch zu benutzen, wechselte ich zu xterm und urxvt terminal und genoss die Flexibilität von ihnen (insbesondere scaleHeightRessource). Ich verstehe jedoch nicht, warum manchmal Konfigurationen mit Xtermund manchmal mit xtermoder XTerm( Klein- oder Großbuchstaben xund t) funktionieren .

Zum Beispiel habe ich diese seltsame Konfiguration, die unter Ubuntu funktioniert:

XTerm*faceName: terminus
XTerm*faceSize: 11
XTerm*saveLines: 16384
XTerm*loginShell: true
XTerm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
XTerm*termName: xterm-color
XTerm*eightBitInput: false
xterm*VT100.geometry: 100x80    ! <------ this line would not work with "Xterm" or "XTerm"
XTerm*scaleHeight: 1.3          ! <----- but all others work with "XTerm"

Meine Arch-Box läuft jedoch auf "xterm". Gleiches gilt für das URxvt-Terminal: Ich kann meine Arch .Xresources nicht einfach auf die Ubuntu14-Workbox portieren, da Teile davon nicht mehr funktionieren und ich nach dem Ausführen verschiedene Setups erhalte:

xrdb -merge .Xresources

X.org auf xterm hatte keine Beispiele (die Suche nach "xterm *" hat auf dieser Seite nichts zurückgegeben). Ich sehe Beispiele mit Xterm, xtermund XTermonline ... Es verblüfft mich , dass die Config oben genannten Arbeiten , da es syntaktisch ausgeschaltet ist. Warum ist das so? Hat es vielleicht etwas mit neuen oder alten Ressourcen in X zu tun? Vielen Dank!

xterm auf Ubuntu ist Xterm (297). Ich habe momentan keinen Zugriff auf meine Arch-Box, aber sie wäre ziemlich aktuell. Ich weiß nicht, wie ich die Xterm-Version von Arch's Repos unterscheiden soll, aber vielleicht folgendes: https://www.archlinux.org/packages/extra/i686/xterm/ Wenn dieser Link also richtig ist, dann laufe ich verschiedene Xterm-Versionen.

Ich habe versucht, xterm zu aktualisieren, aber es ist immer noch 297.

apt-get update && apt-get install --only-upgrade xterm

Ich kann es jetzt nicht tun, aber ich könnte versuchen, die neueste Version neu zu kompilieren, um festzustellen, ob das Problem vorliegt.

Nach den Vorschlägen von ILMostro_7 habe ich versucht XTerm.vt100.geometry, was immer noch nicht funktioniert hat. Dies ist Xterm (297) unter Ubuntu14. Also im Grunde, .oder *es scheint nur mit wenig zu funktionieren xt.


Ergebnis des appres XTerm xterm | grep geometryDankes an Gilles. Ich dachte nicht daran nachzuschauen, was genau das xrdb -mergebewirkt, was zu diesem Durcheinander geführt hat. Ich vermute also, dass eine davon Vorrang vor allem anderen hat?

xterm.VT100.geometry:   100x100
xterm*VT100.geometry:   100x80
xterm*VT100*geometry:   50x50
xterm.vt100.geometry:   160x40
xterm*vt100.geometry:   100x20
xterm.geometry: 5x5
xterm*geometry: 100x20
XTerm.VT100.geometry:   100x100
XTerm*VT100.geometry:   50x50
XTerm*VT100*geometry:   20x10
XTerm.vt100.geometry:   100x5
XTerm*vt100.geometry:   40x40
XTerm*geometry: 50x50

Tatsächlich sieht es so aus, als hätte es xterm.vt100.geometry: 160x40Vorrang vor anderen, da die Instanz, die ich immer wieder bekomme. Außerdem habe ich es irgendwie geschafft, Xterm-Menüs (Strg + Mausklick) komplett zu vermasseln - sie erscheinen als kleine gelbe Linie. Hehe

Serge Poele
quelle
1
Diese Seite legt nahe, dass der Clientklassenteil ( XTermin Ihrem Fall) zwischen Groß- und Kleinschreibung unterscheidet . Ich weiß nicht, wie Xresources funktioniert, aber einige Spekulationen: Vielleicht führen Sie irgendwie verschiedene Versionen von xterm zwischen Ihren Boxen aus? (Post xterm -version?) Vielleicht nennen verschiedene Distributionen das xterm-Programm unterschiedliche Klassennamen? (Ich weiß nicht, wie ich das überprüfen soll.
Anko
Dies liegt wahrscheinlich daran, dass Ihnen möglicherweise die angegebene Schriftart fehlt und / oder sie falsch konfiguriert ist. Versuchen Sie es mit einer Schriftart, von der Sie wissen, dass sie ordnungsgemäß auf diesem System installiert ist.
ILMostro_7
1
@ ILMostro_7 faceName Ressource ist kein Problem. Die Terminus-Schriftart wurde erfolgreich installiert und von allen X-Anwendungen (einschließlich Xterm und Rxvt) auf Arch und Ubuntu verwendet.
Serge Poele
Ja, sry, ich habe die Frage für einen Moment falsch verstanden
ILMostro_7
1
Vielen Dank an ILMostro_7. Ich habe es gerade versucht und es funktioniert immer noch nicht. Aber wenn ich xterm.vt100.geometry (Kleinbuchstaben "xt") erneut versuche, funktioniert es. :) Dies ist Xterm (297) unter Ubuntu14. Also im Grunde genommen, "." oder "*" scheint nur mit wenig "xt" zu funktionieren. Ich werde den Beitrag mit diesem Test aktualisieren.
Serge Poele

Antworten:

11

X11-Ressourcen haben einen Namen, der aus einer Reihe von Komponenten besteht, die durch einen Punkt getrennt sind, z xterm.vt100.geometry. Die erste Komponente ist der Name der Anwendung, die zweite Komponente ist ein Widget in dieser Anwendung und die letzte Komponente ist eine Eigenschaft des Widgets. Widgets können verschachtelt sein, sodass mehr als drei Komponenten oder nur zwei für eine Eigenschaft der Anwendung vorhanden sein können.

Spezifikationen von X-Ressourcen können für eine einzelne Ressource oder für eine Reihe von Ressourcen gelten, die einem Muster entsprechen. Es gibt zwei Möglichkeiten, eine Spezifikation auf mehrere Ressourcen anzuwenden.

  • Sie können für jede Komponente einen Klassennamen anstelle eines Instanznamens verwenden. Herkömmlicherweise beginnen Instanznamen mit einem Kleinbuchstaben, während Klassennamen mit einem Großbuchstaben beginnen.

    • Auf der Anwendungsebene wird der Klassenname in der Regel für eine bestimmte Anwendung festgelegt, in der Regel auf die aktivierten Anwendungsnamen, und manchmal auch andere Buchstaben sind auch in Großbuchstaben, zum Beispiel XTerm, XCalc, GV, NetHack, ... Anwendungen , die die Verwendung von X - Toolkit eine Option unterstützen -classzu Set den Klassennamen sowie -nameden Instanznamen (standardmäßig den Basisnamen der ausführbaren Datei). Legt beispielsweise XTerm.vt100.geometryeinen Wert der geometryEigenschaft für das vt100Widget einer beliebigen Instanz der XTermKlasse fest. es gilt xterm -name fooaber nicht für xterm -class Foo.
    • Auf Widget-Ebene können mehrere Widgets mit derselben Klasse vorhanden sein, z. B. mehrere Schaltflächen im selben Fenster. Xterm hat eine einzige Widget der Klasse VT100, genannt vt100, die der Terminal - Emulator Teil ist , dass die gesamten Fensterabdeckungen. Andere Widgets sind die Menüs mainMenu, fontMenuund vtMenuder Klasse SimpleMenu.
  • Es gibt Platzhalter: ?bedeutet "jedes Widget" und *bedeutet "jede Widget-Sequenz". xterm*backgroundDefiniert zum Beispiel einen Hintergrund für absolut alles im Xterm-Fenster.

Sie können den Ressourcenbaum einer Anwendung untersuchen, mit der das Editres-Protokoll unterstützt wird editres. Nur wenige Anwendungen unterstützen dieses Protokoll, aber Xterm ist eine davon.

Es ist möglich, dass eine bestimmte Ressource mit mehreren Mustern übereinstimmt. In diesem Fall gelten Vorrangregeln. Die vollständigen Regeln finden Sie im Handbuch .

In Ihrem Fall ist es wahrscheinlich, dass es irgendwo einen anderen Eintrag gibt, für den eine engere Übereinstimmung xterm.vt100.geometryvorliegt xterm*VT100.geometry, und diese Übereinstimmung überschreibt Ihre Einstellung. Die anderen haben keine andere Einstellung, also gewinnt alles, was Sie tun.

Gilles 'SO - hör auf böse zu sein'
quelle
Dies ist eine so schöne und einzigartige Antwort. Es gibt so viele .Xresources-Posts auf SO, aber nichts berührt Klassen und Instanzen von X-Anwendungen. Vielen Dank dafür; Dies bringt ein völlig neues Verständnis der Konfiguration von X-Apps. Vielen Dank Gilles. Nach Ihrer Diskussion habe ich den Link zur Dokumentation des X-Programmierers gefunden, der die hier angegebene Terminologie erweitert (siehe unten und auch "Erstellen eines Widgets"). x.org/releases/X11R7.7/doc/libXaw/libXaw.html#Terminology
Serge Poele
Was ich immer noch nicht verstehe, ist das. Ich habe diese Linie hinzugefügt: XTerm * Geometrie: 40x40 und sichergestellt, dass ich keine anderen Geometrielinien in Dateien außer URxvt * Geometrie: 20x20 habe. Nach Ihrer Erklärung sollte "XTerm" für jede Instanz der XTerm-Klasse das Feld "Geometrie" festlegen, was bedeutet, dass jede neue XTerm-Instanz 40 x 40 groß sein sollte. URxvt reagiert jedoch darauf: Ich erhalte bei jedem Start eine 20x20-Instanz, Xterm jedoch nicht. Ich verstehe, dass ich das Widget nicht so angegeben habe: XTerm * vt100 * Geometrie: 40x40. Aber Sie sagten, XTerm * -Geometrie sollte "jede Widget-Sequenz" bedeuten, die vt100 enthalten würde?
Serge Poele
@SergePoele Ich denke, das passiert, weil es eine Einstellung auf Systemebene für eine Spezifikation gibt, die Vorrang vor XTerm*geometryz XTerm.VT100.geometry.
Gilles 'SO - hör auf böse zu sein'
Danke noch einmal. Ich denke, das macht Sinn: Auf meinem Mint-Laptop kann ich wahrscheinlich spekulieren, dass es einige Konfigurationen gibt, die von Mint-Entwicklern festgelegt wurden. Auf meiner Arch-Box gibt es keine Konfigurationen, die in X ausgeführt werden und von Arch-Entwicklern festgelegt wurden. Daher überschreibt nichts die XTerm * -Geometrieeinstellung. Dies ist jedoch eine fundierte Vermutung und kann dies irgendwie nicht wirklich beweisen. Trotzdem danke für alle Antworten. Ich bleibe definitiv bei Xterm und Urxvt, nachdem ich mehr über die Konfiguration erfahren habe.
Serge Poele
@SergePoele Was ist die Ausgabe von appres XTerm xterm |grep geometry?
Gilles 'SO - hör auf böse zu sein'
3

Einige der Kommentare usw. sind nicht korrekt. Die Beschreibung der X-Ressourcen finden Sie übrigens auf der X (7) -Handbuchseite im Abschnitt Ressourcen . Das ist der beste Ort, um mit dem Lesen zu beginnen, und es macht wenig Sinn, es hier zu wiederholen.

Hier sind einige Punkte übersehen:

  • Bei Ressourcennamen wird zwischen Groß- und Kleinschreibung unterschieden : XTermist nicht dasselbe wie Xtermnicht dasselbe wie xtermusw.
  • Herkömmlicherweise verwenden X-Ressourcennamen einen führenden Großbuchstaben für den Klassennamen .
  • Wenn der erste Buchstabe des Klassennamens lautet X, gibt es eine Konvention , um den zweiten Buchstaben groß zu schreiben. Also bekommen wir XTerm. Weitere Beispiele sind XCalc, XClock, XConsole, XLoad, XLogo.
  • auf der anderen Seite haben wir Xedit(kleine e) Xfd, Xmag, Xman, Xmessage, Xvidtune. Die Konvention ist also keine Regel .
  • X Toolkit-Anwendungen (z. B. xterm) verwenden XtOpenApplicationoder XtAppInitializeinitialisieren ihre Anwendungsressourcen. Diese Aufrufe haben einen Instanz- und Klassennamen .
  • Herkömmlicherweise ist der Instanzname der tatsächliche Name des Programms (sein Dateiname). Wenn Sie das Programm umbenennen (wie es gelegentlich vorkommt, z. B. xterm.real), ändert sich der Name. Das Programm nicht haben , um dies zu tun, aber es ist oft getan. xtermmacht es.
  • Normalerweise ist der Klassenname eine Konstante. Es ist nicht in xterm, weil es eine von zwei Klassen erwartet: XTermoder UXTerm(3 führende Hauptstädte). Letzteres wird für das uxtermSkript verwendet, um die Angabe der Schriftarten zu vereinfachen. Dies stammt aus dem Jahr 2000 und ist damit ungefähr in der Mitte der Geschichte von X. Eine schnelle Überprüfung der 30 Programme im X-Quellbaum aus den frühen / mittleren 2000er Jahren, die verwendet werden XtAppInitialize, zeigt keine anderen Programme, die eine Variable für den Klassennamen verwenden.
  • Die -classOption ist xterm-spezifisch. Akzeptiert tatsächlich dbedizzyeine -classOption für die visuelle Klasse. Das ist anders. X Toolkit hat keine solche Option. Eine Liste der allgemeinen Optionen für X Toolkit finden Sie auf der X (7) -Handbuchseite unter Optionen . Im xterm-Handbuch werden diese in den X Toolkit-Optionen ausführlicher dargestellt .
  • editresfunktioniert, wie auf der Handbuchseite angegeben, für jedes Programm, das das X Toolkit verwendet. Es gibt 36 Programme im X-Quellbaum, die den einen oder anderen der beiden genannten Initialisierungsaufrufe verwenden. Es sind also nicht "wenige Programme", für die dies gelten würde.
  • auf der anderen Seite xtermist eine der wenigen, für die editresnicht sehr nützlich ist. Es hat zu viele Ressourceneinstellungen.

Die App-Standarddateien, die für xtermund andere Anwendungen installiert werden, geben üblicherweise ihre Ressourceneinstellungen an, beginnend mit asterisk ( *). Das macht sie unabhängig vom Instanznamen . Ein Sternchen entspricht einer beliebigen Anzahl von Ebenen der Widget-Hierarchie, was häufig zu Verwirrung führt, z. B. die xterm-FAQ. Warum sind die Menüs winzig? , wo es möglich ist, dass eine Geometrieressource, die für das VT100Widget vorgesehen ist, (falsch) auf die Menüs angewendet wird. Es gibt ähnliche Probleme mit zu großzügigen Übereinstimmungen, die auf die fontRessource angewendet werden. Die Lösung für beide besteht darin, spezifischere Übereinstimmungen zu verwenden, die auf das VT100Widget (spezifisch) verweisen , dot ( .) usw. verwenden.

Da die Standarddateien der App eine unnötige Verwendung vermeiden '.', können sie in Ihrer eigenen Konfiguration relativ einfach überschrieben werden. Wenn Sie Probleme haben, eine Ressource wie z

xterm*VT100.geometry: 100.80

Um sich zu bewerben, gibt es nur wenige Stellen zu suchen:

  • Wenn Sie dieses Muster zuvor verwendet haben, wird es bereits verwendet, und das erneute Festlegen (später in Ihren Ressourcendateien) hat keine Auswirkungen auf den verwendeten Wert.
  • Eine spezifischere Einstellung wie das xterm.VT100.geometryÜberschreiben weniger spezifischer Einstellungen mithilfe von Platzhaltern *und ?.
Thomas Dickey
quelle