summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@src.gnome.org>2002-08-20 04:47:32 +0000
committerNalin Dahyabhai <nalin@src.gnome.org>2002-08-20 04:47:32 +0000
commit6f7f5de82c2e11d8fbe1e496cd3cd5b2d04a0d2e (patch)
tree4ec6e8174ecd61d1811e433f48e5ca292c6114d7
parent56a7bbf39468f9263a52fdda5e330a61bbdf5810 (diff)
downloadvte-6f7f5de82c2e11d8fbe1e496cd3cd5b2d04a0d2e.tar.gz
Load fonts just-in-time to avoid spurious reloads. Don't override the
* src/vte.c: Load fonts just-in-time to avoid spurious reloads. Don't override the focus_in and focus_out event handlers -- the defaults DTRT. * src/debug.c, src/debug.h: Add a RING debug class. * src/iso2022.c: Handle override maps which don't affect the font palette correctly, resetting at newlines and escape marks. Process bogon data correctly. * src/iso2022.txt: Add some sample text. * src/vte.c: Fixup some fontconfig/Xft mixups. Set the hint style instead of hinting when reading the GTK hint style setting (spotted by katzj and otaylor).
-rw-r--r--ChangeLog12
-rw-r--r--po/da.po42
-rw-r--r--po/de.po62
-rw-r--r--po/fr.po47
-rw-r--r--po/nl.po64
-rw-r--r--po/sv.po42
-rw-r--r--src/debug.c3
-rw-r--r--src/debug.h1
-rw-r--r--src/interpret.c9
-rw-r--r--src/iso2022.c73
-rw-r--r--src/iso2022.txt6
-rw-r--r--src/ring.c10
-rw-r--r--src/vte.c733
-rw-r--r--vte.spec7
14 files changed, 647 insertions, 464 deletions
diff --git a/ChangeLog b/ChangeLog
index 021627d7..38eefae9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,16 @@
2002-08-19 nalin
+ * src/vte.c: Load fonts just-in-time to avoid spurious reloads. Don't
+ override the focus_in and focus_out event handlers -- the defaults DTRT.
+ * src/debug.c, src/debug.h: Add a RING debug class.
+2002-08-19 nalin
+ * src/iso2022.c: Handle override maps which don't affect the font
+ palette correctly, resetting at newlines and escape marks. Process
+ bogon data correctly.
+ * src/iso2022.txt: Add some sample text.
+2002-08-19 nalin
* src/vte.c: Fixup some fontconfig/Xft mixups. Set the hint style
- instead of hinting when reading the GTK hint style setting.
+ instead of hinting when reading the GTK hint style setting (spotted
+ by katzj and otaylor).
2002-08-19 nalin
* src/vte.h, src/vte.c: Use gssize instead of ssize_t. Perform
substitutions while processing. Use PangoX contexts when we're using
diff --git a/po/da.po b/po/da.po
index 32dd51d8..7548eafa 100644
--- a/po/da.po
+++ b/po/da.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: vte\n"
-"POT-Creation-Date: 2002-08-13 22:08+0200\n"
+"POT-Creation-Date: 2002-08-20 00:28-0400\n"
"PO-Revision-Date: 2002-08-13 22:12+0200\n"
"Last-Translator: Ole Laursen <olau@hardworking.dk>\n"
"Language-Team: Danish <dansk@klid.dk>\n"
@@ -28,98 +28,98 @@ msgstr "Fejl ved oprettelse af signaldatakanal."
msgid "Duplicate (%s/%s)!"
msgstr "Optræder mere end én gang (%s/%s)!"
-#: src/vte.c:1080
+#: src/vte.c:1086
#, c-format
msgid "Error compiling regular expression \"%s\"."
msgstr "Fejl ved oversættelse af regulært udtryk \"%s\"."
-#: src/vte.c:1450 src/vte.c:1459 src/vte.c:1471 src/vte.c:1489 src/vte.c:1494
-#: src/vte.c:1499
+#: src/vte.c:1456 src/vte.c:1465 src/vte.c:1477 src/vte.c:1495 src/vte.c:1500
+#: src/vte.c:1505
#, c-format
msgid "Unable to convert characters from %s to %s."
msgstr "Kunne ikke konvertere tegn fra %s til %s."
-#: src/vte.c:4641
+#: src/vte.c:4564
#, c-format
msgid "Got unexpected (key?) sequence `%s'."
msgstr "Modtog uventet (taste-?) sekvens '%s'."
-#: src/vte.c:5373
+#: src/vte.c:5293
#, c-format
msgid "Character 0x%x is undefined, allocating one column."
msgstr "Tegn 0x%x er ikke defineret, allokerer en kolonne."
-#: src/vte.c:5566
+#: src/vte.c:5486
#, c-format
msgid "No handler for control sequence `%s' defined."
msgstr "Ingen håndtering for kontrolsekvensen '%s' er defineret."
-#: src/vte.c:6097
+#: src/vte.c:6039
#, c-format
msgid "Error reading from child: %s."
msgstr "Fejl ved læsning fra underproces: %s."
-#: src/vte.c:6265
+#: src/vte.c:6207
#, c-format
msgid "Error (%s) converting data for child, dropping."
msgstr "Fejl (%s) ved konvertering af data for underproces, dropper."
-#: src/vte.c:8067
+#: src/vte.c:8014
#, c-format
msgid "Using fontset \"%s\", which is missing these character sets: %s."
msgstr "Bruger skrifttypesættet \"%s\" som mangler disse tegnsæt: %s."
-#: src/vte.c:8644
+#: src/vte.c:8538
#, c-format
msgid "Failed to load Xft font pattern \"%s\", falling back to default font."
msgstr ""
"Kunne ikke indlæse Xft-skrifttypemønstret \"%s\", falder tilbage til "
"standardskrifttypen."
-#: src/vte.c:8657
+#: src/vte.c:8550
msgid "Failed to load default Xft font."
msgstr "Kunne ikke indlæse standard-Xft-skrifttypen."
-#: src/vte.c:8700
+#: src/vte.c:8589
msgid "Error allocating Xft font, disabling Xft."
msgstr "Fejl ved allokering af Xft-skrifttype, deaktiverer Xft."
-#: src/vte.c:8724
+#: src/vte.c:8646
#, c-format
msgid "Failed to load font set \"%s\", falling back to default font."
msgstr ""
"Kunne ikke indlæse skrifttypesættet \"%s\", falder tilbage til "
"standardskrifttypen."
-#: src/vte.c:8736
+#: src/vte.c:8658
msgid "Failed to load default font, crashing or behaving abnormally."
msgstr ""
"Kunne ikke indlæse standardskrifttypen; vil nu gå ned eller udvise anormal "
"adfærd."
-#: src/vte.c:8823
+#: src/vte.c:8871
#, c-format
msgid "Error reading PTY size, using defaults: %s."
msgstr "Fejl ved indlæsning af PTY-størrelse, bruger standardværdier: %s."
-#: src/vte.c:8849
+#: src/vte.c:8897
#, c-format
msgid "Error setting PTY size: %s."
msgstr "Fejl ved angivelse af PTY-størrelse: %s."
-#: src/vte.c:11244
+#: src/vte.c:11294
msgid "Error allocating context, disabling Pango."
msgstr "Fejl ved allokering af kontekst, deaktiverer Pango."
-#: src/vte.c:11250
+#: src/vte.c:11300
msgid "Error allocating layout, disabling Pango."
msgstr "Fejl ved allokering af layout, deaktiverer Pango."
-#: src/vte.c:11265
+#: src/vte.c:11315
msgid "Error allocating draw, disabling Xft."
msgstr "Fejl ved allokering af tegning, deaktiverer Xft."
#. Aaargh. We're screwed.
-#: src/vte.c:12449
+#: src/vte.c:12499
msgid "g_iconv_open() failed setting word characters"
msgstr "g_iconv_open() kunne ikke angive ordtegn"
diff --git a/po/de.po b/po/de.po
index 18e647f3..c16ccb87 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: vte HEAD\n"
-"POT-Creation-Date: 2002-08-07 15:14+0200\n"
+"POT-Creation-Date: 2002-08-20 00:28-0400\n"
"PO-Revision-Date: 2002-08-07 18:12+0100\n"
"Last-Translator: Christian Neumair <christian-neumair@web.de>\n"
"Language-Team: German <gnome-de@gnome.org>\n"
@@ -28,97 +28,99 @@ msgstr "Fehler beim Erstellen der Signalweiterleitung."
msgid "Duplicate (%s/%s)!"
msgstr "Duplikat (%s/%s)!"
-#: src/vte.c:1060
+#: src/vte.c:1086
#, c-format
msgid "Error compiling regular expression \"%s\"."
msgstr "Fehler beim Kompilieren des regulären Ausdrucks »%s«."
-#: src/vte.c:1431
-#: src/vte.c:1440
-#: src/vte.c:1452
-#: src/vte.c:1470
-#: src/vte.c:1475
-#: src/vte.c:1480
+#: src/vte.c:1456 src/vte.c:1465 src/vte.c:1477 src/vte.c:1495 src/vte.c:1500
+#: src/vte.c:1505
#, c-format
msgid "Unable to convert characters from %s to %s."
msgstr "Zeichen konnten nicht von %s nach %s konvertiert werden."
-#: src/vte.c:4621
+#: src/vte.c:4564
#, c-format
msgid "Got unexpected (key?) sequence `%s'."
msgstr "Unerwartete (Schlüssel?)-Sequenz »%s« erhalten."
-#: src/vte.c:5353
+#: src/vte.c:5293
#, c-format
msgid "Character 0x%x is undefined, allocating one column."
msgstr "Zeichen 0x%x ist undefiniert, eine Spalte wird zugewiesen."
-#: src/vte.c:5544
+#: src/vte.c:5486
#, c-format
msgid "No handler for control sequence `%s' defined."
msgstr "Kein Handler für Kontrollsequenz »%s« definiert."
-#: src/vte.c:6071
+#: src/vte.c:6039
#, c-format
msgid "Error reading from child: %s."
msgstr "Fehler beim Lesen von Kind: %s."
-#: src/vte.c:6239
+#: src/vte.c:6207
#, c-format
msgid "Error (%s) converting data for child, dropping."
msgstr "Fehler (%s) beim Konvertieren der Daten für Kind, wird abgebrochen."
-#: src/vte.c:8046
+#: src/vte.c:8014
#, c-format
msgid "Using fontset \"%s\", which is missing these character sets: %s."
-msgstr "Schriftsatz »%s« wird verwendet, welchem folgende Zeichensätze fehlen: %s."
+msgstr ""
+"Schriftsatz »%s« wird verwendet, welchem folgende Zeichensätze fehlen: %s."
-#: src/vte.c:8623
+#: src/vte.c:8538
#, c-format
msgid "Failed to load Xft font pattern \"%s\", falling back to default font."
-msgstr "Laden des Xft-Schriftmusters »%s« fehlgeschlagen, Rückfall zur vorgegebenen Schrift."
+msgstr ""
+"Laden des Xft-Schriftmusters »%s« fehlgeschlagen, Rückfall zur vorgegebenen "
+"Schrift."
-#: src/vte.c:8636
+#: src/vte.c:8550
msgid "Failed to load default Xft font."
msgstr "Laden der vorgegebenen Xft-Schrift fehlgeschlagen"
-#: src/vte.c:8679
+#: src/vte.c:8589
msgid "Error allocating Xft font, disabling Xft."
msgstr "Fehler beim Zuweisen der Xft-Schrift, Xft wird deaktivert."
-#: src/vte.c:8703
+#: src/vte.c:8646
#, c-format
msgid "Failed to load font set \"%s\", falling back to default font."
-msgstr "Laden des Schriftsatzes »%s« fehlgeschlagen, Rückfall zur vorgegebenen Schrift."
+msgstr ""
+"Laden des Schriftsatzes »%s« fehlgeschlagen, Rückfall zur vorgegebenen "
+"Schrift."
-#: src/vte.c:8715
+#: src/vte.c:8658
msgid "Failed to load default font, crashing or behaving abnormally."
-msgstr "Laden der vorgebenen Schrift fehlgeschlagen, Absturz oder abnormales Verhalten."
+msgstr ""
+"Laden der vorgebenen Schrift fehlgeschlagen, Absturz oder abnormales "
+"Verhalten."
-#: src/vte.c:8802
+#: src/vte.c:8871
#, c-format
msgid "Error reading PTY size, using defaults: %s."
msgstr "Fehler beim Lesen der PTY-Größe, Vorgaben werden verwendet: %s."
-#: src/vte.c:8828
+#: src/vte.c:8897
#, c-format
msgid "Error setting PTY size: %s."
msgstr "Fehler beim Festlegen der PTY-Größe: %s."
-#: src/vte.c:11189
+#: src/vte.c:11294
msgid "Error allocating context, disabling Pango."
msgstr "Fehler beim Zuweisen des Kontextes, Pango wird deaktiviert."
-#: src/vte.c:11195
+#: src/vte.c:11300
msgid "Error allocating layout, disabling Pango."
msgstr "Fehler beim Zuweisen des Layouts, Pango wird deaktiviert."
-#: src/vte.c:11210
+#: src/vte.c:11315
msgid "Error allocating draw, disabling Xft."
msgstr "Fehler beim Zuweisen der Zeichnung, Xft wird deaktiviert."
#. Aaargh. We're screwed.
-#: src/vte.c:12373
+#: src/vte.c:12499
msgid "g_iconv_open() failed setting word characters"
msgstr "g_iconv_open() konnte die Zeichen des Wortes nicht festlegen"
-
diff --git a/po/fr.po b/po/fr.po
index 2e59775d..c0d8f10e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: vte 0.7.0\n"
-"POT-Creation-Date: 2002-08-02 12:29+0200\n"
+"POT-Creation-Date: 2002-08-20 00:28-0400\n"
"PO-Revision-Date: 2002-08-02 12:01+0200\n"
"Last-Translator: Laurent RICHARD <kouran@iespana.es>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
@@ -27,102 +27,101 @@ msgstr "Erreur lors de la création du signal de tube."
msgid "Duplicate (%s/%s)!"
msgstr "Dupliquer (%s/%s) ! "
-#: src/vte.c:1057
+#: src/vte.c:1086
#, c-format
msgid "Error compiling regular expression \"%s\"."
msgstr "Erreur lors de la compilation de l'expression régulière « %s »."
-#: src/vte.c:1428 src/vte.c:1437 src/vte.c:1447 src/vte.c:1461 src/vte.c:1466
-#: src/vte.c:1471
+#: src/vte.c:1456 src/vte.c:1465 src/vte.c:1477 src/vte.c:1495 src/vte.c:1500
+#: src/vte.c:1505
#, c-format
msgid "Unable to convert characters from %s to %s."
msgstr "Impossible de convertir les caractères %s en %s."
-#: src/vte.c:4601
+#: src/vte.c:4564
#, c-format
msgid "Got unexpected (key?) sequence `%s'."
msgstr "Séquence (clé ?) imprévue « %s »."
-#: src/vte.c:5333
+#: src/vte.c:5293
#, c-format
msgid "Character 0x%x is undefined, allocating one column."
msgstr "Caractère 0x%x non défini, attribution d'une colonne."
-#: src/vte.c:5524
+#: src/vte.c:5486
#, c-format
msgid "No handler for control sequence `%s' defined."
msgstr "Pas de manipulation définie pour la séquence de contrôle « %s »."
-#: src/vte.c:6051
+#: src/vte.c:6039
#, c-format
msgid "Error reading from child: %s."
msgstr "Erreur lors de la lecture du fils : « %s »."
-#: src/vte.c:6219
+#: src/vte.c:6207
#, c-format
msgid "Error (%s) converting data for child, dropping."
msgstr "Erreur (%s) lors de la conversion de données pour le fils, abandon."
-#: src/vte.c:7982
-#, c-format
-msgid ""
-"Warning: using fontset \"%s\", which is missing these character sets: %s."
+#: src/vte.c:8014
+#, fuzzy, c-format
+msgid "Using fontset \"%s\", which is missing these character sets: %s."
msgstr ""
"Avertissement : utilisation de la police de caractère « %s » dans lequel ces "
"caractères sont manquants : %s. "
-#: src/vte.c:8520
+#: src/vte.c:8538
#, c-format
msgid "Failed to load Xft font pattern \"%s\", falling back to default font."
msgstr ""
"Échec du chargement du modèle de police Xft « %s », utilisation de la police "
"par défaut."
-#: src/vte.c:8533
+#: src/vte.c:8550
msgid "Failed to load default Xft font."
msgstr "Échec du chargement la police Xft par défaut."
-#: src/vte.c:8576
+#: src/vte.c:8589
msgid "Error allocating Xft font, disabling Xft."
msgstr "Erreur dans l'attribution de la police Xft, désactivation de Xft."
-#: src/vte.c:8600
+#: src/vte.c:8646
#, c-format
msgid "Failed to load font set \"%s\", falling back to default font."
msgstr ""
"Échec du chargement du jeu de police « %s », utilisation de la police par "
"défaut."
-#: src/vte.c:8612
+#: src/vte.c:8658
msgid "Failed to load default font, crashing or behaving abnormally."
msgstr ""
"Échec du chargement de la police par défaut, crash ou comportement anormal."
-#: src/vte.c:8695
+#: src/vte.c:8871
#, c-format
msgid "Error reading PTY size, using defaults: %s."
msgstr ""
"Erreur lors de la lecture de la taille PTY, utilisation par défaut : %s."
-#: src/vte.c:8721
+#: src/vte.c:8897
#, c-format
msgid "Error setting PTY size: %s."
msgstr "Erreur lors du paramètrage de la taille PTY : « %s »."
-#: src/vte.c:10993
+#: src/vte.c:11294
msgid "Error allocating context, disabling Pango."
msgstr "Erreur lors de l'attribution du contexte, désactivation de Pango."
-#: src/vte.c:10999
+#: src/vte.c:11300
msgid "Error allocating layout, disabling Pango."
msgstr ""
"Erreur lors de l'attribution de la disposition, désactivation de Pango."
-#: src/vte.c:11011
+#: src/vte.c:11315
msgid "Error allocating draw, disabling Xft."
msgstr "Erreur lors de l'attribution du dessin, désactivation de Xft."
#. Aaargh. We're screwed.
-#: src/vte.c:12162
+#: src/vte.c:12499
msgid "g_iconv_open() failed setting word characters"
msgstr "g_iconv_open() a échoué dans le paramètrage des caractères."
diff --git a/po/nl.po b/po/nl.po
index cf569a16..a8c6c552 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: vte\n"
-"POT-Creation-Date: 2002-08-08 16:44+0200\n"
+"POT-Creation-Date: 2002-08-20 00:28-0400\n"
"PO-Revision-Date: 2002-08-08 20:09+0200\n"
"Last-Translator: Taco Witte <T.C.Witte@phys.uu.nl>\n"
"Language-Team: Dutch <vertaling@nl.linux.org>\n"
@@ -27,96 +27,100 @@ msgstr "Fout bij maken signaal pijp."
msgid "Duplicate (%s/%s)!"
msgstr "Dupliceren (%s/%s)!"
-#: src/vte.c:1078
+#: src/vte.c:1086
#, c-format
msgid "Error compiling regular expression \"%s\"."
msgstr "Fout bij samenstellen reguliere uitdrukking \"%s\"."
-#: src/vte.c:1448 src/vte.c:1457 src/vte.c:1469 src/vte.c:1487 src/vte.c:1492
-#: src/vte.c:1497
+#: src/vte.c:1456 src/vte.c:1465 src/vte.c:1477 src/vte.c:1495 src/vte.c:1500
+#: src/vte.c:1505
#, c-format
msgid "Unable to convert characters from %s to %s."
msgstr "Kan tekens niet converteren van %s naar %s."
-#: src/vte.c:4642
-#, c-format
-#, fuzzy
+#: src/vte.c:4564
+#, fuzzy, c-format
msgid "Got unexpected (key?) sequence `%s'."
msgstr "Ontvangen: onverwachte (toetsenbord?) combinatie `%s'."
-#: src/vte.c:5374
+#: src/vte.c:5293
#, c-format
msgid "Character 0x%x is undefined, allocating one column."
msgstr "Teken 0x%x is ongedefinieerd, wijs één kolom toe."
-#: src/vte.c:5565
-#, c-format
-#, fuzzy
+#: src/vte.c:5486
+#, fuzzy, c-format
msgid "No handler for control sequence `%s' defined."
msgstr "Geen afhandelaar voor controle combinatie `%s' gedefinieerd."
-#: src/vte.c:6092
+#: src/vte.c:6039
#, c-format
msgid "Error reading from child: %s."
msgstr "Fout bij lezen van kind: %s."
-#: src/vte.c:6260
+#: src/vte.c:6207
#, c-format
msgid "Error (%s) converting data for child, dropping."
msgstr "Fout (%s) bij converteren gegevens voor kind, laat het vallen."
-#: src/vte.c:8062
+#: src/vte.c:8014
#, c-format
msgid "Using fontset \"%s\", which is missing these character sets: %s."
-msgstr "Lettertype verzameling \"%s\" wordt gebruikt, maar die mist deze tekensets: %s."
+msgstr ""
+"Lettertype verzameling \"%s\" wordt gebruikt, maar die mist deze tekensets: %"
+"s."
-#: src/vte.c:8639
+#: src/vte.c:8538
#, c-format
msgid "Failed to load Xft font pattern \"%s\", falling back to default font."
-msgstr "Laden Xft lettertype patroon \"%s\" mislukt, val terug op standaard lettertype."
+msgstr ""
+"Laden Xft lettertype patroon \"%s\" mislukt, val terug op standaard "
+"lettertype."
-#: src/vte.c:8652
+#: src/vte.c:8550
msgid "Failed to load default Xft font."
msgstr "Laden standaard Xft lettertype mislukt."
-#: src/vte.c:8695
+#: src/vte.c:8589
msgid "Error allocating Xft font, disabling Xft."
msgstr "Fout bij toewijzen Xft lettertype, zet Xft uit."
-#: src/vte.c:8719
+#: src/vte.c:8646
#, c-format
msgid "Failed to load font set \"%s\", falling back to default font."
-msgstr "Fout bij laden lettertype verzameling \"%s\", val terug op standaard lettertype."
+msgstr ""
+"Fout bij laden lettertype verzameling \"%s\", val terug op standaard "
+"lettertype."
-#: src/vte.c:8731
+#: src/vte.c:8658
msgid "Failed to load default font, crashing or behaving abnormally."
-msgstr "Fout bij laden standaard lettertype, loop vast of gedraag mezelf abnormaal."
+msgstr ""
+"Fout bij laden standaard lettertype, loop vast of gedraag mezelf abnormaal."
-#: src/vte.c:8818
+#: src/vte.c:8871
#, c-format
msgid "Error reading PTY size, using defaults: %s."
msgstr "Fout bij lezen PTY grootte, gebruik standaardwaarden: %s."
-#: src/vte.c:8844
+#: src/vte.c:8897
#, c-format
msgid "Error setting PTY size: %s."
msgstr "Fout bij instellen PTY grootte: %s."
-#: src/vte.c:11230
+#: src/vte.c:11294
msgid "Error allocating context, disabling Pango."
msgstr "Fout bij toewijzen context, zet Pango uit."
-#: src/vte.c:11236
+#: src/vte.c:11300
#, fuzzy
msgid "Error allocating layout, disabling Pango."
msgstr "Fout bij toewijzen layout, zet Pango uit."
-#: src/vte.c:11251
+#: src/vte.c:11315
msgid "Error allocating draw, disabling Xft."
msgstr "Fout bij toewijzen tekenen, zet Xft uit."
#. Aaargh. We're screwed.
-#: src/vte.c:12433
-#. fuzzy
+#: src/vte.c:12499
msgid "g_iconv_open() failed setting word characters"
msgstr "g_iconv_open() niet geslaagd in instellen woordtekens"
diff --git a/po/sv.po b/po/sv.po
index 3a9b0fe0..31133fd1 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: vte\n"
-"POT-Creation-Date: 2002-08-07 20:40+0200\n"
+"POT-Creation-Date: 2002-08-20 00:28-0400\n"
"PO-Revision-Date: 2002-08-07 20:42+0200\n"
"Last-Translator: Christian Rose <menthos@menthos.com>\n"
"Language-Team: Swedish <sv@li.org>\n"
@@ -29,100 +29,100 @@ msgstr "Fel vid skapande av signalrör."
msgid "Duplicate (%s/%s)!"
msgstr "Dubbel (%s/%s)!"
-#: src/vte.c:1061
+#: src/vte.c:1086
#, c-format
msgid "Error compiling regular expression \"%s\"."
msgstr "Fel vid kompilering av reguljärt uttryck \"%s\"."
-#: src/vte.c:1432 src/vte.c:1441 src/vte.c:1453 src/vte.c:1471 src/vte.c:1476
-#: src/vte.c:1481
+#: src/vte.c:1456 src/vte.c:1465 src/vte.c:1477 src/vte.c:1495 src/vte.c:1500
+#: src/vte.c:1505
#, c-format
msgid "Unable to convert characters from %s to %s."
msgstr "Kan inte konvertera tecken från %s till %s."
-#: src/vte.c:4622
+#: src/vte.c:4564
#, c-format
msgid "Got unexpected (key?) sequence `%s'."
msgstr "Fick oväntad (tangent?)sekvens \"%s\"."
-#: src/vte.c:5354
+#: src/vte.c:5293
#, c-format
msgid "Character 0x%x is undefined, allocating one column."
msgstr "Tecknet 0x%x är odefinierat, allokerar en kolumn."
-#: src/vte.c:5545
+#: src/vte.c:5486
#, c-format
msgid "No handler for control sequence `%s' defined."
msgstr "Ingen hanterare för kontrollsekvensen \"%s\" är angiven."
-#: src/vte.c:6072
+#: src/vte.c:6039
#, c-format
msgid "Error reading from child: %s."
msgstr "Fel vid läsning från barn: %s."
-#: src/vte.c:6240
+#: src/vte.c:6207
#, c-format
msgid "Error (%s) converting data for child, dropping."
msgstr "Fel (%s) vid konvertering av data för barn, kastar."
-#: src/vte.c:8047
+#: src/vte.c:8014
#, c-format
msgid "Using fontset \"%s\", which is missing these character sets: %s."
msgstr ""
"Använder typsnittssamlingen \"%s\", som saknar dessa teckensamlingar: %s."
-#: src/vte.c:8624
+#: src/vte.c:8538
#, c-format
msgid "Failed to load Xft font pattern \"%s\", falling back to default font."
msgstr ""
"Misslyckades med att läsa in XFt-typsnittsmönstret \"%s\", använder "
"standardtypsnittet."
-#: src/vte.c:8637
+#: src/vte.c:8550
msgid "Failed to load default Xft font."
msgstr "Misslyckades med att läsa in Xft-standardtypsnittet."
-#: src/vte.c:8680
+#: src/vte.c:8589
msgid "Error allocating Xft font, disabling Xft."
msgstr "Fel vid allokering av Xft-typsnitt, deaktiverar Xft."
-#: src/vte.c:8704
+#: src/vte.c:8646
#, c-format
msgid "Failed to load font set \"%s\", falling back to default font."
msgstr ""
"Misslyckades med att läsa in typsnittssamlingen \"%s\", använder "
"standardtypsnittet."
-#: src/vte.c:8716
+#: src/vte.c:8658
msgid "Failed to load default font, crashing or behaving abnormally."
msgstr ""
"Misslyckades med att läsa in standardtypsnittet, kraschar eller beter sig "
"onormalt."
-#: src/vte.c:8803
+#: src/vte.c:8871
#, c-format
msgid "Error reading PTY size, using defaults: %s."
msgstr "Fel vid läsande av PTY-storlek, använder standardvärden: %s."
-#: src/vte.c:8829
+#: src/vte.c:8897
#, c-format
msgid "Error setting PTY size: %s."
msgstr "Fel vid läsande av PTY-storlek: %s."
-#: src/vte.c:11216
+#: src/vte.c:11294
msgid "Error allocating context, disabling Pango."
msgstr "Fel vid allokering av sammanhang, deaktiverar Pango."
-#: src/vte.c:11222
+#: src/vte.c:11300
msgid "Error allocating layout, disabling Pango."
msgstr "Fel vid allokering av layout, deaktiverar Pango."
-#: src/vte.c:11237
+#: src/vte.c:11315
msgid "Error allocating draw, disabling Xft."
msgstr "Fel vid allokering av ritbar yta, deaktiverar Xft."
#. Aaargh. We're screwed.
-#: src/vte.c:12400
+#: src/vte.c:12499
msgid "g_iconv_open() failed setting word characters"
msgstr "g_iconv_open() misslyckades med att ställa in ordtecken"
diff --git a/src/debug.c b/src/debug.c
index 3d7734be..91a911a5 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -58,6 +58,9 @@ vte_debug_parse_string(const char *string)
} else
if (g_ascii_strcasecmp(flags[i], "SUBSTITUTION") == 0) {
vte_debug_flags |= VTE_DEBUG_SUBSTITUTION;
+ } else
+ if (g_ascii_strcasecmp(flags[i], "RING") == 0) {
+ vte_debug_flags |= VTE_DEBUG_RING;
}
}
g_strfreev(flags);
diff --git a/src/debug.h b/src/debug.h
index 2b49d0f3..2e77e146 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -32,6 +32,7 @@ typedef enum {
VTE_DEBUG_SIGNALS = 1 << 5,
VTE_DEBUG_SELECTION = 1 << 6,
VTE_DEBUG_SUBSTITUTION = 1 << 7,
+ VTE_DEBUG_RING = 1 << 8,
} VteDebugFlags;
void vte_debug_parse_string(const char *string);
diff --git a/src/interpret.c b/src/interpret.c
index 03621961..8eb3141a 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -120,6 +120,15 @@ main(int argc, char **argv)
g_print("%s\n",
error->message ? error->message : "?");
g_clear_error(&error);
+ g_print("Data: ");
+ for (j = 0; j < array->len; j++) {
+ if (j > 0) {
+ g_print(", ");
+ }
+ g_print("0x%x", array->data[j]);
+ }
+ g_print("\n");
+ continue;
}
tmpsubst = vte_iso2022_copy(substitutions);
substlen = vte_iso2022_substitute(tmpsubst,
diff --git a/src/iso2022.c b/src/iso2022.c
index 1a1493dd..6c039eaf 100644
--- a/src/iso2022.c
+++ b/src/iso2022.c
@@ -41,7 +41,7 @@ struct vte_iso2022_map {
};
struct vte_iso2022 {
- int current;
+ int current, override;
gboolean ss2, ss3;
gunichar g[4];
};
@@ -238,6 +238,7 @@ vte_iso2022_new(void)
struct vte_iso2022 *ret = NULL;
ret = g_malloc0(sizeof(struct vte_iso2022));
ret->current = 0;
+ ret->override = 0;
ret->ss2 = FALSE;
ret->ss3 = FALSE;
ret->g[0] = 'B';
@@ -259,6 +260,7 @@ void
vte_iso2022_free(struct vte_iso2022 *p)
{
p->current = 0;
+ p->override = 0;
p->ss2 = FALSE;
p->ss3 = FALSE;
p->g[0] = '\0';
@@ -450,11 +452,26 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
#endif
continue;
break;
+ case '\r':
+ case '\n':
+ /* Reset overrides. */
+ state.override = '\0';
+ goto plain;
case '':
+ /* Reset overrides. */
+ state.override = '\0';
/* Begins a control sequence. Make sure there's another
* character for us to read. */
if (i + 1 >= length) {
g_free(buf);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
+ fprintf(stderr,
+ "Incomplete specifier: "
+ "need %d bytes, have "
+ "%d.\n", 1, length - i);
+ }
+#endif
return -1;
}
switch (instring[i + 1]) {
@@ -480,6 +497,14 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
/* Designate Gx. Must be another character here. */
if (i + 2 >= length) {
g_free(buf);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
+ fprintf(stderr,
+ "Incomplete specifier: "
+ "need %d bytes, have "
+ "%d.\n", 2, length - i);
+ }
+#endif
return -1;
}
/* We only handle maps we recognize. */
@@ -501,6 +526,14 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
/* Designate Gx. Must be another character here. */
if (i + 2 >= length) {
g_free(buf);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
+ fprintf(stderr,
+ "Incomplete specifier: "
+ "need %d bytes, have "
+ "%d.\n", 2, length - i);
+ }
+#endif
return -1;
}
switch (instring[i + 2]) {
@@ -511,6 +544,14 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
/* Need another character here. */
if (i + 3 >= length) {
g_free(buf);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
+ fprintf(stderr,
+ "Incomplete specifier: "
+ "need %d bytes, have "
+ "%d.\n", 3, length - i);
+ }
+#endif
return -1;
}
g = -1;
@@ -545,19 +586,18 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
continue;
break;
default:
- /* New designation for G0; we only handle maps
- * we recognize. */
+ /* Override. */
if (strchr(WIDE_MAPS, instring[i + 2]) == NULL) {
continue;
}
- /* Set G0. */
- state.g[0] = instring[i + 2] + WIDE_FUDGE;
+ /* Set the current map. */
+ state.override = instring[i + 2] + WIDE_FUDGE;
i += 2;
#ifdef VTE_DEBUG
if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
fprintf(stderr,
- "G0 set to wide `%c'.\n",
- state.g[0] - WIDE_FUDGE);
+ "Override set to wide `%c'.\n",
+ state.override - WIDE_FUDGE);
}
#endif
continue;
@@ -611,8 +651,20 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
/* default:
fall through */
}
+ plain:
default:
+ /* Reset override maps. */
+ switch (instring[i]) {
+ case '\n':
+ case '\r':
+ case '':
+ state.override = 0;
+ break;
+ }
/* Determine which map we should use here. */
+ if (state.override != 0) {
+ current_map = state.override;
+ } else
if (state.ss2) {
current_map = state.g[2];
state.ss2 = FALSE;
@@ -647,6 +699,13 @@ vte_iso2022_substitute(struct vte_iso2022 *outside_state,
}
/* We need at least this many characters. */
if (i + chars_per_code > length) {
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_SUBSTITUTION)) {
+ fprintf(stderr, "Incomplete multibyte sequence "
+ "at %d: need %d bytes, have %d.\n",
+ i, chars_per_code, length - i);
+ }
+#endif
g_free(buf);
return -1;
}
diff --git a/src/iso2022.txt b/src/iso2022.txt
index fe888a16..e67fae91 100644
--- a/src/iso2022.txt
+++ b/src/iso2022.txt
@@ -3,3 +3,9 @@
#
ISO-2022-JP/156: $B$+$J4A;z(B
ISO-2022-KR/158: $)C1hD!)B
+
+#
+# Sample text based on XTerm's specs and random other docs.
+#
+British : (A$(B$
+ISO-2022-JP : (J~(B~
diff --git a/src/ring.c b/src/ring.c
index 625802ec..1131504c 100644
--- a/src/ring.c
+++ b/src/ring.c
@@ -54,7 +54,7 @@ vte_ring_insert(VteRing *ring, long position, gpointer data)
{
long point, i;
#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (vte_debug_on(VTE_DEBUG_RING)) {
fprintf(stderr, "Inserting at position %ld.\n", position);
fprintf(stderr, " Delta = %ld, Length = %ld, Max = %ld.\n",
ring->delta, ring->length, ring->max);
@@ -79,7 +79,7 @@ vte_ring_insert(VteRing *ring, long position, gpointer data)
ring->length++;
}
#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (vte_debug_on(VTE_DEBUG_RING)) {
fprintf(stderr, " Delta = %ld, Length = %ld, "
"Max = %ld.\n",
ring->delta, ring->length, ring->max);
@@ -115,7 +115,7 @@ vte_ring_insert(VteRing *ring, long position, gpointer data)
ring->array[position % ring->max] = data;
ring->length = MIN(ring->length + 1, ring->max);
#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (vte_debug_on(VTE_DEBUG_RING)) {
fprintf(stderr, " Delta = %ld, Length = %ld, Max = %ld.\n",
ring->delta, ring->length, ring->max);
}
@@ -128,7 +128,7 @@ vte_ring_remove(VteRing *ring, long position, gboolean free)
{
long i;
#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (vte_debug_on(VTE_DEBUG_RING)) {
fprintf(stderr, "Removing item at position %ld.\n", position);
fprintf(stderr, " Delta = %ld, Length = %ld, Max = %ld.\n",
ring->delta, ring->length, ring->max);
@@ -151,7 +151,7 @@ vte_ring_remove(VteRing *ring, long position, gboolean free)
ring->length--;
}
#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (vte_debug_on(VTE_DEBUG_RING)) {
fprintf(stderr, " Delta = %ld, Length = %ld, Max = %ld.\n",
ring->delta, ring->length, ring->max);
}
diff --git a/src/vte.c b/src/vte.c
index ee19e9ce..9752ba07 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -342,6 +342,7 @@ static void vte_terminal_set_termcap(VteTerminal *terminal, const char *path,
gboolean reset);
static void vte_terminal_setup_background(VteTerminal *terminal,
gboolean refresh_transparent);
+static void vte_terminal_ensure_font(VteTerminal *terminal);
static void vte_terminal_ensure_cursor(VteTerminal *terminal, gboolean current);
static void vte_terminal_insert_char(GtkWidget *widget, gunichar c,
gboolean force_insert_mode);
@@ -521,6 +522,9 @@ vte_invalidate_cells(VteTerminal *terminal,
return;
}
+ /* Ensure that we have font metrics. */
+ vte_terminal_ensure_font(terminal);
+
/* Subtract the scrolling offset from the row start so that the
* resulting rectangle is relative to the visible portion of the
* buffer. */
@@ -8050,7 +8054,7 @@ xft_slant_from_pango_style (int style)
/* Create an Xft pattern from a Pango font description. */
static XftPattern *
-xft_pattern_from_pango_font_description(const PangoFontDescription *font_desc)
+xft_pattern_from_pango_font_desc(const PangoFontDescription *font_desc)
{
XftPattern *pattern;
const char *family = "mono";
@@ -8104,7 +8108,7 @@ xlfd_from_pango_font_description(GtkWidget *widget,
PangoXSubfont *subfont_ids;
PangoFontMap *fontmap;
int *subfont_charsets, i, count;
- char *xlfd = NULL, *tmp, *subfont;
+ char *xlfd = NULL, *tmp, *subfont, *ret;
char **exploded;
char *encodings[] = {
"iso10646-0",
@@ -8201,7 +8205,9 @@ xlfd_from_pango_font_description(GtkWidget *widget,
g_free(subfont_charsets);
}
- return xlfd;
+ ret = strdup(xlfd);
+ g_free(xlfd);
+ return ret;
}
#ifdef HAVE_XFT
@@ -8229,6 +8235,53 @@ vte_compare_direct(gconstpointer a, gconstpointer b)
return GPOINTER_TO_INT(a) - GPOINTER_TO_INT(b);
}
+/* Apply the changed metrics, and queue a resize if need be. */
+static void
+vte_terminal_apply_metrics(VteTerminal *terminal,
+ gint width, gint height, gint ascent, gint descent)
+{
+ gboolean resize = FALSE, cresize = FALSE;
+
+ /* Sanity check for broken font changes. */
+ width = MAX(width, 1);
+ height = MAX(height, 2);
+ ascent = MAX(ascent, 1);
+ descent = MAX(descent, 1);
+
+ /* Change settings, and keep track of when we've changed anything. */
+ if (width != terminal->char_width) {
+ resize = cresize = TRUE;
+ terminal->char_width = width;
+ }
+ if (height != terminal->char_height) {
+ resize = cresize = TRUE;
+ terminal->char_height = height;
+ }
+ if (ascent != terminal->char_ascent) {
+ resize = TRUE;
+ terminal->char_ascent = ascent;
+ }
+ if (descent != terminal->char_descent) {
+ resize = TRUE;
+ terminal->char_descent = descent;
+ }
+ /* Queue a resize if anything's changed. */
+ if (resize) {
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(terminal))) {
+ gtk_widget_queue_resize(GTK_WIDGET(terminal));
+ }
+ }
+ /* Emit a signal that the font changed. */
+ if (cresize) {
+ vte_terminal_emit_char_size_changed(terminal,
+ terminal->char_width,
+ terminal->char_height);
+ }
+ /* Repaint. */
+ vte_invalidate_all(terminal);
+}
+
+#ifdef HAVE_XFT2
/* Handle notification that Xft-related GTK settings have changed by resetting
* the font using the new settings. */
static void
@@ -8243,7 +8296,6 @@ vte_xft_changed_cb(GtkSettings *settings, GParamSpec *spec,
vte_terminal_set_font(terminal, terminal->pvt->fontdesc);
}
-#ifdef HAVE_XFT2
/* Add default specifiers to the pattern which incorporate the current Xft
* settings. */
static void
@@ -8399,347 +8451,392 @@ vte_font_match(VteTerminal *terminal, FcPattern *pattern, FcResult *result)
}
#endif
-/* Set the fontset used for rendering text into the widget. */
-void
-vte_terminal_set_font(VteTerminal *terminal,
- const PangoFontDescription *font_desc)
+#ifdef HAVE_XFT
+/* Ensure that an Xft font is loaded and metrics are known. */
+static void
+vte_terminal_ensure_font_xft(VteTerminal *terminal)
{
- long width, height, ascent, descent;
- GtkWidget *widget;
- XFontStruct **font_struct_list, font_struct;
- XRectangle ink, logical;
- char *xlfds;
- char **missing_charset_list = NULL, *def_string = NULL;
- int missing_charset_count = 0;
- char **font_name_list = NULL;
+ XftFont *new_font;
+ XftPattern *pattern;
+ XftPattern *matched_pattern;
+ XftResult result;
+ XGlyphInfo glyph_info;
+ gint width, height, ascent, descent;
gboolean need_destroy = FALSE;
+ char *name;
- g_return_if_fail(terminal != NULL);
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- widget = GTK_WIDGET(terminal);
-
- /* Choose default font metrics. I like '10x20' as a terminal font. */
- width = 10;
- height = 20;
- descent = 0;
- ascent = height - descent;
+ /* Simple case -- we already loaded the font. */
+ if (terminal->pvt->ftfont != NULL) {
+ return;
+ }
#ifdef VTE_DEBUG
if (vte_debug_on(VTE_DEBUG_MISC)) {
- if (font_desc) {
- char *tmp;
- tmp = pango_font_description_to_string(font_desc);
- fprintf(stderr, "Using pango font \"%s\".\n",
- tmp);
- g_free (tmp);
- } else {
- fprintf(stderr, "Using default pango font.\n");
- }
+ fprintf(stderr, "Opening Xft font.\n");
}
#endif
- if (terminal->pvt->fontpaddingl != NULL) {
- g_tree_destroy(terminal->pvt->fontpaddingl);
+ /* Map the font description to an Xft pattern. */
+ pattern = xft_pattern_from_pango_font_desc(terminal->pvt->fontdesc);
+
+ /* Xft is on a lot of crack here - it fills in "result" when it
+ * feels like it, and leaves it uninitialized the rest of the
+ * time. Whether it's filled in is impossible to determine
+ * afaict. We don't care about its value anyhow. */
+ result = 0xffff; /* some bogus value to help in debugging */
+#ifdef HAVE_XFT2
+ matched_pattern = vte_font_match(terminal, pattern, &result);
+#else
+ matched_pattern = XftFontMatch(GDK_DISPLAY(),
+ gdk_x11_get_default_screen(),
+ pattern, &result);
+#endif
+ /* Keep track of whether or not we need to destroy this pattern. */
+ if (matched_pattern != NULL) {
+ need_destroy = TRUE;
}
- terminal->pvt->fontpaddingl = g_tree_new(vte_compare_direct);
- if (terminal->pvt->fontpaddingr != NULL) {
- g_tree_destroy(terminal->pvt->fontpaddingr);
+
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (matched_pattern != NULL) {
+ name = vte_unparse_xft_pattern(matched_pattern);
+ fprintf(stderr, "Matched pattern \"%s\".\n", name);
+ free(name);
+ }
+ switch (result) {
+ case XftResultMatch:
+ fprintf(stderr, "matched.\n");
+ break;
+ case XftResultNoMatch:
+ fprintf(stderr, "no match.\n");
+ break;
+ case XftResultTypeMismatch:
+ fprintf(stderr, "type mismatch.\n");
+ break;
+ case XftResultNoId:
+ fprintf(stderr, "no ID.\n");
+ break;
+ default:
+ fprintf(stderr, "undefined/bogus result.\n");
+ break;
+ }
}
- terminal->pvt->fontpaddingr = g_tree_new(vte_compare_direct);
+#endif
- /* Set up an owned font description. */
- if (font_desc != NULL) {
- font_desc =
- pango_font_description_copy(font_desc);
+ if (matched_pattern != NULL) {
+ /* More Xft crackrock - it appears to "adopt" matched_pattern
+ * as new_font->pattern; whether it does this reliably or not,
+ * or does another unpredictable bogosity like the "result"
+ * field above, I don't know. */
+ new_font = XftFontOpenPattern(GDK_DISPLAY(), matched_pattern);
+ need_destroy = FALSE;
} else {
- gtk_widget_ensure_style(widget);
- font_desc =
- pango_font_description_copy(widget->style->font_desc);
+ new_font = NULL;
}
- /* Save the new font description. */
- if (terminal->pvt->fontdesc != NULL) {
- pango_font_description_free(terminal->pvt->fontdesc);
+ if (new_font == NULL) {
+ name = vte_unparse_xft_pattern(matched_pattern);
+ g_warning(_("Failed to load Xft font pattern \"%s\", "
+ "falling back to default font."), name);
+ free(name);
+ /* Try to use the default font. */
+ new_font = XftFontOpen(GDK_DISPLAY(),
+ gdk_x11_get_default_screen(),
+ XFT_FAMILY, XftTypeString,
+ "monospace",
+ XFT_SIZE, XftTypeDouble, 12.0,
+ 0);
}
- terminal->pvt->fontdesc = (PangoFontDescription*) font_desc;
-
- /* If we're not realized yet, then this is all we can do. */
- if (!GTK_WIDGET_REALIZED(widget)) {
- return;
+ if (new_font == NULL) {
+ g_warning(_("Failed to load default Xft font."));
}
- if (terminal->pvt->use_pango) {
- /* Try to load the described font. */
- if (font_desc != NULL) {
- PangoFont *font = NULL;
- PangoFontDescription *desc = NULL;
- PangoContext *pcontext = NULL;
- PangoFontMetrics *pmetrics = NULL;
- PangoLanguage *lang = NULL;
- PangoLayout *layout = NULL;
- PangoRectangle ink, logical;
-#ifdef VTE_PREFER_PANGOX
- pcontext = pango_x_get_context(GDK_DISPLAY());
-#else
- pcontext = gtk_widget_get_pango_context(widget);
-#endif
- font = pango_context_load_font(pcontext, font_desc);
- if (PANGO_IS_FONT(font)) {
- /* We got a font, now reset the description so
- * that it describes this font, and read its
- * metrics. */
- desc = pango_font_describe(font);
- lang = pango_context_get_language(pcontext);
- pmetrics = pango_font_get_metrics(font, lang);
- g_object_unref(G_OBJECT(font));
- }
- /* Pull character cell size info from the metrics. */
- if (pmetrics != NULL) {
- ascent = pango_font_metrics_get_ascent(pmetrics) / PANGO_SCALE;
- descent = pango_font_metrics_get_descent(pmetrics) / PANGO_SCALE;
- width = pango_font_metrics_get_approximate_char_width(pmetrics) / PANGO_SCALE;
- height = ascent + descent;
- pango_font_metrics_unref(pmetrics);
- }
- /* Create a layout object to get a width estimate. */
- if ((pcontext != NULL) && (desc != NULL)) {
- layout = pango_layout_new(pcontext);
- pango_layout_set_font_description(layout, desc);
- pango_layout_set_text(layout,
- VTE_REPRESENTATIVE_CHARACTERS,
- strlen(VTE_REPRESENTATIVE_CHARACTERS));
- pango_layout_get_extents(layout, &ink,
- &logical);
- width = howmany(logical.width, PANGO_SCALE);
- width = howmany(width, strlen(VTE_REPRESENTATIVE_CHARACTERS));
- g_object_unref(G_OBJECT(layout));
- }
- /* Remove the actual description. */
- if (desc != NULL) {
- pango_font_description_free(desc);
- }
- }
+ g_assert(pattern != new_font->pattern);
+ XftPatternDestroy(pattern);
+ if (need_destroy) {
+ XftPatternDestroy(matched_pattern);
}
-#ifdef HAVE_XFT
- if (terminal->pvt->use_xft) {
- XftFont *new_font;
- XftPattern *pattern;
- XftPattern *matched_pattern;
- XftResult result;
- XGlyphInfo glyph_info;
- char *name;
-
- pattern = xft_pattern_from_pango_font_description(terminal->pvt->fontdesc);
-
- /* Xft is on a lot of crack here - it fills in "result" when it
- * feels like it, and leaves it uninitialized the rest of the
- * time. Whether it's filled in is impossible to determine
- * afaict. We don't care about its value anyhow. */
- result = 0xffff; /* some bogus value to help in debugging */
-#ifdef HAVE_XFT2
- matched_pattern = vte_font_match(terminal, pattern, &result);
-#else
- matched_pattern = XftFontMatch(GDK_DISPLAY(),
- gdk_x11_get_default_screen(),
- pattern, &result);
-#endif
- if (matched_pattern != NULL) {
- need_destroy = TRUE;
+ if (new_font) {
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ name = vte_unparse_xft_pattern(new_font->pattern);
+ fprintf(stderr, "Opened new font `%s'.\n", name);
+ free(name);
}
+#endif
+ terminal->pvt->ftfont = new_font;
+ }
+ /* Read the metrics for the new font, if one was loaded. */
+ if (terminal->pvt->ftfont != NULL) {
+ ascent = terminal->pvt->ftfont->ascent;
+ descent = terminal->pvt->ftfont->descent;
+ memset(&glyph_info, 0, sizeof(glyph_info));
+ XftTextExtents8(GDK_DISPLAY(), terminal->pvt->ftfont,
+ VTE_REPRESENTATIVE_CHARACTERS,
+ strlen(VTE_REPRESENTATIVE_CHARACTERS),
+ &glyph_info);
+ width = howmany(glyph_info.width,
+ strlen(VTE_REPRESENTATIVE_CHARACTERS));
+ height = MAX(terminal->pvt->ftfont->height, (ascent + descent));
+ if (height == 0) {
+ height = glyph_info.height;
+ }
+ vte_terminal_apply_metrics(terminal,
+ width, height,
+ ascent, descent);
+ } else {
+ g_warning(_("Error allocating Xft font, disabling Xft."));
+ terminal->pvt->use_xft = FALSE;
+ }
+}
+static void
+vte_terminal_close_font_xft(VteTerminal *terminal)
+{
+ if (terminal->pvt->ftfont != NULL) {
#ifdef VTE_DEBUG
if (vte_debug_on(VTE_DEBUG_MISC)) {
- if (matched_pattern != NULL) {
- name = vte_unparse_xft_pattern(matched_pattern);
- fprintf(stderr, "Matched pattern \"%s\".\n",
- name);
- free(name);
- }
-
- switch (result) {
- case XftResultMatch:
- fprintf(stderr, "matched.\n");
- break;
- case XftResultNoMatch:
- fprintf(stderr, "no match.\n");
- break;
- case XftResultTypeMismatch:
- fprintf(stderr, "type mismatch.\n");
- break;
- case XftResultNoId:
- fprintf(stderr, "no ID.\n");
- break;
- default:
- fprintf(stderr, "undefined/bogus result.\n");
- break;
- }
+ fprintf(stderr, "Closing Xft font.\n");
}
#endif
+ XftFontClose(GDK_DISPLAY(), terminal->pvt->ftfont);
+ terminal->pvt->ftfont = NULL;
+ }
+}
+#endif
- if (matched_pattern != NULL) {
- /* More Xft crackrock - it appears to "adopt"
- * matched_pattern as new_font->pattern; whether it
- * does this reliably or not, or does another
- * unpredictable bogosity like the "result" field
- * above, I don't know.
- */
- new_font = XftFontOpenPattern(GDK_DISPLAY(),
- matched_pattern);
- need_destroy = FALSE;
- } else {
- new_font = NULL;
- }
+/* Ensure that an Xlib font is loaded. */
+static void
+vte_terminal_ensure_font_xlib(VteTerminal *terminal)
+{
+ char *xlfds;
+ long width, height, ascent, descent;
+ XFontStruct **font_struct_list, font_struct;
+ XRectangle ink, logical;
+ char **missing_charset_list = NULL, *def_string = NULL;
+ int missing_charset_count = 0;
+ char **font_name_list = NULL;
- if (new_font == NULL) {
- name = vte_unparse_xft_pattern(matched_pattern);
- g_warning(_("Failed to load Xft font pattern \"%s\", "
- "falling back to default font."), name);
- free(name);
+ /* Simple case -- we already loaded the font. */
+ if (terminal->pvt->fontset != NULL) {
+ return;
+ }
- /* Try to use the default font. */
- new_font = XftFontOpen(GDK_DISPLAY(),
- gdk_x11_get_default_screen(),
- XFT_FAMILY, XftTypeString,
- "mono",
- XFT_SIZE, XftTypeDouble, 14.0,
- 0);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ fprintf(stderr, "Opening Xlib font.\n");
+ }
+#endif
+ xlfds = xlfd_from_pango_font_description(GTK_WIDGET(terminal),
+ terminal->pvt->fontdesc);
+ if (xlfds == NULL) {
+ xlfds = strdup(VTE_X_FIXED);
+ }
+ /* Open the font set. */
+ terminal->pvt->fontset = XCreateFontSet(GDK_DISPLAY(),
+ xlfds,
+ &missing_charset_list,
+ &missing_charset_count,
+ &def_string);
+ if (terminal->pvt->fontset != NULL) {
+ vte_terminal_font_complain(xlfds,
+ missing_charset_list,
+ missing_charset_count);
+ } else {
+ g_warning(_("Failed to load font set \"%s\", "
+ "falling back to default font."), xlfds);
+ if (missing_charset_list != NULL) {
+ XFreeStringList(missing_charset_list);
+ missing_charset_list = NULL;
}
- if (new_font == NULL) {
- g_warning(_("Failed to load default Xft font."));
+ terminal->pvt->fontset = XCreateFontSet(GDK_DISPLAY(),
+ VTE_X_FIXED,
+ &missing_charset_list,
+ &missing_charset_count,
+ &def_string);
+ if (terminal->pvt->fontset == NULL) {
+ g_warning(_("Failed to load default font, "
+ "crashing or behaving abnormally."));
+ } else {
+ vte_terminal_font_complain(xlfds,
+ missing_charset_list,
+ missing_charset_count);
}
+ }
+ if (missing_charset_list != NULL) {
+ XFreeStringList(missing_charset_list);
+ missing_charset_list = NULL;
+ }
+ free(xlfds);
+ xlfds = NULL;
+ g_return_if_fail(terminal->pvt->fontset != NULL);
- g_assert (pattern != new_font->pattern);
- XftPatternDestroy (pattern);
- if (need_destroy) {
- XftPatternDestroy (matched_pattern);
+ /* Read the font metrics. */
+ XmbTextExtents(terminal->pvt->fontset,
+ VTE_REPRESENTATIVE_CHARACTERS,
+ strlen(VTE_REPRESENTATIVE_CHARACTERS),
+ &ink, &logical);
+ width = logical.width / strlen(VTE_REPRESENTATIVE_CHARACTERS);
+ height = logical.height;
+ ascent = height;
+ descent = 0;
+ if (XFontsOfFontSet(terminal->pvt->fontset,
+ &font_struct_list,
+ &font_name_list)) {
+ if (font_struct_list) {
+ if (font_struct_list[0]) {
+ font_struct = font_struct_list[0][0];
+ ascent = font_struct.max_bounds.ascent;
+ descent = font_struct.max_bounds.descent;
+ height = ascent + descent;
+ }
}
+ font_struct_list = NULL;
+ font_name_list = NULL;
+ }
+ xlfds = NULL;
- if (new_font) {
-#ifdef VTE_DEBUG
- if (vte_debug_on(VTE_DEBUG_MISC)) {
- name = vte_unparse_xft_pattern(new_font->pattern);
- fprintf(stderr, "Opened new font `%s'.\n", name);
- free(name);
- }
-#endif
+ /* Save the new font metrics. */
+ vte_terminal_apply_metrics(terminal, width, height, ascent, descent);
+}
- /* Dispose of any previously-opened font. */
- if (terminal->pvt->ftfont != NULL) {
- XftFontClose(GDK_DISPLAY(),
- terminal->pvt->ftfont);
- }
- terminal->pvt->ftfont = new_font;
- }
-
- /* Read the metrics for the current font. */
- if (terminal->pvt->ftfont != NULL) {
- ascent = terminal->pvt->ftfont->ascent;
- descent = terminal->pvt->ftfont->descent;
- memset(&glyph_info, 0, sizeof(glyph_info));
- XftTextExtents8(GDK_DISPLAY(), terminal->pvt->ftfont,
- VTE_REPRESENTATIVE_CHARACTERS,
- strlen(VTE_REPRESENTATIVE_CHARACTERS),
- &glyph_info);
- width = howmany(glyph_info.width,
- strlen(VTE_REPRESENTATIVE_CHARACTERS));
- height = MAX(terminal->pvt->ftfont->height,
- (ascent + descent));
- if (height == 0) {
- height = glyph_info.height;
- }
- } else {
- g_warning(_("Error allocating Xft font, disabling Xft."));
- terminal->pvt->use_xft = FALSE;
+/* Free the Xlib font. */
+static void
+vte_terminal_close_font_xlib(VteTerminal *terminal)
+{
+ if (terminal->pvt->fontset != NULL) {
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ fprintf(stderr, "Closing Xlib font.\n");
}
+#endif
+ XFreeFontSet(GDK_DISPLAY(), terminal->pvt->fontset);
+ terminal->pvt->fontset = NULL;
}
+}
+
+/* Ensure that a Pango font's metrics are known. */
+static void
+vte_terminal_read_metrics_pango(VteTerminal *terminal)
+{
+ PangoFontDescription *desc = NULL;
+ PangoContext *context = NULL;
+ PangoFontMetrics *metrics = NULL;
+ PangoLanguage *lang = NULL;
+ PangoLayout *layout = NULL;
+ PangoRectangle ink, logical;
+ gint height, width, ascent, descent;
+
+#ifdef VTE_PREFER_PANGOX
+ context = pango_x_get_context(GDK_DISPLAY());
+#else
+ context = gtk_widget_get_pango_context(GTK_WIDGET(terminal));
#endif
+ desc = terminal->pvt->fontdesc;
+
+ /* Load a font using this description and read its metrics to find
+ * the ascent and descent. */
+ if ((context != NULL) && (desc != NULL)) {
+ lang = pango_context_get_language(context);
+ metrics = pango_context_get_metrics(context, desc, lang);
+ ascent = pango_font_metrics_get_ascent(metrics);
+ descent = pango_font_metrics_get_descent(metrics);
+ pango_font_metrics_unref(metrics);
+ metrics = NULL;
+
+ /* Create a layout object to get a width estimate. */
+ layout = pango_layout_new(context);
+ pango_layout_set_font_description(layout, desc);
+ pango_layout_set_text(layout,
+ VTE_REPRESENTATIVE_CHARACTERS,
+ strlen(VTE_REPRESENTATIVE_CHARACTERS));
+ pango_layout_get_extents(layout, &ink, &logical);
+ width = howmany(logical.width, PANGO_SCALE);
+ width = howmany(width, strlen(VTE_REPRESENTATIVE_CHARACTERS));
+ height = howmany(logical.height, PANGO_SCALE);
+ g_object_unref(G_OBJECT(layout));
+ layout = NULL;
+
+ /* Change the metrics. */
+ vte_terminal_apply_metrics(terminal,
+ width, height,
+ ascent, descent);
+ }
+}
+/* Ensure that the font's metrics are known. */
+static void
+vte_terminal_ensure_font(VteTerminal *terminal)
+{
+#ifdef HAVE_XFT
+ /* Try to load the Xft font if we can. */
+ if (terminal->pvt->use_xft) {
+ vte_terminal_ensure_font_xft(terminal);
+ }
+#endif
+ /* Try to load an X fontset. */
if (!terminal->pvt->use_xft && !terminal->pvt->use_pango) {
- xlfds = xlfd_from_pango_font_description(GTK_WIDGET(widget),
- terminal->pvt->fontdesc);
- if (xlfds == NULL) {
- xlfds = g_strdup(VTE_X_FIXED);
- }
- if (terminal->pvt->fontset != NULL) {
- XFreeFontSet(GDK_DISPLAY(), terminal->pvt->fontset);
- }
- terminal->pvt->fontset = XCreateFontSet(GDK_DISPLAY(),
- xlfds,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- if (terminal->pvt->fontset != NULL) {
- vte_terminal_font_complain(xlfds, missing_charset_list,
- missing_charset_count);
- } else {
- g_warning(_("Failed to load font set \"%s\", "
- "falling back to default font."), xlfds);
- if (missing_charset_list != NULL) {
- XFreeStringList(missing_charset_list);
- missing_charset_list = NULL;
- }
- terminal->pvt->fontset = XCreateFontSet(GDK_DISPLAY(),
- VTE_X_FIXED,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- if (terminal->pvt->fontset == NULL) {
- g_warning(_("Failed to load default font, "
- "crashing or behaving abnormally."));
- } else {
- vte_terminal_font_complain(xlfds,
- missing_charset_list,
- missing_charset_count);
+ vte_terminal_ensure_font_xlib(terminal);
+ }
+}
+
+/* Set the fontset used for rendering text into the widget. */
+void
+vte_terminal_set_font(VteTerminal *terminal,
+ const PangoFontDescription *font_desc)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail(terminal != NULL);
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ widget = GTK_WIDGET(terminal);
+
+ /* Destroy the font padding records. */
+ if (terminal->pvt->fontpaddingl != NULL) {
+ g_tree_destroy(terminal->pvt->fontpaddingl);
+ }
+ terminal->pvt->fontpaddingl = g_tree_new(vte_compare_direct);
+ if (terminal->pvt->fontpaddingr != NULL) {
+ g_tree_destroy(terminal->pvt->fontpaddingr);
+ }
+ terminal->pvt->fontpaddingr = g_tree_new(vte_compare_direct);
+
+ /* Create an owned font description. */
+ if (font_desc != NULL) {
+ font_desc = pango_font_description_copy(font_desc);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ if (font_desc) {
+ char *tmp;
+ tmp = pango_font_description_to_string(font_desc);
+ fprintf(stderr, "Using pango font \"%s\".\n", tmp);
+ g_free (tmp);
}
}
- if (missing_charset_list != NULL) {
- XFreeStringList(missing_charset_list);
- missing_charset_list = NULL;
- }
- g_return_if_fail(terminal->pvt->fontset != NULL);
- /* Read the font metrics. */
- XmbTextExtents(terminal->pvt->fontset,
- VTE_REPRESENTATIVE_CHARACTERS,
- strlen(VTE_REPRESENTATIVE_CHARACTERS),
- &ink, &logical);
- width = logical.width / strlen(VTE_REPRESENTATIVE_CHARACTERS);
- if (XFontsOfFontSet(terminal->pvt->fontset,
- &font_struct_list,
- &font_name_list)) {
- if (font_struct_list) {
- if (font_struct_list[0]) {
- font_struct = font_struct_list[0][0];
- ascent = font_struct.max_bounds.ascent;
- descent = font_struct.max_bounds.descent;
- height = ascent + descent;
- }
- }
- font_struct_list = NULL;
- font_name_list = NULL;
+#endif
+ } else {
+ gtk_widget_ensure_style(widget);
+ font_desc =
+ pango_font_description_copy(widget->style->font_desc);
+#ifdef VTE_DEBUG
+ if (vte_debug_on(VTE_DEBUG_MISC)) {
+ fprintf(stderr, "Using default pango font.\n");
}
- xlfds = NULL;
+#endif
}
- /* Sanity check for broken fonts, and save the values. */
- width = MAX(width, 1);
- height = MAX(height, 1);
- terminal->char_width = width;
- terminal->char_height = height;
- terminal->char_ascent = ascent;
- terminal->char_descent = descent;
-
- /* Emit a signal that the font changed. */
- vte_terminal_emit_char_size_changed(terminal,
- terminal->char_width,
- terminal->char_height);
-
- /* Attempt to resize. */
- if (GTK_WIDGET_REALIZED(widget)) {
- gtk_widget_queue_resize(widget);
+ /* Save the new font description. */
+ if (terminal->pvt->fontdesc != NULL) {
+ pango_font_description_free(terminal->pvt->fontdesc);
}
+ terminal->pvt->fontdesc = (PangoFontDescription*) font_desc;
+ vte_terminal_read_metrics_pango(terminal);
- /* Make sure the entire window gets repainted. */
- vte_invalidate_all(terminal);
+ /* Free the older fonts. */
+#ifdef HAVE_XFT
+ vte_terminal_close_font_xft(terminal);
+#endif
+ vte_terminal_close_font_xlib(terminal);
}
void
@@ -9109,19 +9206,6 @@ vte_terminal_init(VteTerminal *terminal, gpointer *klass)
#else
pctx = gtk_widget_get_pango_context(widget);
#endif
- metrics = pango_context_get_metrics(pctx, widget->style->font_desc,
- pango_context_get_language(pctx));
- if (metrics != NULL) {
- terminal->char_width = pango_font_metrics_get_approximate_char_width(metrics) / PANGO_SCALE;
- terminal->char_ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
- terminal->char_descent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
- pango_font_metrics_unref(metrics);
- } else {
- terminal->char_width = 10;
- terminal->char_ascent = 10;
- terminal->char_descent = 5;
- }
- terminal->char_height = terminal->char_ascent + terminal->char_descent;
/* Initialize the default titles. */
terminal->window_title = NULL;
@@ -9282,6 +9366,8 @@ vte_terminal_init(VteTerminal *terminal, gpointer *klass)
/* The font description. */
pvt->fontdesc = NULL;
+ vte_terminal_set_font(terminal, NULL);
+ vte_terminal_ensure_font(terminal);
/* Server-side rendering data. Try everything. */
pvt->palette_initialized = FALSE;
@@ -9317,6 +9403,7 @@ vte_terminal_init(VteTerminal *terminal, gpointer *klass)
}
if (getenv("VTE_USE_XFT") != NULL) {
pvt->use_xft = (atol(getenv("VTE_USE_XFT")) != 0);
+ pvt->use_xft2 = pvt->use_xft;
}
/* This is just for debugging. It will go away. */
if (getenv("VTE_USE_XFT2") != NULL) {
@@ -9497,10 +9584,7 @@ vte_terminal_unrealize(GtkWidget *widget)
colormap,
&terminal->pvt->palette[i].ftcolor);
}
- if (terminal->pvt->ftfont != NULL) {
- XftFontClose(display, terminal->pvt->ftfont);
- terminal->pvt->ftfont = NULL;
- }
+ vte_terminal_close_font_xft(terminal);
#endif
/* Clean up after Pango. */
@@ -9513,6 +9597,9 @@ vte_terminal_unrealize(GtkWidget *widget)
terminal->pvt->fontpaddingr = NULL;
}
+ /* Unload an Xlib font if we're using one. */
+ vte_terminal_close_font_xlib(terminal);
+
/* Disconnect any filters which might be watching for X window
* pixmap changes. */
if (terminal->pvt->bg_transparent) {
@@ -9591,6 +9678,7 @@ vte_terminal_finalize(GObject *object)
terminal->pvt->bg_transparent_update_tag = -1;
}
+#ifdef HAVE_XFT2
/* Disconnect from settings changes. */
if (terminal->pvt->connected_settings) {
g_signal_handlers_disconnect_by_func(G_OBJECT(terminal->pvt->connected_settings),
@@ -9598,6 +9686,7 @@ vte_terminal_finalize(GObject *object)
terminal);
terminal->pvt->connected_settings = NULL;
}
+#endif
/* Free the font description. */
if (terminal->pvt->fontdesc != NULL) {
@@ -9771,7 +9860,6 @@ vte_terminal_realize(GtkWidget *widget)
GdkWindowAttr attributes;
GdkPixmap *pixmap;
GdkColor black = {0,}, color;
- GdkGeometry geometry;
int attributes_mask = 0, i;
g_return_if_fail(widget != NULL);
@@ -9804,11 +9892,6 @@ vte_terminal_realize(GtkWidget *widget)
widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
&attributes,
attributes_mask);
- geometry.base_width = VTE_PAD_WIDTH * 2;
- geometry.base_height = VTE_PAD_WIDTH * 2;
- gdk_window_set_geometry_hints(widget->window,
- &geometry,
- GDK_HINT_BASE_SIZE);
gdk_window_move_resize(widget->window,
widget->allocation.x,
widget->allocation.y,
@@ -10631,6 +10714,8 @@ vte_terminal_compute_padding(VteTerminal *terminal, Display *display,
#ifdef HAVE_XFT
XGlyphInfo extents;
#endif
+ /* Ensure that we have fonts loaded. */
+ vte_terminal_ensure_font(terminal);
/* Check how many columns this character uses up. */
columns = g_unichar_iswide(c) ? 2 : 1;
#ifdef HAVE_XFT
@@ -11569,8 +11654,8 @@ vte_terminal_class_init(VteTerminalClass *klass, gconstpointer data)
widget_class->button_press_event = vte_terminal_button_press;
widget_class->button_release_event = vte_terminal_button_release;
widget_class->motion_notify_event = vte_terminal_motion_notify;
- widget_class->focus_in_event = vte_terminal_focus_in;
- widget_class->focus_out_event = vte_terminal_focus_out;
+ /* widget_class->focus_in_event = vte_terminal_focus_in; */
+ /* widget_class->focus_out_event = vte_terminal_focus_out; */
widget_class->unrealize = vte_terminal_unrealize;
widget_class->size_request = vte_terminal_size_request;
widget_class->size_allocate = vte_terminal_size_allocate;
diff --git a/vte.spec b/vte.spec
index d3a9ef24..f798502d 100644
--- a/vte.spec
+++ b/vte.spec
@@ -1,5 +1,5 @@
Name: vte
-Version: 0.7.4
+Version: 0.8.0
Release: 1
Summary: An experimental terminal emulator.
License: LGPL
@@ -59,6 +59,11 @@ make install DESTDIR=$RPM_BUILD_ROOT
%{_libdir}/pkgconfig/*
%changelog
+* Tue Aug 20 2002 Nalin Dahyabhai <nalin@redhat.com> 0.8.0-1
+- rework font handling to use just-in-time loading
+- handle iso-2022 escape sequences, perhaps as much as they might make sense
+ in a Unicode environment
+
* Wed Aug 14 2002 Nalin Dahyabhai <nalin@redhat.com> 0.7.4-1
- handle massive amounts of invalid data better (the /dev/urandom case)
- munged up patch from Owen to fix language matching