-diff -urN vte-0.16.0/ChangeLog vte-svn/ChangeLog
+diff -urN vte-0.16.0/ChangeLog vte-1846/ChangeLog
--- vte-0.16.0/ChangeLog 2007-03-13 00:18:36.000000000 +0100
-+++ vte-svn/ChangeLog 2007-03-17 19:21:20.000000000 +0100
-@@ -1,3 +1,123 @@
-+2007-03-16 Chris Wilson <chris@chris-wilson.co.uk>
-+
-+ * src/vteseq.c (vte_sequence_handler_cursor_character_absolute):
-+ Remove a chunk of code that was tried as a mutt band-aid
-+ long ago and was completely wrong.
-+
-+2007-03-16 Chris Wilson <chris@chris-wilson.co.uk>
-+
-+ Bug 415381 – Improve performance of vte_terminal_insert_char()
-+
-+ The bulk of the work to remove redundant reads and conditionals
-+ from the code. In particular, gcc was emitting bit-by-bit copies
-+ for transferring the bitfield since we modified a member immediately
-+ afterwards - overcome this by using an explicit memcpy of the
-+ bitfields.
-+
-+ * src/vte-private.h:
-+ * src/vte.c (vte_g_array_fill), (vte_terminal_ensure_cursor),
-+ (_vte_terminal_insert_char), (vte_terminal_process_incoming),
-+ (vte_terminal_send):
-+ * src/vteseq.c (vte_sequence_handler_ic):
-+
-+2007-03-16 Chris Wilson <chris@chris-wilson.co.uk>
-+
-+ cf Bug 415381 – Improve performance of vte_terminal_insert_char()
-+
-+ * src/vte-private.h: Use a simple boolean rather than counter for
-+ text changed style flags.
-+ * src/vte.c: And update users.
-+ * src/vteseq.c:
-+
-+2007-03-16 Chris Wilson <chris@chris-wilson.co.uk>
-+
-+ cf Bug 415381 – Improve performance of vte_terminal_insert_char()
-+
-+ * src/vte-private.h: Embed bitfield into struct
-+ * src/vte.c: And update users.
-+ * src/vteseq.c:
-+
++++ vte-1846/ChangeLog 2007-03-18 13:22:43.000000000 +0100
+@@ -1,3 +1,84 @@
+2007-03-16 Chris Wilson <chris@chris-wilson.co.uk>
+
+ Need to trigger update timeout rather than process timeout
2007-03-12 Behdad Esfahbod <behdad@gnome.org>
Released vte-0.16.0.
-diff -urN vte-0.16.0/po/ChangeLog vte-svn/po/ChangeLog
---- vte-0.16.0/po/ChangeLog 2007-03-13 00:11:59.000000000 +0100
-+++ vte-svn/po/ChangeLog 2007-03-17 19:21:19.000000000 +0100
-@@ -1,3 +1,7 @@
-+2007-03-16 Laurent Dhima <laurenti@alblinux.net>
-+
-+ * sq.po: Updated Albanian translation.
-+
- 2007-03-12 Luca Ferretti <elle.uca@libero.it>
-
- * it.po: Updated Italian translation by Francesco Marletta.
-diff -urN vte-0.16.0/po/sq.po vte-svn/po/sq.po
---- vte-0.16.0/po/sq.po 2007-02-26 22:05:19.000000000 +0100
-+++ vte-svn/po/sq.po 2007-03-17 19:21:19.000000000 +0100
-@@ -1,116 +1,121 @@
--# Albanian translation for vte
-+# Përkthimi i vte në shqip.
- # This file is distributed under the same license as the vte package.
--# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
--# Damnus <damnus@libero.it>, 2003.
--# Laurent Dhima <laurenti@alblinux.net>, 2003, 2004.
-+# Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
- #
-+# Damnus <damnus@libero.it>, 2003.
-+# Laurent Dhima <laurenti@alblinux.net>, 2003, 2004, 2007.
- msgid ""
- msgstr ""
--"Project-Id-Version: vte.HEAD\n"
-+"Project-Id-Version: vte HEAD\n"
- "Report-Msgid-Bugs-To: \n"
--"POT-Creation-Date: 2006-03-13 00:22-0500\n"
--"PO-Revision-Date: 2004-02-23 10:30+0100\n"
-+"POT-Creation-Date: 2007-03-16 19:03+0100\n"
-+"PO-Revision-Date: 2007-03-16 19:06+0100\n"
- "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
--"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
-+"Language-Team: albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
--#: src/iso2022.c:792 src/iso2022.c:803 src/iso2022.c:852 src/vte.c:1590
-+#: ../src/iso2022.c:784 ../src/iso2022.c:792 ../src/iso2022.c:823
-+#: ../src/vte.c:1790
- #, c-format
- msgid "Unable to convert characters from %s to %s."
- msgstr "I pamundur konvertimi i simboleve nga %s në %s."
-
--#: src/iso2022.c:1582
-+#: ../src/iso2022.c:1532
- #, c-format
- msgid "Attempt to set invalid NRC map '%c'."
- msgstr "Përpjekje për të vendosur një hartë '%c' NRC të pavlefshme."
-
- #. Application signalled an "identified coding system" we haven't heard of. See ECMA-35 for gory details.
--#: src/iso2022.c:1623
-+#: ../src/iso2022.c:1562
- msgid "Unrecognized identified coding system."
- msgstr "U identifikua një sistem kodifikimi i pavlefshëm."
-
--#: src/iso2022.c:1672 src/iso2022.c:1698
-+#: ../src/iso2022.c:1621 ../src/iso2022.c:1648
- #, c-format
- msgid "Attempt to set invalid wide NRC map '%c'."
--msgstr ""
--"Përpjekje për të vendosur një hartë NRC të zgjeruar të pavlefshme '%c'."
--
--#: src/pty.c:329
--#, c-format
--msgid "Error adding `%s' to environment, continuing."
--msgstr "Gabim duke i shtuar `%s' ambientit, po vazhdoj."
-+msgstr "Përpjekje për të vendosur një hartë NRC të zgjeruar të pavlefshme '%c'."
-
- #. Give the user some clue as to why session logging is not
- #. * going to work (assuming we can open a pty using some other
- #. * method).
--#: src/pty.c:914
-+#: ../src/pty.c:837
- #, c-format
- msgid "can not run %s"
- msgstr "I pamundur ekzekutimi i %s"
-
--#: src/reaper.c:156
-+#: ../src/reaper.c:136
- msgid "Error creating signal pipe."
- msgstr "Gabim gjatë krijimit të pipe të sinjalit."
-
--#: src/trie.c:412
-+#: ../src/trie.c:414
- #, c-format
- msgid "Duplicate (%s/%s)!"
- msgstr "Duplikim (%s/%s)!"
-
--#: src/vte.c:1016
-+#: ../src/vte.c:1178
- #, c-format
- msgid "Error compiling regular expression \"%s\"."
- msgstr "Gabim gjatë kompilimit të shprehjes së rregullt \"%s\"."
-
--#: src/vte.c:2472
-+#: ../src/vte.c:2646 ../src/vte.c:2651
- #, c-format
- msgid "No handler for control sequence `%s' defined."
- msgstr "Asnjë trajtues i prezgjedhur për sekuencën e kontrollit `%s'."
-
- #. Translators: %s is replaced with error message returned by strerror().
--#: src/vte.c:3315
-+#: ../src/vte.c:3616
- #, c-format
- msgid "Error reading from child: %s."
- msgstr "Gabim gjatë leximit nga proçesi bir: %s"
-
--#: src/vte.c:3437 src/vte.c:4331
-+#: ../src/vte.c:3732
-+msgid "Unable to send data to child, invalid charset convertor"
-+msgstr "I pamundur dërgimi i të dhënave birit, konvertues i pavlefshëm simbolesh"
-+
-+#: ../src/vte.c:3743 ../src/vte.c:4659
- #, c-format
- msgid "Error (%s) converting data for child, dropping."
--msgstr ""
--"Gabim (%s) duke konvertuar të dhënat për proçesin bir, do të lihen si ishin."
-+msgstr "Gabim (%s) duke konvertuar të dhënat për proçesin bir, do të lihen si ishin."
-
--#: src/vte.c:6284
-+#: ../src/vte.c:6888
- #, c-format
- msgid "Error reading PTY size, using defaults: %s."
--msgstr ""
--"Gabim gjatë leximit të madhësisë PTY, do të përdoret vlera e prezgjedhur: %s."
-+msgstr "Gabim gjatë leximit të madhësisë PTY, do të përdoret vlera e prezgjedhur: %s."
-
--#: src/vte.c:6320
-+#: ../src/vte.c:6917
- #, c-format
- msgid "Error setting PTY size: %s."
- msgstr "Gabim gjatë vendosjes së madhësisë PTY: %s."
-
- #. Aaargh. We're screwed.
--#: src/vte.c:10629
-+#: ../src/vte.c:11335
- msgid "_vte_conv_open() failed setting word characters"
- msgstr "_vte_conv_open() dështoi në vendosjen e gërmave të fjalës"
-
-+#: ../src/vteseq.c:3926
-+#, c-format
-+msgid "Got unexpected (key?) sequence `%s'."
-+msgstr "U mor një sekuencë ( kyç?) i papritur `%s'."
-+
- #. Bail back to normal mode.
--#: src/vteapp.c:736
-+#: ../src/vteapp.c:774
- msgid "Could not open console.\n"
- msgstr "E pamundur hapja e konsolës.\n"
-
--#: src/vteglyph.c:579
-+#: ../src/vteapp.c:838
-+msgid "Could not parse the geometry spec passed to --geometry"
-+msgstr "I pamundur analizimi i specifikimeve gjeometrike kaluar tek --geometry"
-+
-+#: ../src/vteglyph.c:562
- #, c-format
- msgid "Unknown pixel mode %d.\n"
- msgstr "Metodë pixel %d e panjohur.\n"
-
--#: src/vtexft.c:714
-+#: ../src/vtexft.c:264
- #, c-format
--msgid "Can not draw character U+%04x.\n"
--msgstr "I pamundur vizatimi i simbolit U+%04x.\n"
-+msgid "Can not find appropiate font for character U+%04x.\n"
-+msgstr "E pamundur gjetja e një gërme të përshtatshme për simbolin U+%04x.\n"
-
--#~ msgid "Got unexpected (key?) sequence `%s'."
--#~ msgstr "U mor një sekuencë ( kyç?) i papritur `%s'."
-diff -urN vte-0.16.0/src/cp437.py vte-svn/src/cp437.py
+diff -urN vte-0.16.0/po/Makefile.in.in vte-1846/po/Makefile.in.in
+--- vte-0.16.0/po/Makefile.in.in 2007-02-26 22:05:39.000000000 +0100
++++ vte-1846/po/Makefile.in.in 1970-01-01 01:00:00.000000000 +0100
+@@ -1,221 +0,0 @@
+-# Makefile for program source directory in GNU NLS utilities package.
+-# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+-#
+-# This file file be copied and used freely without restrictions. It can
+-# be used in projects which are not available under the GNU Public License
+-# but which still want to provide support for the GNU gettext functionality.
+-# Please note that the actual code is *not* freely available.
+-#
+-# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+-# instead of PACKAGE and to look for po2tbl in ./ not in intl/
+-#
+-# - Modified by jacob berkman <jacob@ximian.com> to install
+-# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+-#
+-# - Modified by Rodney Dawes <dobey@novell.com> for use with intltool
+-#
+-# We have the following line for use by intltoolize:
+-# INTLTOOL_MAKEFILE
+-
+-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+-PACKAGE = @PACKAGE@
+-VERSION = @VERSION@
+-
+-SHELL = /bin/sh
+-
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+-top_builddir = ..
+-VPATH = @srcdir@
+-
+-prefix = @prefix@
+-exec_prefix = @exec_prefix@
+-datadir = @datadir@
+-datarootdir = @datarootdir@
+-libdir = @libdir@
+-DATADIRNAME = @DATADIRNAME@
+-itlocaledir = $(prefix)/$(DATADIRNAME)/locale
+-subdir = po
+-install_sh = @install_sh@
+-# Automake >= 1.8 provides @mkdir_p@.
+-# Until it can be supposed, use the safe fallback:
+-mkdir_p = $(install_sh) -d
+-
+-INSTALL = @INSTALL@
+-INSTALL_DATA = @INSTALL_DATA@
+-
+-GMSGFMT = @GMSGFMT@
+-MSGFMT = @MSGFMT@
+-XGETTEXT = @XGETTEXT@
+-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+-MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+-GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+-
+-ALL_LINGUAS = @ALL_LINGUAS@
+-
+-PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; fi)
+-
+-POFILES=$(shell if test -n "$(PO_LINGUAS)"; then LINGUAS="$(PO_LINGUAS)"; else LINGUAS="$(ALL_LINGUAS)"; fi; for lang in $$LINGUAS; do printf "$$lang.po "; done)
+-
+-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(POFILES)
+-EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS
+-
+-POTFILES = \
+-#This Gets Replace for some reason
+-
+-CATALOGS=$(shell if test -n "$(PO_LINGUAS)"; then LINGUAS="$(PO_LINGUAS)"; else LINGUAS="$(ALL_LINGUAS)"; fi; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
+-
+-.SUFFIXES:
+-.SUFFIXES: .po .pox .gmo .mo .msg .cat
+-
+-.po.pox:
+- $(MAKE) $(GETTEXT_PACKAGE).pot
+- $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
+-
+-.po.mo:
+- $(MSGFMT) -o $@ $<
+-
+-.po.gmo:
+- file=`echo $* | sed 's,.*/,,'`.gmo \
+- && rm -f $$file && $(GMSGFMT) -o $$file $<
+-
+-.po.cat:
+- sed -f ../intl/po2msg.sed < $< > $*.msg \
+- && rm -f $@ && gencat $@ $*.msg
+-
+-
+-all: all-@USE_NLS@
+-
+-all-yes: $(CATALOGS)
+-all-no:
+-
+-$(GETTEXT_PACKAGE).pot: $(POTFILES)
+- $(GENPOT)
+-
+-install: install-data
+-install-data: install-data-@USE_NLS@
+-install-data-no: all
+-install-data-yes: all
+- $(mkdir_p) $(DESTDIR)$(itlocaledir)
+- if test -n "$(PO_LINGUAS)"; then \
+- linguas="$(PO_LINGUAS)"; \
+- else \
+- linguas="$(ALL_LINGUAS)"; \
+- fi; \
+- for lang in $$linguas; do \
+- dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
+- $(mkdir_p) $$dir; \
+- if test -r $$lang.gmo; then \
+- $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+- echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
+- else \
+- $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+- echo "installing $(srcdir)/$$lang.gmo as" \
+- "$$dir/$(GETTEXT_PACKAGE).mo"; \
+- fi; \
+- if test -r $$lang.gmo.m; then \
+- $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
+- echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
+- else \
+- if test -r $(srcdir)/$$lang.gmo.m ; then \
+- $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
+- $$dir/$(GETTEXT_PACKAGE).mo.m; \
+- echo "installing $(srcdir)/$$lang.gmo.m as" \
+- "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
+- else \
+- true; \
+- fi; \
+- fi; \
+- done
+-
+-# Empty stubs to satisfy archaic automake needs
+-dvi info tags TAGS ID:
+-
+-# Define this as empty until I found a useful application.
+-installcheck:
+-
+-uninstall:
+- if test -n "$(PO_LINGUAS)"; then \
+- linguas="$(PO_LINGUAS)"; \
+- else \
+- linguas="$(ALL_LINGUAS)"; \
+- fi; \
+- for lang in $$linguas; do \
+- rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
+- rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
+- done
+-
+-check: all $(GETTEXT_PACKAGE).pot
+-
+-mostlyclean:
+- rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+- rm -f .intltool-merge-cache
+-
+-clean: mostlyclean
+-
+-distclean: clean
+- rm -f Makefile Makefile.in POTFILES stamp-it
+- rm -f *.mo *.msg *.cat *.cat.m *.gmo
+-
+-maintainer-clean: distclean
+- @echo "This command is intended for maintainers to use;"
+- @echo "it deletes files that may require special tools to rebuild."
+- rm -f Makefile.in.in
+-
+-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+-dist distdir: $(DISTFILES)
+- dists="$(DISTFILES)"; \
+- extra_dists="$(EXTRA_DISTFILES)"; \
+- for file in $$extra_dists; do \
+- test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
+- done; \
+- for file in $$dists; do \
+- test -f $$file || file="$(srcdir)/$$file"; \
+- ln $$file $(distdir) 2> /dev/null \
+- || cp -p $$file $(distdir); \
+- done
+-
+-update-po: Makefile
+- $(MAKE) $(GETTEXT_PACKAGE).pot
+- tmpdir=`pwd`; \
+- if test -n "$(PO_LINGUAS)"; then \
+- linguas="$(PO_LINGUAS)"; \
+- else \
+- linguas="$(ALL_LINGUAS)"; \
+- fi; \
+- for lang in $$linguas; do \
+- echo "$$lang:"; \
+- result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+- if $$result; then \
+- if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+- rm -f $$tmpdir/$$lang.new.po; \
+- else \
+- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+- :; \
+- else \
+- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+- rm -f $$tmpdir/$$lang.new.po; \
+- exit 1; \
+- fi; \
+- fi; \
+- else \
+- echo "msgmerge for $$lang.gmo failed!"; \
+- rm -f $$tmpdir/$$lang.new.po; \
+- fi; \
+- done
+-
+-Makefile POTFILES: stamp-it
+- @if test ! -f $@; then \
+- rm -f stamp-it; \
+- $(MAKE) stamp-it; \
+- fi
+-
+-stamp-it: Makefile.in.in ../config.status POTFILES.in
+- cd .. \
+- && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
+- $(SHELL) ./config.status
+-
+-# Tell versions [3.59,3.63) of GNU make not to export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+diff -urN vte-0.16.0/src/cp437.py vte-1846/src/cp437.py
--- vte-0.16.0/src/cp437.py 1970-01-01 01:00:00.000000000 +0100
-+++ vte-svn/src/cp437.py 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/cp437.py 2007-03-18 13:22:32.000000000 +0100
@@ -0,0 +1,9 @@
+#!/usr/bin/python
+print '%s' % '\e(U'
+ print ""
+ i = i + 1
+print '%s' % '\e(B\e)0\e*B\e+B'
-diff -urN vte-0.16.0/src/genwidths.py vte-svn/src/genwidths.py
+diff -urN vte-0.16.0/src/genwidths.py vte-1846/src/genwidths.py
--- vte-0.16.0/src/genwidths.py 1970-01-01 01:00:00.000000000 +0100
-+++ vte-svn/src/genwidths.py 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/genwidths.py 2007-03-18 13:22:32.000000000 +0100
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+import os, re, string
+ print >> out, "\t0x%x," % (string.atol(specific, 16))
+print >> out, "};"
+
-diff -urN vte-0.16.0/src/marshal.c vte-svn/src/marshal.c
+diff -urN vte-0.16.0/src/marshal.c vte-1846/src/marshal.c
--- vte-0.16.0/src/marshal.c 2007-02-26 22:06:36.000000000 +0100
-+++ vte-svn/src/marshal.c 1970-01-01 01:00:00.000000000 +0100
++++ vte-1846/src/marshal.c 1970-01-01 01:00:00.000000000 +0100
@@ -1,203 +0,0 @@
-
-#include <glib-object.h>
- data2);
-}
-
-diff -urN vte-0.16.0/src/marshal.h vte-svn/src/marshal.h
+diff -urN vte-0.16.0/src/marshal.h vte-1846/src/marshal.h
--- vte-0.16.0/src/marshal.h 2007-02-26 22:06:36.000000000 +0100
-+++ vte-svn/src/marshal.h 1970-01-01 01:00:00.000000000 +0100
++++ vte-1846/src/marshal.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,53 +0,0 @@
-
-#ifndef ___vte_marshal_MARSHAL_H__
-
-#endif /* ___vte_marshal_MARSHAL_H__ */
-
-diff -urN vte-0.16.0/src/vte.c vte-svn/src/vte.c
+diff -urN vte-0.16.0/src/vte.c vte-1846/src/vte.c
--- vte-0.16.0/src/vte.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vte.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vte.c 2007-03-18 13:22:32.000000000 +0100
@@ -18,6 +18,8 @@
#include "../config.h"
static void vte_terminal_emit_pending_signals(VteTerminal *terminal);
static inline gboolean vte_cell_is_selected(VteTerminal *terminal,
glong col, glong row, gpointer data);
-@@ -245,7 +246,7 @@
- /* Append a single item to a GArray a given number of times. Centralizing all
- * of the places we do this may let me do something more clever later. */
- static void
--vte_g_array_fill(GArray *array, gpointer item, guint final_size)
-+vte_g_array_fill(GArray *array, gconstpointer item, guint final_size)
- {
- if (array->len >= final_size) {
- return;
-@@ -318,22 +319,21 @@
- screen = terminal->pvt->screen;
-
- screen->defaults.c = 0;
-- screen->defaults.columns = 1;
-- screen->defaults.fragment = 0;
-- screen->defaults.empty = 1;
-- screen->defaults.fore = VTE_DEF_FG;
-- screen->defaults.back = VTE_DEF_BG;
-- screen->defaults.reverse = 0;
-- screen->defaults.bold = 0;
-- screen->defaults.invisible = 0;
-- screen->defaults.protect = 0;
-- screen->defaults.standout = 0;
-- screen->defaults.underline = 0;
-- screen->defaults.strikethrough = 0;
-- screen->defaults.half = 0;
-- screen->defaults.blink = 0;
-+ screen->defaults.attr.columns = 1;
-+ screen->defaults.attr.fragment = 0;
-+ screen->defaults.attr.fore = VTE_DEF_FG;
-+ screen->defaults.attr.back = VTE_DEF_BG;
-+ screen->defaults.attr.reverse = 0;
-+ screen->defaults.attr.bold = 0;
-+ screen->defaults.attr.invisible = 0;
-+ screen->defaults.attr.protect = 0;
-+ screen->defaults.attr.standout = 0;
-+ screen->defaults.attr.underline = 0;
-+ screen->defaults.attr.strikethrough = 0;
-+ screen->defaults.attr.half = 0;
-+ screen->defaults.attr.blink = 0;
- /* Alternate charset isn't an attribute, though we treat it as one.
-- * screen->defaults.alternate = 0; */
-+ * screen->defaults.attr.alternate = 0; */
- screen->basic_defaults = screen->defaults;
- screen->color_defaults = screen->defaults;
- screen->fill_defaults = screen->defaults;
-@@ -612,13 +612,13 @@
- struct vte_charcell *cell;
- cell = _vte_row_data_find_charcell(row_data, col);
- if (cell != NULL) {
-- while (cell->fragment && col> 0) {
-+ while (cell->attr.fragment && col> 0) {
- cell = _vte_row_data_find_charcell(row_data, --col);
- }
-- columns = cell->columns;
-+ columns = cell->attr.columns;
- if (_vte_draw_get_char_width(terminal->pvt->draw,
- cell->c,
-- cell->columns) >
-+ cell->attr.columns) >
- terminal->char_width * columns) {
- columns++;
- }
-@@ -664,17 +664,17 @@
- cell = vte_terminal_find_charcell(terminal,
- column,
- screen->cursor_current.row);
-- while ((cell != NULL) && (cell->fragment) && (column > 0)) {
-+ while ((cell != NULL) && (cell->attr.fragment) && (column > 0)) {
- column--;
- cell = vte_terminal_find_charcell(terminal,
- column,
- row);
- }
- if (cell != NULL) {
-- columns = cell->columns;
-+ columns = cell->attr.columns;
- if (_vte_draw_get_char_width(terminal->pvt->draw,
- cell->c,
-- cell->columns) >
-+ cell->attr.columns) >
- terminal->char_width * columns) {
- columns++;
- }
-@@ -1613,19 +1613,19 @@
+@@ -1613,19 +1614,19 @@
}
/* Queue an adjustment-changed signal to be delivered when convenient. */
}
}
-@@ -1855,13 +1855,32 @@
+@@ -1855,13 +1856,32 @@
return terminal->pvt->encoding;
}
gint delta;
glong v;
-@@ -1875,18 +1894,7 @@
+@@ -1875,18 +1895,7 @@
/* Figure out how many rows we need to add. */
delta = v - _vte_ring_next(screen->row_data) + 1;
if (delta > 0) {
_vte_terminal_adjust_adjustments(terminal);
} else {
/* Find the row the cursor is in. */
-@@ -1920,18 +1928,7 @@
+@@ -1920,18 +1929,7 @@
/* Figure out how many rows we need to add. */
delta = v - _vte_ring_next(screen->row_data) + 1;
if (delta > 0) {
_vte_terminal_adjust_adjustments(terminal);
} else {
/* Find the row the cursor is in. */
-@@ -1950,7 +1947,7 @@
- }
- v += columns;
- if (G_LIKELY (row->cells->len < v)) { /* expand for character */
-- vte_g_array_fill (row->cells, &screen->color_defaults, v);
-+ g_array_set_size (row->cells, v);
- }
- screen->cursor_current.col = v;
-
-@@ -1969,8 +1966,12 @@
+@@ -1969,8 +1967,12 @@
/* The total number of lines. Add one to the cursor offset
* because it's zero-based. */
/* Make sure that the bottom row is visible, and that it's in
* the buffer (even if it's empty). This usually causes the
-@@ -2444,55 +2445,45 @@
+@@ -2444,7 +2446,7 @@
}
/* Insert a single character into the stored data array. */
-void
+gboolean
_vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
-- gboolean force_insert_mode, gboolean invalidate_now,
-- gboolean paint_cells, gint forced_width)
-+ gboolean insert, gboolean invalidate_now)
- {
-+ struct vte_charcell_attr attr;
- VteRowData *row;
-- struct vte_charcell cell;
-- int columns, i;
+ gboolean force_insert_mode, gboolean invalidate_now,
+ gboolean paint_cells, gint forced_width)
+@@ -2454,6 +2456,7 @@
+ int columns, i;
long col;
-+ int columns, i;
VteScreen *screen;
-- gboolean insert;
+ gboolean line_wrapped = FALSE; /* cursor moved before char inserted */
+ gboolean insert;
screen = terminal->pvt->screen;
-- insert = screen->insert_mode | force_insert_mode;
-+ insert |= screen->insert_mode;
- invalidate_now |= insert;
-
- /* If we've enabled the special drawing set, map the characters to
- * Unicode. */
-- if (G_UNLIKELY (screen->defaults.alternate)) {
-+ if (G_UNLIKELY (screen->defaults.attr.alternate)) {
- _vte_debug_print(VTE_DEBUG_SUBSTITUTION,
- "Attempting charset substitution"
- "for 0x%04x.\n", c);
- /* See if there's a mapping for it. */
-- cell.c = _vte_iso2022_process_single(terminal->pvt->iso2022,
-- c, '0');
-- if (cell.c != c) {
-- forced_width = _vte_iso2022_get_encoded_width(cell.c);
-- c = cell.c & ~(VTE_ISO2022_ENCODED_WIDTH_MASK);
-- }
-+ c = _vte_iso2022_process_single(terminal->pvt->iso2022, c, '0');
- }
-
- /* If this character is destined for the status line, save it. */
+@@ -2479,7 +2482,7 @@
if (G_UNLIKELY (screen->status_line)) {
g_string_append_unichar(screen->status_line_contents, c);
screen->status_line_changed = TRUE;
}
/* Figure out how many columns this character should occupy. */
-- if (G_LIKELY (forced_width == 0)) {
-- if (VTE_ISO2022_HAS_ENCODED_WIDTH(c)) {
-- columns = _vte_iso2022_get_encoded_width(c);
-- } else {
-- columns = _vte_iso2022_unichar_width(c);
-- }
-+ if (G_UNLIKELY (VTE_ISO2022_HAS_ENCODED_WIDTH(c))) {
-+ columns = _vte_iso2022_get_encoded_width(c);
-+ c &= ~VTE_ISO2022_ENCODED_WIDTH_MASK;
- } else {
-- columns = MIN(forced_width, 1);
-+ columns = _vte_iso2022_unichar_width(c);
- }
-- c &= ~(VTE_ISO2022_ENCODED_WIDTH_MASK);
-
- /* If we're autowrapping here, do it. */
- col = screen->cursor_current.col;
-@@ -2511,6 +2502,7 @@
+@@ -2511,6 +2514,7 @@
col = screen->cursor_current.col =
terminal->column_count - columns;
}
}
/* Make sure we have enough rows to hold this data. */
-@@ -2520,76 +2512,56 @@
- _vte_debug_print(VTE_DEBUG_IO|VTE_DEBUG_PARSE,
- "Inserting %ld '%c' (%d/%d) (%ld+%d, %ld), delta = %ld; ",
- (long)c, c < 256 ? c : ' ',
-- screen->defaults.fore, screen->defaults.back,
-+ screen->defaults.attr.fore,
-+ screen->defaults.attr.back,
- col, columns, (long)screen->cursor_current.row,
- (long)screen->insert_delta);
-
-- /* Make sure we're not getting random stuff past the right
-- * edge of the screen at this point, because the user can't
-- * see it. */
-- i = 0;
-- do {
-- /* If we're in insert mode, insert a new cell here
-- * and use it. */
-+ if (insert) {
-+ g_array_insert_val(row->cells, col,
-+ screen->color_defaults);
-+ }
-+ memcpy (&attr, &screen->defaults.attr, sizeof (attr));
-+ attr.columns = columns;
-+
-+ if (G_UNLIKELY (c == '_' && terminal->pvt->flags.ul)) {
-+ struct vte_charcell *pcell =
-+ &g_array_index (row->cells, struct vte_charcell, col);
-+ /* Handle overstrike-style underlining. */
-+ if (pcell->c != 0) {
-+ /* restore previous contents */
-+ c = pcell->c;
-+ attr.columns = pcell->attr.columns;
-+ attr.fragment = pcell->attr.fragment;
-+
-+ attr.underline = 1;
-+ }
-+ }
-+ g_array_index(row->cells, struct vte_charcell, col).c = c;
-+ g_array_index(row->cells, struct vte_charcell, col).attr = attr;
-+ col++;
-+
-+ /* insert wide-char fragments */
-+ for (i = 1; i < columns; i++) {
-+ attr.fragment = 1;
- if (insert) {
-- cell = screen->color_defaults;
-- g_array_insert_val(row->cells, col, cell);
-+ g_array_insert_val(row->cells, col,
-+ screen->color_defaults);
- }
-- cell.c = c;
-- cell.columns = columns;
-- if (paint_cells) {
-- cell.fore = screen->defaults.fore;
-- cell.back = screen->defaults.back;
-- }
-- cell.standout = screen->defaults.standout;
-- cell.underline = screen->defaults.underline;
-- cell.strikethrough = screen->defaults.strikethrough;
-- cell.reverse = screen->defaults.reverse;
-- cell.blink = screen->defaults.blink;
-- cell.half = screen->defaults.half;
-- cell.bold = screen->defaults.bold;
-- cell.invisible = screen->defaults.invisible;
-- cell.protect = screen->defaults.protect;
-- cell.alternate = 0;
-- cell.empty = 0;
-- cell.fragment = i != 0;
--
-- if (G_UNLIKELY (i == 0 &&
-- c == '_' &&
-- terminal->pvt->flags.ul)) {
-- struct vte_charcell *pcell =
-- &g_array_index (row->cells, struct vte_charcell, col);
-- /* Handle overstrike-style underlining. */
-- if (pcell->c != 0) {
-- /* restore previous contents */
-- cell.c = pcell->c;
-- cell.columns = pcell->columns;
-- cell.fragment = pcell->fragment;
-- cell.empty = pcell->empty;
--
-- cell.underline = 1;
-- }
-- }
-- g_array_index(row->cells, struct vte_charcell, col) = cell;
--
-- /* And take a step to the to the right. */
-+ g_array_index(row->cells, struct vte_charcell, col).c = c;
-+ g_array_index(row->cells, struct vte_charcell, col).attr = attr;
- col++;
-- } while (++i < columns);
-+ }
- if (G_UNLIKELY (row->cells->len > terminal->column_count)) {
- g_array_set_size(row->cells, terminal->column_count);
- }
-
- /* Signal that this part of the window needs drawing. */
-- if (invalidate_now) {
-- if (insert) {
-- _vte_invalidate_cells(terminal,
-- col - columns, terminal->column_count,
-- screen->cursor_current.row, 1);
-- } else {
-- _vte_invalidate_cells(terminal,
-- col - columns, columns,
-- screen->cursor_current.row, 1);
-- }
-+ if (G_UNLIKELY (invalidate_now)) {
-+ _vte_invalidate_cells(terminal,
-+ col - columns,
-+ insert ? terminal->column_count : columns,
-+ screen->cursor_current.row, 1);
- }
-
-
-@@ -2605,11 +2577,12 @@
- }
-
- /* We added text, so make a note of it. */
-- terminal->pvt->text_inserted_count++;
-+ terminal->pvt->text_inserted_flag = TRUE;
-
+@@ -2610,6 +2614,7 @@
_vte_debug_print(VTE_DEBUG_IO|VTE_DEBUG_PARSE,
"insertion delta => %ld.\n",
(long)screen->insert_delta);
}
static void
-@@ -2730,10 +2703,7 @@
+@@ -2730,10 +2735,7 @@
* then flush the buffers in case we're about to run a new
* command, disconnecting the timeout. */
if (terminal->pvt->incoming != NULL) {
_vte_incoming_chunks_release (terminal->pvt->incoming);
terminal->pvt->incoming = NULL;
terminal->pvt->input_bytes = 0;
-@@ -3042,12 +3012,8 @@
+@@ -3042,12 +3044,8 @@
* disconnecting the timeout. */
vte_terminal_stop_processing (terminal);
if (terminal->pvt->incoming) {
}
g_array_set_size(terminal->pvt->pending, 0);
-@@ -3112,29 +3078,23 @@
- vte_terminal_emit_text_modified(terminal);
- terminal->pvt->text_modified_flag = FALSE;
- }
-- if (terminal->pvt->text_inserted_count) {
-+ if (terminal->pvt->text_inserted_flag) {
- _vte_debug_print(VTE_DEBUG_SIGNALS,
-- "Emitting buffered `text-inserted' "
-- "(%ld).\n", terminal->pvt->text_inserted_count);
-+ "Emitting buffered `text-inserted'\n");
- _vte_terminal_emit_text_inserted(terminal);
-- terminal->pvt->text_inserted_count = 0;
-+ terminal->pvt->text_inserted_flag = FALSE;
- }
-- if (terminal->pvt->text_deleted_count) {
-+ if (terminal->pvt->text_deleted_flag) {
- _vte_debug_print(VTE_DEBUG_SIGNALS,
-- "Emitting buffered `text-deleted' "
-- "(%ld).\n", terminal->pvt->text_deleted_count);
-+ "Emitting buffered `text-deleted'\n");
- _vte_terminal_emit_text_deleted(terminal);
-- terminal->pvt->text_deleted_count = 0;
-+ terminal->pvt->text_deleted_flag = FALSE;
- }
--
-- terminal->pvt->text_modified_flag = FALSE;
-- terminal->pvt->text_inserted_count = 0;
-- terminal->pvt->text_deleted_count = 0;
- }
+@@ -3134,7 +3132,7 @@
/* Process incoming data, first converting it to unicode characters, and then
* processing control sequences. */
vte_terminal_process_incoming(VteTerminal *terminal)
{
VteScreen *screen;
-@@ -3244,7 +3204,7 @@
+@@ -3244,7 +3242,7 @@
bbox_bottomright.x = bbox_bottomright.y = -G_MAXINT;
bbox_topleft.x = bbox_topleft.y = G_MAXINT;
const char *match;
GQuark quark;
const gunichar *next;
-@@ -3265,10 +3225,10 @@
+@@ -3265,10 +3263,10 @@
if ((match != NULL) && (match[0] != '\0')) {
/* Call the right sequence handler for the requested
* behavior. */
/* Skip over the proper number of unicode chars. */
start = (next - wbuf);
modified = TRUE;
-@@ -3364,9 +3324,36 @@
+@@ -3364,9 +3362,37 @@
screen->cursor_current.row);
/* Insert the character. */
- _vte_terminal_insert_char(terminal, c,
-- FALSE, FALSE,
-- TRUE, 0);
+ if (G_UNLIKELY (_vte_terminal_insert_char(terminal, c,
-+ FALSE, FALSE))) {
+ FALSE, FALSE,
+- TRUE, 0);
++ TRUE, 0))){
+ /* line wrapped, correct bbox */
+ if (invalidated_text &&
+ (screen->cursor_current.col > bbox_bottomright.x + VTE_CELL_BBOX_SLACK ||
/* Add the cells over which we have moved to the region
* which we need to refresh for the user. */
bbox_bottomright.x = MAX(bbox_bottomright.x,
-@@ -3418,23 +3405,6 @@
+@@ -3418,23 +3444,6 @@
}
}
/* Remove most of the processed characters. */
if (start < wcount) {
unichars = g_array_new(FALSE, FALSE, sizeof(gunichar));
-@@ -3450,7 +3420,6 @@
+@@ -3450,7 +3459,6 @@
/* If we're out of data, we needn't pause to let the
* controlling application respond to incoming data, because
* the main loop is already going to do that. */
}
if (modified) {
-@@ -3486,6 +3455,26 @@
+@@ -3486,6 +3494,26 @@
_vte_terminal_queue_contents_changed(terminal);
}
if ((cursor.col != terminal->pvt->screen->cursor_current.col) ||
(cursor.row != terminal->pvt->screen->cursor_current.row)) {
/* invalidate the old and new cursor positions */
-@@ -3517,7 +3506,6 @@
+@@ -3517,7 +3545,6 @@
(long) unichars->len,
(long) _vte_incoming_chunks_length(terminal->pvt->incoming),
_vte_incoming_chunks_count(terminal->pvt->incoming));
}
static inline void
-@@ -3643,7 +3631,7 @@
+@@ -3643,7 +3670,7 @@
}
return !eof &&
terminal->pvt->input_bytes < terminal->pvt->max_input_bytes;
}
-@@ -3712,7 +3700,6 @@
+@@ -3712,7 +3739,6 @@
}
if (_vte_buffer_length(terminal->pvt->outgoing) == 0) {
leave_open = FALSE;
} else {
leave_open = TRUE;
-@@ -3803,9 +3790,7 @@
- _vte_terminal_insert_char(terminal,
- ucs4[i],
- FALSE,
-- TRUE,
-- TRUE,
-- 0);
-+ TRUE);
- }
- g_free(ucs4);
- }
-@@ -4538,7 +4523,7 @@
- {
- struct vte_charcell *pcell = NULL;
- gboolean word_char;
-- if ((pcell = vte_terminal_find_charcell(terminal, acol, arow)) != NULL && !pcell->empty) {
-+ if ((pcell = vte_terminal_find_charcell(terminal, acol, arow)) != NULL && pcell->c != 0) {
- word_char = vte_terminal_is_word_char(terminal, pcell->c);
-
- /* Lets not group non-wordchars together (bug #25290) */
-@@ -4546,7 +4531,7 @@
- return FALSE;
-
- pcell = vte_terminal_find_charcell(terminal, bcol, brow);
-- if (pcell == NULL || pcell->empty) {
-+ if (pcell == NULL || pcell->c == 0) {
- return FALSE;
- }
- if (word_char != vte_terminal_is_word_char(terminal,
-@@ -5197,26 +5182,26 @@
- /* If it's not part of a multi-column character,
- * and passes the selection criterion, add it to
- * the selection. */
-- if (!pcell->fragment &&
-+ if (!pcell->attr.fragment &&
- is_selected(terminal, col, row, data)) {
- /* Store the attributes of this character. */
-- fore = palette[pcell->fore];
-- back = palette[pcell->back];
-+ fore = palette[pcell->attr.fore];
-+ back = palette[pcell->attr.back];
- attr.fore.red = fore.red;
- attr.fore.green = fore.green;
- attr.fore.blue = fore.blue;
- attr.back.red = back.red;
- attr.back.green = back.green;
- attr.back.blue = back.blue;
-- attr.underline = pcell->underline;
-- attr.strikethrough = pcell->strikethrough;
-+ attr.underline = pcell->attr.underline;
-+ attr.strikethrough = pcell->attr.strikethrough;
-
- /* Store the character. */
- string = g_string_append_unichar(string,
- pcell->c ?
- pcell->c :
- ' ');
-- if (pcell->empty) {
-+ if (pcell->c == 0) {
- last_empty = string->len;
- last_emptycol = col;
- } else {
-@@ -5252,10 +5237,10 @@
- while ((pcell = _vte_row_data_find_charcell(row_data, col))) {
- col++;
-
-- if (pcell->fragment)
-+ if (pcell->attr.fragment)
- continue;
-
-- if (!pcell->empty)
-+ if (pcell->c != 0)
- break;
- }
- }
-@@ -5502,7 +5487,7 @@
- VteRowData *row_data = _vte_terminal_find_row_data (terminal, row);
- if (row_data != NULL) {
- struct vte_charcell *cell = _vte_row_data_find_charcell(row_data, col);
-- while (cell != NULL && cell->fragment && col > 0) {
-+ while (cell != NULL && cell->attr.fragment && col > 0) {
- cell = _vte_row_data_find_charcell(row_data, --col);
- }
- }
-@@ -5515,11 +5500,11 @@
- gint columns = 0;
- if (row_data != NULL) {
- struct vte_charcell *cell = _vte_row_data_find_charcell(row_data, col);
-- while (cell != NULL && cell->fragment && col > 0) {
-+ while (cell != NULL && cell->attr.fragment && col > 0) {
- cell = _vte_row_data_find_charcell(row_data, --col);
- }
- if (cell) {
-- columns = cell->columns - 1;
-+ columns = cell->attr.columns - 1;
- }
- }
- return MIN(col + columns, terminal->column_count);
-@@ -5725,7 +5710,7 @@
- for (i = 0; i < rowdata->cells->len; i++) {
- cell = &g_array_index(rowdata->cells,
- struct vte_charcell, i);
-- if (!cell->empty)
-+ if (cell->c == 0)
- last_nonempty = i;
- }
- /* Now find the first empty after it. */
-@@ -5759,7 +5744,7 @@
- for (i = 0; i < rowdata->cells->len; i++) {
- cell = &g_array_index(rowdata->cells,
- struct vte_charcell, i);
-- if (!cell->empty)
-+ if (cell->c != 0)
- last_nonempty = i;
- }
- /* Now find the first empty after it. */
-@@ -7203,11 +7188,20 @@
+@@ -7203,11 +7229,20 @@
vte_terminal_fc_settings_changed(GtkSettings *settings, GParamSpec *spec,
VteTerminal *terminal)
{
}
/* Connect to notifications from our settings object that font hints have
-@@ -7627,8 +7621,8 @@
- terminal->pvt->contents_changed_pending = FALSE;
- terminal->pvt->cursor_moved_pending = FALSE;
- terminal->pvt->text_modified_flag = FALSE;
-- terminal->pvt->text_inserted_count = 0;
-- terminal->pvt->text_deleted_count = 0;
-+ terminal->pvt->text_inserted_flag = FALSE;
-+ terminal->pvt->text_deleted_flag = FALSE;
-
- /* Clear modifiers. */
- terminal->pvt->modifiers = 0;
-@@ -7950,27 +7944,27 @@
- * reverse colors, else use the defaults. This means that many callers
- * who specify highlight or cursor should also specify reverse. */
- if (cursor && !highlight && terminal->pvt->cursor_color_set) {
-- *fore = cell ? cell->back : VTE_DEF_BG;
-+ *fore = cell ? cell->attr.back : VTE_DEF_BG;
- *back = VTE_CUR_BG;
- } else
- if (highlight && !cursor && terminal->pvt->highlight_color_set) {
-- *fore = cell ? cell->fore : VTE_DEF_FG;
-+ *fore = cell ? cell->attr.fore : VTE_DEF_FG;
- *back = VTE_DEF_HL;
- } else
-- if (reverse ^ ((cell != NULL) && (cell->reverse))) {
-- *fore = cell ? cell->back : VTE_DEF_BG;
-- *back = cell ? cell->fore : VTE_DEF_FG;
-+ if (reverse ^ ((cell != NULL) && (cell->attr.reverse))) {
-+ *fore = cell ? cell->attr.back : VTE_DEF_BG;
-+ *back = cell ? cell->attr.fore : VTE_DEF_FG;
- } else {
-- *fore = cell ? cell->fore : VTE_DEF_FG;
-- *back = cell ? cell->back : VTE_DEF_BG;
-+ *fore = cell ? cell->attr.fore : VTE_DEF_FG;
-+ *back = cell ? cell->attr.back : VTE_DEF_BG;
- }
-
- /* Handle invisible, bold, and standout text by adjusting colors. */
- if (cell) {
-- if (cell->invisible) {
-+ if (cell->attr.invisible) {
- *fore = *back;
- }
-- if (cell->bold) {
-+ if (cell->attr.bold) {
- if (*fore == VTE_DEF_FG) {
- *fore = VTE_BOLD_FG;
- } else
-@@ -7978,7 +7972,7 @@
- *fore += VTE_COLOR_BRIGHT_OFFSET;
- }
- }
-- if (cell->half) {
-+ if (cell->attr.half) {
- if (*fore == VTE_DEF_FG) {
- *fore = VTE_DIM_FG;
- } else
-@@ -7986,7 +7980,7 @@
- *fore = corresponding_dim_index[*fore];;
- }
- }
-- if (cell->standout) {
-+ if (cell->attr.standout) {
- if (*back < VTE_LEGACY_COLOR_SET_SIZE) {
- *back += VTE_COLOR_BRIGHT_OFFSET;
- }
-@@ -9117,9 +9111,9 @@
- (props[i].bg.red == 0) &&
- (props[i].bg.green == 0) &&
- (props[i].bg.blue == 0)) {
-- cells[i].fore = terminal->pvt->screen->color_defaults.fore;
-- cells[i].back = terminal->pvt->screen->color_defaults.back;
-- cells[i].reverse = TRUE;
-+ cells[i].attr.fore = terminal->pvt->screen->color_defaults.attr.fore;
-+ cells[i].attr.back = terminal->pvt->screen->color_defaults.attr.back;
-+ cells[i].attr.reverse = TRUE;
- }
- }
- }
-@@ -9143,10 +9137,10 @@
- i < attr->end_index && i < n_cells;
- i++) {
- if (attr->klass->type == PANGO_ATTR_FOREGROUND) {
-- cells[i].fore = ival;
-+ cells[i].attr.fore = ival;
- }
- if (attr->klass->type == PANGO_ATTR_BACKGROUND) {
-- cells[i].back = ival;
-+ cells[i].attr.back = ival;
- }
- }
- break;
-@@ -9156,7 +9150,7 @@
- for (i = attr->start_index;
- (i < attr->end_index) && (i < n_cells);
- i++) {
-- cells[i].strikethrough = (ival != FALSE);
-+ cells[i].attr.strikethrough = (ival != FALSE);
- }
- break;
- case PANGO_ATTR_UNDERLINE:
-@@ -9165,7 +9159,7 @@
- for (i = attr->start_index;
- (i < attr->end_index) && (i < n_cells);
- i++) {
-- cells[i].underline = (ival != PANGO_UNDERLINE_NONE);
-+ cells[i].attr.underline = (ival != PANGO_UNDERLINE_NONE);
- }
- break;
- case PANGO_ATTR_WEIGHT:
-@@ -9174,7 +9168,7 @@
- for (i = attr->start_index;
- (i < attr->end_index) && (i < n_cells);
- i++) {
-- cells[i].bold = (ival >= PANGO_WEIGHT_BOLD);
-+ cells[i].attr.bold = (ival >= PANGO_WEIGHT_BOLD);
- }
- break;
- default:
-@@ -9267,9 +9261,9 @@
- fore,
- back,
- TRUE, draw_default_bg,
-- cells[j].bold,
-- cells[j].underline,
-- cells[j].strikethrough,
-+ cells[j].attr.bold,
-+ cells[j].attr.underline,
-+ cells[j].attr.strikethrough,
- FALSE, FALSE, column_width, height);
- j += g_unichar_to_utf8(items[i].c, scratch_buf);
- }
-@@ -9332,7 +9326,7 @@
- if (row_data != NULL) {
- cell = _vte_row_data_find_charcell(row_data, i);
- if (cell != NULL) {
-- while (cell->fragment && i > 0) {
-+ while (cell->attr.fragment && i > 0) {
- cell = _vte_row_data_find_charcell(row_data, --i);
- }
- }
-@@ -9348,14 +9342,14 @@
- FALSE,
- &fore, &back);
-
-- bold = cell && cell->bold;
-- j = i + (cell ? cell->columns : 1);
-+ bold = cell && cell->attr.bold;
-+ j = i + (cell ? cell->attr.columns : 1);
-
- while (j < end_column){
- /* Don't render fragments of multicolumn characters
- * which have the same attributes as the initial
- * portions. */
-- if (cell != NULL && cell->fragment) {
-+ if (cell != NULL && cell->attr.fragment) {
- j++;
- continue;
- }
-@@ -9373,8 +9367,8 @@
- if (nback != back) {
- break;
- }
-- bold = cell && cell->bold;
-- j += cell ? cell->columns : 1;
-+ bold = cell && cell->attr.bold;
-+ j += cell ? cell->attr.columns : 1;
- }
- if (back != VTE_DEF_BG) {
- GdkColor color;
-@@ -9467,7 +9461,7 @@
- if (cell == NULL) {
- goto fg_next_row;
- }
-- while (cell->fragment && i > 0) {
-+ while (cell->attr.fragment && i > 0) {
- cell = _vte_row_data_find_charcell(row_data, --i);
- }
-
-@@ -9480,7 +9474,7 @@
- }
- while (cell->c == 0 ||
- cell->c == ' ' ||
-- cell->fragment) {
-+ cell->attr.fragment) {
- if (++i >= end_column) {
- goto fg_next_row;
- }
-@@ -9496,9 +9490,9 @@
- selected,
- FALSE,
- &fore, &back);
-- underline = cell->underline;
-- strikethrough = cell->strikethrough;
-- bold = cell->bold;
-+ underline = cell->attr.underline;
-+ strikethrough = cell->attr.strikethrough;
-+ bold = cell->attr.bold;
- if (terminal->pvt->show_match) {
- hilite = vte_cell_is_between(i, row,
- terminal->pvt->match_start.column,
-@@ -9511,7 +9505,7 @@
- }
-
- items[0].c = cell->c;
-- items[0].columns = cell->columns;
-+ items[0].columns = cell->attr.columns;
- items[0].x = start_x + i * column_width;
- items[0].y = y;
- j = i + items[0].columns;
-@@ -9558,7 +9552,7 @@
- /* Don't render blank cells or fragments of multicolumn characters
- * which have the same attributes as the initial
- * portions. */
-- if (cell->fragment) {
-+ if (cell->attr.fragment) {
- j++;
- continue;
- }
-@@ -9580,26 +9574,26 @@
- start_x + j * column_width,
- y,
- column_width,
-- cell->columns,
-+ cell->attr.columns,
- row_height)) {
-
-- j += cell->columns;
-+ j += cell->attr.columns;
- continue;
- }
- }
- if (nfore != fore) {
- break;
- }
-- nbold = cell->bold;
-+ nbold = cell->attr.bold;
- if (nbold != bold) {
- break;
- }
- /* Break up underlined/not-underlined text. */
-- nunderline = cell->underline;
-+ nunderline = cell->attr.underline;
- if (nunderline != underline) {
- break;
- }
-- nstrikethrough = cell->strikethrough;
-+ nstrikethrough = cell->attr.strikethrough;
- if (nstrikethrough != strikethrough) {
- break;
- }
-@@ -9618,7 +9612,7 @@
- }
- /* Add this cell to the draw list. */
- items[item_count].c = cell->c;
-- items[item_count].columns = cell->columns;
-+ items[item_count].columns = cell->attr.columns;
- items[item_count].x = start_x + j * column_width;
- items[item_count].y = y;
- j += items[item_count].columns;
-@@ -9647,7 +9641,7 @@
- j = start_column;
- cell = _vte_row_data_find_charcell(row_data, j);
- } while (cell == NULL);
-- while (cell->fragment && j > 0) {
-+ while (cell->attr.fragment && j > 0) {
- cell = _vte_row_data_find_charcell(row_data, --j);
- }
- } while (TRUE);
-@@ -9712,7 +9706,7 @@
+@@ -9712,7 +9747,7 @@
if (col_stop == terminal->column_count)
rect.width = terminal->widget.allocation.width;
else
rect.width -= rect.x;
if (row == 0)
rect.y = 0;
-@@ -9721,7 +9715,7 @@
+@@ -9721,7 +9756,7 @@
if (row_stop == terminal->row_count)
rect.height = terminal->widget.allocation.height;
else
rect.height -= rect.y;
gdk_region_union_with_rect(region, &rect);
-@@ -9748,16 +9742,14 @@
+@@ -9748,16 +9783,14 @@
height = terminal->char_height;
delta = screen->scroll_delta;
terminal->column_count);
if (col_stop <= col) {
return;
-@@ -9774,7 +9766,7 @@
+@@ -9774,7 +9807,7 @@
(col_stop - col) * width,
(row_stop - row) * height);
if (!GTK_WIDGET_DOUBLE_BUFFERED (terminal) ||
_vte_draw_clear (terminal->pvt->draw,
area->x, area->y,
area->width, area->height);
-@@ -9905,23 +9897,22 @@
-
- /* Find the character "under" the cursor. */
- cell = vte_terminal_find_charcell(terminal, col, drow);
-- while ((cell != NULL) && (cell->fragment) && (col > 0)) {
-+ while ((cell != NULL) && (cell->attr.fragment) && (col > 0)) {
- col--;
- cell = vte_terminal_find_charcell(terminal, col, drow);
- }
-
- /* Draw the cursor. */
- item.c = cell ? (cell->c ? cell->c : ' ') : ' ';
-- item.columns = cell ? cell->columns : 1;
-+ item.columns = cell ? cell->attr.columns : 1;
- item.x = col * width;
+@@ -9917,10 +9950,9 @@
item.y = row * height;
cursor_width = item.columns * width;
if (cell) {
- _vte_draw_get_char_width(terminal->pvt->draw,
- cell->c,
- cell->columns));
-- cursor_width += cell->bold; /* pseudo-bolding */
+ gint cw = _vte_draw_get_char_width (terminal->pvt->draw,
-+ cell->c, cell->attr.columns);
++ cell->c, cell->columns);
+ cursor_width = MAX(cursor_width, cw);
-+ cursor_width += cell->attr.bold; /* pseudo-bolding */
+ cursor_width += cell->bold; /* pseudo-bolding */
}
_vte_draw_clear(terminal->pvt->draw,
- col * width + VTE_PAD_WIDTH,
-@@ -9975,9 +9966,9 @@
- vte_terminal_draw_cells(terminal,
- &item, 1,
- fore, back, TRUE, FALSE,
-- cell->bold,
-- cell->underline,
-- cell->strikethrough,
-+ cell->attr.bold,
-+ cell->attr.underline,
-+ cell->attr.strikethrough,
- hilite,
- FALSE,
- width,
-@@ -10016,9 +10007,9 @@
- vte_terminal_draw_cells(terminal,
- &item, 1,
- fore, back, TRUE, FALSE,
-- cell->bold,
-- cell->underline,
-- cell->strikethrough,
-+ cell->attr.bold,
-+ cell->attr.underline,
-+ cell->attr.strikethrough,
- hilite,
- FALSE,
- width,
-@@ -10086,8 +10077,8 @@
- row * height + VTE_PAD_WIDTH,
- width * columns,
- height);
-- fore = screen->defaults.fore;
-- back = screen->defaults.back;
-+ fore = screen->defaults.attr.fore;
-+ back = screen->defaults.attr.back;
- vte_terminal_draw_cells_with_attributes(terminal,
- items, len,
- terminal->pvt->im_preedit_attrs,
-@@ -10104,18 +10095,6 @@
+@@ -10104,18 +10136,6 @@
FALSE,
TRUE,
width, height);
}
g_free(items);
}
-@@ -10130,14 +10109,19 @@
+@@ -10130,14 +10150,19 @@
vte_terminal_expose(GtkWidget *widget, GdkEventExpose *event)
{
VteTerminal *terminal = VTE_TERMINAL (widget);
/* if we expect to redraw the widget soon,
* just add this event to the list */
if (!terminal->pvt->invalidated_all) {
-@@ -10163,6 +10147,7 @@
+@@ -10163,6 +10188,7 @@
{
GtkAdjustment *adj;
VteTerminal *terminal;
glong new_value;
GdkModifierType modifiers;
int button;
-@@ -10216,21 +10201,19 @@
+@@ -10216,21 +10242,19 @@
/* Perform a history scroll. */
adj = terminal->adjustment;
vte_terminal_queue_adjustment_value_changed (terminal, new_value);
return TRUE;
-@@ -11530,10 +11513,10 @@
- * it's not a real attribute, but we need to treat it as one here. */
- terminal->pvt->screen = &terminal->pvt->alternate_screen;
- _vte_terminal_set_default_attributes(terminal);
-- terminal->pvt->screen->defaults.alternate = FALSE;
-+ terminal->pvt->screen->defaults.attr.alternate = FALSE;
- terminal->pvt->screen = &terminal->pvt->normal_screen;
- _vte_terminal_set_default_attributes(terminal);
-- terminal->pvt->screen->defaults.alternate = FALSE;
-+ terminal->pvt->screen->defaults.attr.alternate = FALSE;
- /* Clear the scrollback buffers and reset the cursors. */
- if (clear_history) {
- _vte_ring_free(terminal->pvt->normal_screen.row_data, TRUE);
-@@ -12120,11 +12103,8 @@
+@@ -12120,11 +12144,8 @@
{
gdouble elapsed;
glong target;
elapsed = g_timer_elapsed (process_timer, NULL) * 1000;
target = VTE_MAX_PROCESS_TIME / elapsed * terminal->pvt->input_bytes;
terminal->pvt->max_input_bytes =
-@@ -12174,12 +12154,11 @@
+@@ -12174,12 +12195,11 @@
active = TRUE;
if (VTE_MAX_PROCESS_TIME && !multiple_active) {
time_process_incoming (terminal);
if (!active && terminal->pvt->update_regions == NULL) {
if (terminal->pvt->active != NULL) {
_vte_debug_print(VTE_DEBUG_TIMEOUT,
-@@ -12292,18 +12271,18 @@
+@@ -12292,18 +12312,18 @@
}
_vte_terminal_enable_input_source (terminal);
}
again = update_regions (terminal);
if (!again) {
-@@ -12376,7 +12355,6 @@
+@@ -12376,7 +12396,6 @@
multiple_active = active_terminals->next != NULL;
for (l = active_terminals; l != NULL; l = next) {
VteTerminal *terminal = l->data;
next = g_list_next (l);
-@@ -12392,18 +12370,18 @@
+@@ -12392,18 +12411,18 @@
}
_vte_terminal_enable_input_source (terminal);
}
redraw |= update_regions (terminal);
}
-diff -urN vte-0.16.0/src/vtedraw.c vte-svn/src/vtedraw.c
+diff -urN vte-0.16.0/src/vtedraw.c vte-1846/src/vtedraw.c
--- vte-0.16.0/src/vtedraw.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtedraw.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtedraw.c 2007-03-18 13:22:32.000000000 +0100
@@ -226,9 +226,9 @@
}
}
gboolean
-diff -urN vte-0.16.0/src/vtedraw.h vte-svn/src/vtedraw.h
+diff -urN vte-0.16.0/src/vtedraw.h vte-1846/src/vtedraw.h
--- vte-0.16.0/src/vtedraw.h 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtedraw.h 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtedraw.h 2007-03-18 13:22:32.000000000 +0100
@@ -100,7 +100,7 @@
GtkWidget *widget;
gboolean started;
gboolean _vte_draw_requires_repaint(struct _vte_draw *draw);
gboolean _vte_draw_clip(struct _vte_draw *draw, GdkRegion *region);
void _vte_draw_clear(struct _vte_draw *draw,
-diff -urN vte-0.16.0/src/vteft2.c vte-svn/src/vteft2.c
+diff -urN vte-0.16.0/src/vteft2.c vte-1846/src/vteft2.c
--- vte-0.16.0/src/vteft2.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vteft2.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vteft2.c 2007-03-18 13:22:32.000000000 +0100
@@ -164,7 +164,7 @@
g_object_unref(data->pixbuf);
}
}
static void
-diff -urN vte-0.16.0/src/vtegl.c vte-svn/src/vtegl.c
+diff -urN vte-0.16.0/src/vtegl.c vte-1846/src/vtegl.c
--- vte-0.16.0/src/vtegl.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtegl.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtegl.c 2007-03-18 13:22:32.000000000 +0100
@@ -119,7 +119,6 @@
Display *display;
GdkScreen *gscreen;
}
static void
-diff -urN vte-0.16.0/src/vtepango.c vte-svn/src/vtepango.c
+diff -urN vte-0.16.0/src/vtepango.c vte-1846/src/vtepango.c
--- vte-0.16.0/src/vtepango.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtepango.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtepango.c 2007-03-18 13:22:32.000000000 +0100
@@ -175,13 +175,13 @@
if (data->pixmap != NULL) {
g_object_unref(data->pixmap);
data->pixmapw > 0 && data->pixmaph > 0;
}
}
-diff -urN vte-0.16.0/src/vtepangox.c vte-svn/src/vtepangox.c
+diff -urN vte-0.16.0/src/vtepangox.c vte-1846/src/vtepangox.c
--- vte-0.16.0/src/vtepangox.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtepangox.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtepangox.c 2007-03-18 13:22:32.000000000 +0100
@@ -208,13 +208,13 @@
if (data->pixmap != NULL) {
g_object_unref(data->pixmap);
data->pixmapw > 0 && data->pixmaph > 0;
}
}
-diff -urN vte-0.16.0/src/vte-private.h vte-svn/src/vte-private.h
+diff -urN vte-0.16.0/src/vte-private.h vte-1846/src/vte-private.h
--- vte-0.16.0/src/vte-private.h 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vte-private.h 2007-03-17 18:22:53.000000000 +0100
-@@ -95,27 +95,29 @@
- struct vte_charcell {
- gunichar c; /* The Unicode character. */
-
-- guint32 columns: 2; /* Number of visible columns (as determined
-- by g_unicode_iswide(c)). */
-- guint32 fore: 9; /* Indices in the color palette for the */
-- guint32 back: 9; /* foreground and background of the cell. */
--
-- guint32 fragment: 1; /* The nth fragment of a wide character. */
-- guint32 standout: 1; /* Single-bit attributes. */
-- guint32 underline: 1;
-- guint32 strikethrough: 1;
--
-- guint32 reverse: 1;
-- guint32 blink: 1;
-- guint32 half: 1;
-- guint32 bold: 1;
--
-- guint32 invisible: 1;
-- guint32 protect: 1;
-- guint32 alternate: 1;
-- guint32 empty : 1;
-+ struct vte_charcell_attr {
-+ guint32 columns: 2; /* Number of visible columns
-+ (as determined
-+ by g_unicode_iswide(c)). */
-+ guint32 fore: 9; /* Index into color palette */
-+ guint32 back: 9; /* Index into color palette. */
-+
-+ guint32 fragment: 1; /* A continuation cell. */
-+ guint32 standout: 1; /* Single-bit attributes. */
-+ guint32 underline: 1;
-+ guint32 strikethrough: 1;
-+
-+ guint32 reverse: 1;
-+ guint32 blink: 1;
-+ guint32 half: 1;
-+ guint32 bold: 1;
-+
-+ guint32 invisible: 1;
-+ guint32 protect: 1;
-+ guint32 alternate: 1;
-
-- /* no more bits left. any addition will enlarge the struct */
-+ /* 31 bits */
-+ } attr;
- };
-
- /* A match regex, with a tag. */
-@@ -275,8 +277,8 @@
- gboolean smooth_scroll;
- GHashTable *tabstops;
- gboolean text_modified_flag;
-- glong text_inserted_count;
-- glong text_deleted_count;
-+ gboolean text_inserted_flag;
-+ gboolean text_deleted_flag;
-
- /* Scrolling options. */
- gboolean scroll_background;
-@@ -395,11 +397,9 @@
++++ vte-1846/src/vte-private.h 2007-03-18 13:22:32.000000000 +0100
+@@ -395,7 +395,7 @@
void _vte_terminal_queue_contents_changed(VteTerminal *terminal);
void _vte_terminal_emit_text_deleted(VteTerminal *terminal);
void _vte_terminal_emit_text_inserted(VteTerminal *terminal);
-void _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
+gboolean _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
gboolean force_insert_mode,
-- gboolean invalidate_cells,
-- gboolean paint_cells,
-- gint forced_width);
-+ gboolean invalidate_cells);
- void _vte_terminal_scroll_region(VteTerminal *terminal,
- long row, glong count, glong delta);
- void _vte_terminal_set_default_attributes(VteTerminal *terminal);
-diff -urN vte-0.16.0/src/vteseq.c vte-svn/src/vteseq.c
---- vte-0.16.0/src/vteseq.c 2007-03-09 19:19:10.000000000 +0100
-+++ vte-svn/src/vteseq.c 2007-03-17 18:22:53.000000000 +0100
-@@ -341,8 +341,8 @@
- _vte_terminal_adjust_adjustments(terminal);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_inserted_count++;
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_inserted_flag = TRUE;
-+ terminal->pvt->text_deleted_flag = TRUE;
-
- return FALSE;
- }
-@@ -719,7 +719,6 @@
- /* Reset scrollbars and repaint everything. */
- terminal->adjustment->value =
- terminal->pvt->screen->scroll_delta;
-- terminal->pvt->adjustment_value_changed_pending = TRUE;
- vte_terminal_set_scrollback_lines(terminal,
- terminal->pvt->scrollback_lines);
- _vte_terminal_queue_contents_changed(terminal);
-@@ -862,7 +861,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.alternate = 0;
-+ terminal->pvt->screen->defaults.attr.alternate = 0;
- return FALSE;
- }
-
-@@ -917,7 +916,7 @@
- _vte_terminal_scroll_region(terminal, start, end - start + 1, param);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -938,7 +937,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.alternate = 1;
-+ terminal->pvt->screen->defaults.attr.alternate = 1;
- return FALSE;
- }
-
-@@ -1042,7 +1041,7 @@
- screen->cursor_current.row, 1);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1114,7 +1113,7 @@
- }
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1149,7 +1148,7 @@
- screen->cursor_current.row, 1);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1190,7 +1189,7 @@
- vte_sequence_handler_ho(terminal, NULL, 0, NULL);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1271,7 +1270,7 @@
- }
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1314,10 +1313,10 @@
- }
- /* Catch garbage. */
- rows = terminal->row_count;
-- if ((start <= 0) || (start >= rows)) {
-+ if (start <= 0 || start >= rows) {
- start = 0;
- }
-- if ((end <= 0) || (end >= rows)) {
-+ if (end <= 0 || end >= rows) {
- end = rows - 1;
- }
- /* Set the right values. */
-@@ -1325,12 +1324,13 @@
- screen->scrolling_region.end = end;
- screen->scrolling_restricted = TRUE;
- /* Special case -- run wild, run free. */
-- if ((screen->scrolling_region.start == 0) &&
-- (screen->scrolling_region.end == rows - 1)) {
-+ if (screen->scrolling_region.start == 0 &&
-+ screen->scrolling_region.end == rows - 1) {
- screen->scrolling_restricted = FALSE;
- }
- screen->cursor_current.row = screen->insert_delta + start;
- screen->cursor_current.col = 0;
-+
- return FALSE;
- }
-
-@@ -1486,7 +1486,7 @@
- /* Remove the column. */
- if (col < len) {
- g_array_remove_index(rowdata->cells, col);
-- if (screen->fill_defaults.back != VTE_DEF_BG) {
-+ if (screen->fill_defaults.attr.back != VTE_DEF_BG) {
- vte_g_array_fill (rowdata->cells,
- &screen->fill_defaults,
- terminal->column_count);
-@@ -1500,7 +1500,7 @@
- }
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1558,7 +1558,7 @@
- _vte_terminal_scroll_region(terminal, start, end - start + 1, -param);
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1674,7 +1674,7 @@
- }
-
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -1749,7 +1749,7 @@
-
- save = screen->cursor_current;
-
-- _vte_terminal_insert_char(terminal, ' ', TRUE, TRUE, TRUE, 0);
-+ _vte_terminal_insert_char(terminal, ' ', TRUE, TRUE);
-
- screen->cursor_current = save;
-
-@@ -1887,7 +1887,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.blink = 1;
-+ terminal->pvt->screen->defaults.attr.blink = 1;
- return FALSE;
- }
-
-@@ -1898,8 +1898,8 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.bold = 1;
-- terminal->pvt->screen->defaults.half = 0;
-+ terminal->pvt->screen->defaults.attr.bold = 1;
-+ terminal->pvt->screen->defaults.attr.half = 0;
- return FALSE;
- }
-
-@@ -1921,8 +1921,8 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.half = 1;
-- terminal->pvt->screen->defaults.bold = 0;
-+ terminal->pvt->screen->defaults.attr.half = 1;
-+ terminal->pvt->screen->defaults.attr.bold = 0;
- return FALSE;
- }
-
-@@ -1933,7 +1933,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.invisible = 1;
-+ terminal->pvt->screen->defaults.attr.invisible = 1;
- return FALSE;
- }
-
-@@ -1944,7 +1944,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.protect = 1;
-+ terminal->pvt->screen->defaults.attr.protect = 1;
- return FALSE;
- }
-
-@@ -1955,7 +1955,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.reverse = 1;
-+ terminal->pvt->screen->defaults.attr.reverse = 1;
- return FALSE;
- }
-
-@@ -2152,7 +2152,7 @@
- vte_sequence_handler_ue(terminal, match, match_quark, params);
- } else {
- /* Otherwise just set standout mode. */
-- terminal->pvt->screen->defaults.standout = 0;
-+ terminal->pvt->screen->defaults.attr.standout = 0;
- }
-
- g_free(blink);
-@@ -2184,10 +2184,9 @@
- start = screen->insert_delta;
- end = start + terminal->row_count - 1;
- }
--
- if (screen->cursor_current.row == end) {
- /* Match xterm and fill to the end of row when scrolling. */
-- if (screen->fill_defaults.back != VTE_DEF_BG) {
-+ if (screen->fill_defaults.attr.back != VTE_DEF_BG) {
- VteRowData *rowdata;
- rowdata = _vte_terminal_ensure_row (terminal);
- vte_g_array_fill (rowdata->cells,
-@@ -2243,7 +2242,7 @@
- }
-
- /* Match xterm and fill the new row when scrolling. */
-- if (screen->fill_defaults.back != VTE_DEF_BG) {
-+ if (screen->fill_defaults.attr.back != VTE_DEF_BG) {
- VteRowData *rowdata;
- rowdata = _vte_terminal_ensure_row (terminal);
- vte_g_array_fill (rowdata->cells,
-@@ -2317,7 +2316,7 @@
- vte_sequence_handler_us(terminal, match, match_quark, params);
- } else {
- /* Otherwise just set standout mode. */
-- terminal->pvt->screen->defaults.standout = 1;
-+ terminal->pvt->screen->defaults.attr.standout = 1;
- }
-
- g_free(blink);
-@@ -2499,7 +2498,7 @@
- cell = vte_terminal_find_charcell(terminal,
- column,
- screen->cursor_current.row);
-- while ((cell != NULL) && (cell->fragment) && (column > 0)) {
-+ while ((cell != NULL) && (cell->attr.fragment) && (column > 0)) {
- column--;
- cell = vte_terminal_find_charcell(terminal,
- column,
-@@ -2507,10 +2506,10 @@
- }
- if (cell != NULL) {
- /* Set this character to be underlined. */
-- cell->underline = 1;
-+ cell->attr.underline = 1;
- /* Cause the character to be repainted. */
- _vte_invalidate_cells(terminal,
-- column, cell->columns,
-+ column, cell->attr.columns,
- screen->cursor_current.row, 1);
- /* Move the cursor right. */
- vte_sequence_handler_nd(terminal, match, match_quark, params);
-@@ -2529,7 +2528,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.underline = 0;
-+ terminal->pvt->screen->defaults.attr.underline = 0;
- return FALSE;
- }
-
-@@ -2575,7 +2574,7 @@
- GQuark match_quark,
- GValueArray *params)
- {
-- terminal->pvt->screen->defaults.underline = 1;
-+ terminal->pvt->screen->defaults.attr.underline = 1;
- return FALSE;
- }
-
-@@ -2673,47 +2672,47 @@
- _vte_terminal_set_default_attributes(terminal);
- break;
- case 1:
-- terminal->pvt->screen->defaults.bold = 1;
-- terminal->pvt->screen->defaults.half = 0;
-+ terminal->pvt->screen->defaults.attr.bold = 1;
-+ terminal->pvt->screen->defaults.attr.half = 0;
- break;
- case 2:
-- terminal->pvt->screen->defaults.half = 1;
-- terminal->pvt->screen->defaults.bold = 0;
-+ terminal->pvt->screen->defaults.attr.half = 1;
-+ terminal->pvt->screen->defaults.attr.bold = 0;
- break;
- case 4:
-- terminal->pvt->screen->defaults.underline = 1;
-+ terminal->pvt->screen->defaults.attr.underline = 1;
- break;
- case 5:
-- terminal->pvt->screen->defaults.blink = 1;
-+ terminal->pvt->screen->defaults.attr.blink = 1;
- break;
- case 7:
-- terminal->pvt->screen->defaults.reverse = 1;
-+ terminal->pvt->screen->defaults.attr.reverse = 1;
- break;
- case 8:
-- terminal->pvt->screen->defaults.invisible = 1;
-+ terminal->pvt->screen->defaults.attr.invisible = 1;
- break;
- case 9:
-- terminal->pvt->screen->defaults.strikethrough = 1;
-+ terminal->pvt->screen->defaults.attr.strikethrough = 1;
- break;
- case 21: /* Error in old versions of linux console. */
- case 22: /* ECMA 48. */
-- terminal->pvt->screen->defaults.bold = 0;
-- terminal->pvt->screen->defaults.half = 0;
-+ terminal->pvt->screen->defaults.attr.bold = 0;
-+ terminal->pvt->screen->defaults.attr.half = 0;
- break;
- case 24:
-- terminal->pvt->screen->defaults.underline = 0;
-+ terminal->pvt->screen->defaults.attr.underline = 0;
- break;
- case 25:
-- terminal->pvt->screen->defaults.blink = 0;
-+ terminal->pvt->screen->defaults.attr.blink = 0;
- break;
- case 27:
-- terminal->pvt->screen->defaults.reverse = 0;
-+ terminal->pvt->screen->defaults.attr.reverse = 0;
- break;
- case 28:
-- terminal->pvt->screen->defaults.invisible = 0;
-+ terminal->pvt->screen->defaults.attr.invisible = 0;
- break;
- case 29:
-- terminal->pvt->screen->defaults.strikethrough = 0;
-+ terminal->pvt->screen->defaults.attr.strikethrough = 0;
- break;
- case 30:
- case 31:
-@@ -2723,7 +2722,7 @@
- case 35:
- case 36:
- case 37:
-- terminal->pvt->screen->defaults.fore = param - 30;
-+ terminal->pvt->screen->defaults.attr.fore = param - 30;
- break;
- case 38:
- {
-@@ -2737,17 +2736,17 @@
- break;
- }
- param1 = g_value_get_long(value1);
-- terminal->pvt->screen->defaults.fore = param1;
-+ terminal->pvt->screen->defaults.attr.fore = param1;
- i += 2;
- }
- break;
- }
- case 39:
- /* default foreground, no underscore */
-- terminal->pvt->screen->defaults.fore = VTE_DEF_FG;
-+ terminal->pvt->screen->defaults.attr.fore = VTE_DEF_FG;
- /* By ECMA 48, this underline off has no business
- being here, but the Linux console specifies it. */
-- terminal->pvt->screen->defaults.underline = 0;
-+ terminal->pvt->screen->defaults.attr.underline = 0;
- break;
- case 40:
- case 41:
-@@ -2757,7 +2756,7 @@
- case 45:
- case 46:
- case 47:
-- terminal->pvt->screen->defaults.back = param - 40;
-+ terminal->pvt->screen->defaults.attr.back = param - 40;
- break;
- case 48:
- {
-@@ -2771,14 +2770,14 @@
- break;
- }
- param1 = g_value_get_long(value1);
-- terminal->pvt->screen->defaults.back = param1;
-+ terminal->pvt->screen->defaults.attr.back = param1;
- i += 2;
- }
- break;
- }
- case 49:
- /* default background */
-- terminal->pvt->screen->defaults.back = VTE_DEF_BG;
-+ terminal->pvt->screen->defaults.attr.back = VTE_DEF_BG;
- break;
- case 90:
- case 91:
-@@ -2788,7 +2787,7 @@
- case 95:
- case 96:
- case 97:
-- terminal->pvt->screen->defaults.fore = param - 90 + VTE_COLOR_BRIGHT_OFFSET;
-+ terminal->pvt->screen->defaults.attr.fore = param - 90 + VTE_COLOR_BRIGHT_OFFSET;
- break;
- case 100:
- case 101:
-@@ -2798,7 +2797,7 @@
- case 105:
- case 106:
- case 107:
-- terminal->pvt->screen->defaults.back = param - 100 + VTE_COLOR_BRIGHT_OFFSET;
-+ terminal->pvt->screen->defaults.attr.back = param - 100 + VTE_COLOR_BRIGHT_OFFSET;
- break;
- }
- }
-@@ -2807,14 +2806,14 @@
- _vte_terminal_set_default_attributes(terminal);
- }
- /* Save the new colors. */
-- terminal->pvt->screen->color_defaults.fore =
-- terminal->pvt->screen->defaults.fore;
-- terminal->pvt->screen->color_defaults.back =
-- terminal->pvt->screen->defaults.back;
-- terminal->pvt->screen->fill_defaults.fore =
-- terminal->pvt->screen->defaults.fore;
-- terminal->pvt->screen->fill_defaults.back =
-- terminal->pvt->screen->defaults.back;
-+ terminal->pvt->screen->color_defaults.attr.fore =
-+ terminal->pvt->screen->defaults.attr.fore;
-+ terminal->pvt->screen->color_defaults.attr.back =
-+ terminal->pvt->screen->defaults.attr.back;
-+ terminal->pvt->screen->fill_defaults.attr.fore =
-+ terminal->pvt->screen->defaults.attr.fore;
-+ terminal->pvt->screen->fill_defaults.attr.back =
-+ terminal->pvt->screen->defaults.attr.back;
- return FALSE;
- }
-
-@@ -2854,7 +2853,7 @@
- }
- }
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -2894,7 +2893,7 @@
- /* Redraw everything. */
- _vte_invalidate_all(terminal);
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -2911,15 +2910,6 @@
-
- screen = terminal->pvt->screen;
-
-- /* Match xterm and fill to the end of row when moving. */
-- if (screen->fill_defaults.back != VTE_DEF_BG) {
-- VteRowData *rowdata;
-- rowdata = _vte_terminal_ensure_row (terminal);
-- vte_g_array_fill (rowdata->cells,
-- &screen->fill_defaults,
-- terminal->column_count);
-- }
--
- val = 0;
- if ((params != NULL) && (params->n_values > 0)) {
- value = g_value_array_get_nth(params, 0);
-@@ -3292,7 +3282,7 @@
- break;
- }
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return again;
- }
-
-@@ -3337,7 +3327,7 @@
- break;
- }
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return again;
- }
-
-@@ -3410,7 +3400,7 @@
- /* Adjust the scrollbars if necessary. */
- _vte_terminal_adjust_adjustments(terminal);
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_inserted_count++;
-+ terminal->pvt->text_inserted_flag = TRUE;
- return FALSE;
- }
-
-@@ -3463,7 +3453,7 @@
- /* Adjust the scrollbars if necessary. */
- _vte_terminal_adjust_adjustments(terminal);
- /* We've modified the display. Make a note of it. */
-- terminal->pvt->text_deleted_count++;
-+ terminal->pvt->text_deleted_flag = TRUE;
- return FALSE;
- }
-
-@@ -3688,10 +3678,9 @@
- }
- _vte_terminal_emit_text_deleted(terminal);
- /* Fill this row. */
-- cell = screen->basic_defaults;
- cell.c = 'E';
-- cell.columns = 1;
-- cell.empty = 0;
-+ memcpy (&cell.attr, &screen->basic_defaults.attr, sizeof (cell.attr));
-+ cell.attr.columns = 1;
- vte_g_array_fill(rowdata->cells, &cell, terminal->column_count);
- _vte_terminal_emit_text_inserted(terminal);
- }
-diff -urN vte-0.16.0/src/vtexft.c vte-svn/src/vtexft.c
+ gboolean invalidate_cells,
+ gboolean paint_cells,
+diff -urN vte-0.16.0/src/vtexft.c vte-1846/src/vtexft.c
--- vte-0.16.0/src/vtexft.c 2007-03-08 17:47:15.000000000 +0100
-+++ vte-svn/src/vtexft.c 2007-03-17 18:22:53.000000000 +0100
++++ vte-1846/src/vtexft.c 2007-03-18 13:22:32.000000000 +0100
@@ -39,8 +39,6 @@
#define FONT_INDEX_FUDGE 1
#define CHAR_WIDTH_FUDGE 1
}
static GPtrArray *
-diff -urN vte-0.16.0/termcaps/xterm-color vte-svn/termcaps/xterm-color
+diff -urN vte-0.16.0/termcaps/xterm-color vte-1846/termcaps/xterm-color
--- vte-0.16.0/termcaps/xterm-color 1970-01-01 01:00:00.000000000 +0100
-+++ vte-svn/termcaps/xterm-color 2007-03-17 19:21:20.000000000 +0100
++++ vte-1846/termcaps/xterm-color 2007-03-18 13:22:43.000000000 +0100
@@ -0,0 +1,27 @@
+# This is a cut-down version of the termcap file from my box.
+